QlikView - Circular Reference

当我们可以使用两个或更多不同路径从一个表遍历到另一个表时,会发生

循环引用.这意味着您可以使用列直接将Table1与Table2连接,或者您也可以先将Table1与Table3连接,然后将table3与Table2连接.这可能导致由数据模型形成的输出中的错误结果,该数据模型加载所有这三个表.一旦识别出循环引用,QlikView就会阻止此类数据加载到其内存中.

输入数据

让我们考虑以下三个CSV数据文件,用作进一步插图的输入.

SalesCountries:
ProductID,ProductCategory,Country,SaleAmount
1,Outdoor Recreation,Italy,4579
2,Clothing,USA,4125
3,Costumes & Accessories,South Korea,6521
4,Athletics,Japan,4125
5,Personal Care,Brazil,5124
6,Arts & Entertainment,China,1245
7,Hardware,South America,456
8,Home & Garden,Peru,241
9,Food,India,1247
10,Home & Garden,Singapore,5462
11,Office Supplies,Hungary,577

ProductCountry:
ProductID, Country
3,Brazil
3,China
2,Korea
1,USA
2,Singapore
7,Sri Lanka
1,Italy

加载脚本

我们使用脚本编辑器加载上述输入数据,脚本编辑器通过按 Control + E 调用.选择表格文件选项并浏览输入文件.

1_cr_load_script

数据加载

创建上述脚本后,我们使用命令 Control + R 将数据加载到QlikView的内存中.这是当我们得到错误提示,提到加载的表中是否存在循环循环.

2_warning

数据模型

要查找上述警告的确切原因,我们可以使用表查看器的菜单命令查看数据模型 -  控制+ T 的.出现以下屏幕,清楚地显示循环参考.这里可以使用字段 Region 直接实现RegionCountry和SalesRegion之间的连接.它也可以通过首先转到表ProductCountry,使用字段 Country 然后将ProdcutID与Salesregion映射来实现.

3_cr_data_model

解析循环引用

上述循环引用可以通过重命名数据中的某些列来解决设置,以便QlikView不会使用列名自动在表之间形成关联.为此,我们将RegionCountry中的country列重命名为SalesCountry.在数据集ProdcuCountry中,我们将Country列重命名为ProductCountry.

4_cr_load_script_rectified

整流数据模型

使用命令 Control + T 可以看到重命名上面列后的整流数据模型.现在我们可以看到表之间的关系不会形成循环.

5_cr_data_model_rectified

Control + R 重新加载数据不会再向我们发出警告,我们可以使用此数据创建报告.