这一篇我们将来学习下在什么情况下需要在QlikView里创建一个Key或者Link Table来避免事实表loops 和 qlikview自动产生synthetic keys。当两个事实表共享同样的键集合的时候,concatenation应该是首选方案去避免qlikview自动的创建synthetic key. 然而,如果一个事实表的比另外一个事实表的key键多,而且多出的key键值和另外一个事实表没有关联,这个时候创建一个key table去连接这些键值的方案就更加适合。

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
];

加载数据后,查看Data Model 如下:

从上面可以看出,QLIKVIEW帮我们自动产生了一个synthetic key named $Syn1 includes ProductID and StoreID. Budget和Sales两个表同时共享一个$Syn1,但是Sales事实表比Budget事实表多一个key named DateID. 所以这种情况下用concatenate不太适合。

这个时候我们可们可以为Sales和Budget表创建一个键字段 (key filed),它包含两个表的共同的键字段。如下所示:

第一步:为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里的字段
// These fields are no longer needed in the fact tables
Drop Fields StoreID, ProductID From Sales;
Drop Fields StoreID, ProductID From Budget;

第五步:Reload the script.此时的Data Model如下图:

Now that the synthetic key is gone.

Note:
1,这里的Join Load,是full outer join,他能包含两个表里的所有可能的值到key table.所有的在product 或则 store表里的选择任然可以正确的关联到Sales和Budget事实表上。其中的load里的distinct字句是保证只有唯一的值才被添加到key table里。
2,AutoNumberHash265是一个可以为相同的信息组合返回同样的一个整型值。如果是想把好几个值转换成一个整型的值的话,这个函数就可以做到。你需要注意的是该函数只能保证在同一个load script里返回同样的值。在不同的load script里就不能保证了。

3,当然这个例子我们完全可以用concatenate来处理,上面只是在什么情况下和如何使用key/link table.

4,用concatenate处理如下:

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:
Concatenate (Sales)
LOAD
*
INLINE [
StoreID, ProductID, BudgetQty, BudgetValue
1, 1, 5, 50
1, 2, 6, 47
2, 1, 5, 41
2, 2, 4, 27
];

Data Model如下图:

当然此data model也是没有synthetic key的。




Qlikview Data Modeling---创建一个Key/Link Table相关推荐

  1. Qlikview Data Modeling---Concatenation

     这篇Blog主要介绍下通过Concatenation(串联) 事实表来避免loops 和 synthetic keys: Qlikview里的建模通常都是是很简单的.通常我们只要重新命名一些子段 ...

  2. hive如何创建一个分区表

    分区:partition 创建一个分区表 create table 表名称( 字段信息 ) PARTITIONED BY( 分区名称1 数据类型 COMMENT '注释:可不写', 分区名称2 数据类 ...

  3. 使用YAML创建一个 Kubernetes Depolyment

    关注公众号"风色年代"订阅更多精彩文章,本博大部分文章为转载并已标明原文出处,如有再转敬请保留,请自觉尊重原创作者的劳动成果! https://www.kubernetes.org ...

  4. 利用idea创建一个基本的smm项目(带增删改查)

    环境  idea  jdk1.8  tomcat  mysql 打开idea选择创建一个maven项目 然后点击next,next,finsh 然后看项目的结构 如图所示 接着创建com包,再在com ...

  5. 创建一个Table View

    在本课程中,您将创建应用程序FoodTracker的主屏幕.您将创建第二个,表视图为主场景,列出了用户的菜谱.你会设计定制表格单元格显示每一个菜谱,它是这样的: 学习目标 在课程结束时,你将能够: 创 ...

  6. tensorflow tf.data.Dataset.from_tensor_slices() (创建一个“数据集”,其元素是给定张量的切片)

    from tensorflow\python\data\ops\dataset_ops.py @staticmethoddef from_tensor_slices(tensors):"&q ...

  7. data的值 如何初始化vue_vue 创建一个基础实例【02】

    学习要点:1.框架理解    2.options    3.生命周期 本节课我们来开始学习 Vue 声明对象,并且理解传递选项对象的方法. 一.框架理解 1. 所有的前端框架基本都是为了简化:模版渲染 ...

  8. 如何在OpenAI创建一个api key(chatgpt)?

    要创建OpenAI API Key,请按照以下步骤进行: 访问OpenAI的官方网站(https://openai.com/)并注册一个账户.如果你已经有了账户,请直接登录. 登录后,转到OpenAI ...

  9. R语言使用多个数据类型不同的向量数据创建一个dataframe数据对象、使用[]操作符和列名称访问dataframe指定数据列的数据(dataframe column data)

    R语言使用多个数据类型不同的向量数据创建一个dataframe数据对象.使用[]操作符和列名称访问dataframe指定数据列的数据(dataframe column data) 目录 R语言使用多个 ...

最新文章

  1. centos服务器之间相互挂载(samba)
  2. html怎样获取画面项目的坐标,如何使用HTML5实现地理位置的获取
  3. python文件对象提供了3个读方法、分别是-python3基础之文件对象操作
  4. Qt中的QSpinBox
  5. windows环境搭建ios+xcode
  6. python字符串与文本处理技巧(4): 格式化输出、令牌解析、串上串
  7. RocketMQ实战与原理---安装、部署及简单应用
  8. Ironport对邮件主题中包括特殊字符的过滤
  9. php postgresql多条,PHPPostgreSQL函数列表 - phpStudy
  10. 被引10万次:21世纪高被引论文Top 10
  11. 爱我的人请别走远(转载)
  12. 蓝桥杯 BASIC-22 基础练习 FJ的字符串
  13. base64 convert to file
  14. Linux 基本命令不能用的解决方法
  15. fiddler修改客户端发出去的请求
  16. 菲波那切数列java_斐波那契数列—java实现
  17. STM32入门开发: 介绍SPI总线、读写W25Q64(FLASH)(硬件+模拟时序)
  18. 【总结】最专业最系统的CV内容,有三AI所有免费与付费的计算机视觉课程汇总(2022年7月)...
  19. uni-app uni.request简单封装(请求头配置及response处理)
  20. [转]Facebook 如何管理150亿张照片

热门文章

  1. iOS应用中crash 奔溃解析
  2. php添加学生信息,PHP开发 学生管理系统之添加信息PHP页面
  3. python求梅森尼数_python3算梅森素数的最佳代码是什么?
  4. DAO是什么?——为什么有人试图购买美国宪法?
  5. 基于css的表单模板
  6. 计算机管理没有固态硬盘,电脑的BIOS中没有固态硬盘启动选项怎么办?
  7. 2PC、3PC、TCC
  8. python国内下载地址_python下载链接
  9. 《数据结构 思维导图》
  10. matlab-高数 plot 二维画图 绝对值函数 取整函数 分段函数