解决loops与synthetic keys的问题
2016-03-01 12:03
309 查看
1. 重命名字段防止字段关联。
2. Concatenation(串联)
qlikview为我们自动产生了一个synthetic key,可以看出Sales和Waste共享同样的key set(StoreID,DateID,ProductID),这种情况我们就可以通过concatenate去消除此key set。
修改waste表的加载方式如下:
//Waste:
Concatenate (Sales)
LOAD * INLINE [
DateID, StoreID, ProductID, WasteQty, WasteValue
1, 1, 1, 1, 10
2, 1, 2, 1, 9
1, 2, 2, 2, 17
2, 2, 2, 1, 8
];
这个时候synthetic key消失了。
注意:
1. 当两个事实表共享同样的相同个数的(key set)键集合的时候,concatenation应该是首选方案去避免qlikview自动的创建synthetic key.
2. concatenate 相当于把两个小表合并成一个大表,此大表包含2个表的所有子段列,和所有的行信息。同时做了横向和纵向的扩展。
3. QIikview 在做计算的时候是直接忽略null值的。即在qlikview的表达式里存在NULL的行做运算的时候,qlikview直接忽略它,其他的非NULL的值可以做运算。但是在SQL SERVER里如果有NULL的参与运算的时候,结果肯定是NULL。
3. LinkTable
Budget和Sales两个表同时共享一个$Syn1,但是Sales事实表比Budget事实表多一个key named DateID. 所以这种情况下用concatenate不太适合。
第一步:为Sales和Budget表创建一个键字段 (key filed),它包含两个表的共同的键字段。
Sales:
LOAD
AutoNumberHash256(StoreID, ProductID) As SalesBudgetID,
*
INLINE [
DateID, StoreID, ProductID, SaleQty, SaleValue
1, 1, 1, 2, 23
1, 1, 2, 4, 24
2, 1, 1, 4, 33
2, 1, 2, 3, 28
1, 2, 1, 2, 21
1, 2, 2, 4, 30
2, 2, 1, 3, 25
];
Budget:
LOAD
AutoNumberHash256(StoreID, ProductID) As SalesBudgetID,
*
INLINE [
StoreID, ProductID, BudgetQty, BudgetValue
1, 1, 5, 50
1, 2, 6, 47
2, 1, 5, 41
2, 2, 4, 27
];
第二步:通过Sales表的数据创建一个key table。
Key:
Load Distinct
SalesBudgetID,
StoreID,
ProductID
Resident
Sales;
第三步: 和Budget表所有匹配的记录进行连接Join。
Join (Key)
Load Distinct
SalesBudgetID,
StoreID,
ProductID
Resident
Budget;
第四步:删除Sales和Budget表里的已经在Key Table里的字段。
Drop Fields StoreID, ProductID From Sales;
Drop Fields StoreID, ProductID From Budget;
2. Concatenation(串联)
Store: Load * Inline [ StoreID, StoreName 1, Store A 2, Store B ]; Calendar: Load MonthID As DateID, Month Inline [ MonthID, Month 1, Jan 2, Feb ]; Product: Load * Inline [ ProductID, Product 1, Product A 2, Product B ]; Sales: LOAD * INLINE [ DateID, StoreID, ProductID, SaleQty, SaleValue 1, 1, 1, 2, 23 1, 1, 2, 4, 24 2, 1, 1, 4, 33 2, 1, 2, 3, 28 1, 2, 1, 2, 21 1, 2, 2, 4, 30 2, 2, 1, 3, 25 ]; Waste: LOAD * INLINE [ DateID, StoreID, ProductID, WasteQty, WasteValue 1, 1, 1, 1, 10 2, 1, 2, 1, 9 1, 2, 2, 2, 17 2, 2, 2, 1, 8 ];
qlikview为我们自动产生了一个synthetic key,可以看出Sales和Waste共享同样的key set(StoreID,DateID,ProductID),这种情况我们就可以通过concatenate去消除此key set。
修改waste表的加载方式如下:
//Waste:
Concatenate (Sales)
LOAD * INLINE [
DateID, StoreID, ProductID, WasteQty, WasteValue
1, 1, 1, 1, 10
2, 1, 2, 1, 9
1, 2, 2, 2, 17
2, 2, 2, 1, 8
];
这个时候synthetic key消失了。
注意:
1. 当两个事实表共享同样的相同个数的(key set)键集合的时候,concatenation应该是首选方案去避免qlikview自动的创建synthetic key.
2. concatenate 相当于把两个小表合并成一个大表,此大表包含2个表的所有子段列,和所有的行信息。同时做了横向和纵向的扩展。
3. QIikview 在做计算的时候是直接忽略null值的。即在qlikview的表达式里存在NULL的行做运算的时候,qlikview直接忽略它,其他的非NULL的值可以做运算。但是在SQL SERVER里如果有NULL的参与运算的时候,结果肯定是NULL。
3. LinkTable
Store: Load * Inline [ StoreID, StoreName 1, Store A 2, Store B ]; Calendar: Load MonthID As DateID, Month Inline [ MonthID, Month 1, Jan 2, Feb ]; Product: Load * Inline [ ProductID, Product 1, Product A 2, Product B ]; Sales: LOAD * INLINE [ DateID, StoreID, ProductID, SaleQty, SaleValue 1, 1, 1, 2, 23 1, 1, 2, 4, 24 2, 1, 1, 4, 33 2, 1, 2, 3, 28 1, 2, 1, 2, 21 1, 2, 2, 4, 30 2, 2, 1, 3, 25 ]; Budget: LOAD * INLINE [ StoreID, ProductID, BudgetQty, BudgetValue 1, 1, 5, 50 1, 2, 6, 47 2, 1, 5, 41 2, 2, 4, 27 ];
Budget和Sales两个表同时共享一个$Syn1,但是Sales事实表比Budget事实表多一个key named DateID. 所以这种情况下用concatenate不太适合。
第一步:为Sales和Budget表创建一个键字段 (key filed),它包含两个表的共同的键字段。
Sales:
LOAD
AutoNumberHash256(StoreID, ProductID) As SalesBudgetID,
*
INLINE [
DateID, StoreID, ProductID, SaleQty, SaleValue
1, 1, 1, 2, 23
1, 1, 2, 4, 24
2, 1, 1, 4, 33
2, 1, 2, 3, 28
1, 2, 1, 2, 21
1, 2, 2, 4, 30
2, 2, 1, 3, 25
];
Budget:
LOAD
AutoNumberHash256(StoreID, ProductID) As SalesBudgetID,
*
INLINE [
StoreID, ProductID, BudgetQty, BudgetValue
1, 1, 5, 50
1, 2, 6, 47
2, 1, 5, 41
2, 2, 4, 27
];
第二步:通过Sales表的数据创建一个key table。
Key:
Load Distinct
SalesBudgetID,
StoreID,
ProductID
Resident
Sales;
第三步: 和Budget表所有匹配的记录进行连接Join。
Join (Key)
Load Distinct
SalesBudgetID,
StoreID,
ProductID
Resident
Budget;
第四步:删除Sales和Budget表里的已经在Key Table里的字段。
Drop Fields StoreID, ProductID From Sales;
Drop Fields StoreID, ProductID From Budget;
相关文章推荐
- tomcat绑定域名--常忘-记录
- 图文解说Win7系统机器上发布C#+ASP.NET网站
- 在团800运维工作总结之kafka集群日常工作经验总结
- hadoop2.6数据导入elasticsearch2.2(解析hbase导出数据)
- JAVAWEB学习——TOMCAT安装及虚拟目录的配置
- Linux命令
- linux C共享内存函数
- tomcat与jdk整合,免安装
- Linux 终端下 dstat 监控工具
- Linux下修改Mysql的用户(root)的密码
- UVA 11078(p41)----Open Credit System
- dubbo-monitor-simple-2.5.3-assembly 简易监控中心安装
- Linux GCC常用命令
- linux设置虚拟内存(swap)解决mysql因内存不足挂掉的故障
- 发布工程后,启动tomcat出现如下内存溢出错误: java.lang.OutOfMemoryErr
- CMDB项目之监控模板template设计
- ionic入门教程第二课-从Tabs案例看Ionic的MVC架构
- opencv学习-opencv2.4.10在vs2013下的配置方法
- linux 下源码安装cmake
- HBase 常用Shell命令