数据建模的最佳实践
本部分介绍根据数据构建方式和需要实现的数据模型将数据加载到 Qlik Sense 应用程序中的各种不同方式。
将数据列转变为行
我的数据可能形式如此,我希望让销售数字位于单独的字段:
年 | Q1 | Q2 | Q3 | Q4 |
---|---|---|---|---|
2013 | 34 | 54 | 53 | 52 |
2014 | 47 | 56 | 65 | 67 |
2015 | 57 | 56 | 63 | 71 |
建议的操作
在您加载表格时,使用 Crosstable 前缀。
结果会如下所示:
Year | Quarter | Sales |
---|---|---|
2013 | Q1 | 34 |
2013 | Q2 | 54 |
2013 | Q3 | 53 |
2013 | Q4 | 52 |
2014 | Q1 | 47 |
... | ... | ... |
要了解有关交叉表的更多信息,请参阅在数据加载脚本中使用交叉表和Crosstable。
将数据行转变为字段
我具有带三个与此相似的字段的通用表格,我希望让每个属性采用单独表格的形式:
Object | Attribute | Value |
---|---|---|
ball | color | red |
ball | diameter | 25 |
ball | weight | 3 |
box | color | 56 |
box | height | 30 |
box | length | 20 |
box | width | 25 |
建议的操作
使用通用加载前缀创建通用数据模型。
您将得到与此类似的数据模型:
要了解有关一般数据的更多信息,请参阅通用数据库和Generic。
加载以层次级别(例如组织体系)组织的数据
我的数据存储在与此类似的相邻节点表中:
NodeID | ParentNodeID | Title |
---|---|---|
1 | - | General manager |
2 | 1 | Country manager |
3 | 2 | Region manager |
建议的操作
加载具有层次结构前缀的数据,创建扩展的节点表:
NodeID | ParentNodeID | Title | Level1 | Level2 | Level3 |
---|---|---|---|---|---|
1 | - | General manager | General manager | - | - |
2 | 1 | Country manager | General manager | Country manager | - |
3 | 2 | Region manager | General manager | Country manager | Region manager |
要了解有关层次级别的更多信息,请参阅加载层次结构数据和Hierarchy。
仅从大型数据库加载新的或更新的记录
我拥有具有大量记录的数据库,我不希望重新加载整个数据库来刷新我应用程序中的数据。我只想加载新的或更新的记录,并移除已从数据库删除的记录。
建议的操作
使用 QVD 文件实施增量加载解决方案。
有关更多信息,请参阅加载新的和更新的记录与增量加载。
将来自两个表格的数据和公共字段整合
Qlik Sense 将自动把表格和通用字段关联,但是我希望控制组合表格的方式。
建议的操作 : Join / Keep
您可将两个表格组合为具有 Join 或 Keep 前缀的单个内部表格。
有关更多信息,请参阅使用 Join 和 Keep 合并表格。
建议的操作 : Mapping
接合两个表格的备选方法为使用映射,由此在映射表中自动查找相关值。这样可减少要加载的数据量。
有关更多信息,请参阅将映射用作联接的替代。
将离散值和间隔匹配
我有离散数值表 (Event),我希望将其和一个或多个间隔(Start 和 End)匹配。
时间 | 事件 | 注释 |
---|---|---|
00:00 | 0 | 班次 1 开始 |
01:18 | 1 | 生产线停止 |
02:23 | 2 | 生产线重新启动 50% |
04:15 | 3 | 生产线速度 100% |
08:00 | 4 | 班次 2 开始 |
11:43 | 5 | 结束或生产 |
开始 | 结束 | 排序 |
---|---|---|
01:00 | 03:35 | A |
02:30 | 07:58 | B |
03:04 | 10:27 | C |
07:23 | 11:43 | D |
建议的操作
使用 IntervalMatch 前缀将 Time 字段和间隔关联,该间隔由 Start 和 End 定义。
有关更多信息,请参阅离散数据的匹配间隔。
如果间隔未明确定义开头和结尾,只有类似下表中的更改时间戳,您将需要创建间隔表。
货币 | 更改数据 | Rate |
---|---|---|
EUR | - | 8.59 |
EUR | 28/01/2013 | 8.69 |
EUR | 15/02/2013 | 8.45 |
USD | - | 6.50 |
USD | 10/01/2013 | 6.56 |
USD | 03/02/2013 | 6.30 |
有关更多信息,请参阅根据一个日期创建日期间隔。
处理不一致的字段值
我的数据包含在不同表格中命名不一致的字段值。例如,一个表格在“国家/地区”字段包含值 US,而另一个表格则包含 United States。这种情况将阻止关联。
国家/地区 | 区域 |
---|---|
US | Maryland |
US | Idaho |
US | New York |
US | California |
Country | Population |
---|---|
United States | 304 |
Japan | 128 |
Brazil | 192 |
China | 1333 |
建议的操作
使用映射表执行数据清理,由此将比较字段值并实现正确关联。
有关更多信息,请参阅数据清理。
处理不一致的字段值首字母大写
我的数据包含在不同表格中格式不一致的字段值例如,一个表格包含值 single 于 Type 中,而另一个表格在相同字段包含 Single。该情况将阻止关联,因为 Type 字段将包含 single 和 Single 值、首字母大写的内容。
类型 | 价格 |
---|---|
单 | 23 |
双 | 39 |
类型 | 颜色 |
---|---|
单色 | 红色 |
单色 | 蓝色 |
双 | 白色 |
双 | Black |
建议的操作
如果您通过添加数据来加载数据,则可在数据管理器中解决该问题。
执行以下操作:
- 在数据管理器中,在表格编辑器中打开 Table2。
-
将 Type 字段重命名为 Table2.Type。
如果在启用数据分析后通过添加数据添加了表格,字段可能已命名为 Table2.Type 以防止自动关联。在该情况下,该程序将关联两个表格。
- 使用表达式 Lower(Table2.Type) 创建计算的字段并将其命名为 Type。
- 单击加载数据。
Table1 和 Table2 现在应当已通过字段 Type 关联,该字段仅包含小写的值,例如 single 和 double。
如果您希望使用不同的首字母大写,则也可通过相似的程序完成操作,但是要记住表格将使用具有相同名称的字段关联。
- 要让所有值大写,例如 Single,可改为创建计算的 Type 字段于 Table1 中,并使用表达式 Capitalize(Table1.Type)。
- 要让所有值为大写形式,例如 SINGLE,可在两个表格中创建计算的 Type 字段,并相应使用表达式 Upper(Table1.Type) 和 Upper(Table2.Type)。
要了解有关计算的字段的更多信息,请参阅使用已计算字段。
要了解有关大写的更多信息,请参阅Capitalize - 脚本和图表函数、Lower - 脚本和图表函数 和 Upper - 脚本和图表函数。
加载地理空间数据以使用地图将数据可视化
我有希望用地图可视化的数据,例如按国家/地区或按商店划分的销售数据。要使用地图可视化,我需要加载区域或点数据。
建议的操作
您可从 KML 文件或 Excel 文件加载和您的数据值位置匹配的区域或点数据。此外,您需要加载实际地图背景。
有关更多信息,请参阅加载您自己的地图数据。