Qlikview 简明教程

QlikView - Circular Reference

当我们可以使用两种或更多种不同的路径从一个表遍历到另一个表时,会出现 Circular Reference 。这意味着您可以使用列直接将 Table1 与 Table2 联接,也可以先将 Table1 与 Table3 联接,然后将 table3 与 Table2 联接。这会导致由数据模型(加载所有这三个表)形成的输出中的结果不正确。一旦 QlikView 识别出循环引用,便会阻止此类数据加载到其内存中。

Input Data

让我们考虑以下三个 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

Load Script

我们使用脚本编辑器加载以上输入数据,可以通过按 Control+E 调用脚本编辑器。选择选项 Table Files 并浏览输入文件。

1 cr load script

Data Load

创建以上脚本后,我们使用命令 Control+R 将数据加载到 QlikView 的内存中。这是我们收到错误提示的时候,该提示提到正在加载的表中存在循环循环。

2 warning

Data Model

为了找到上述警告的确切原因,我们可以使用表格查看器菜单命令 Control+T 查看数据模型。弹出以下屏幕,其中清楚地显示了循环引用。此处,RegionCountry 和 SalesRegion 之间的联接可以使用字段 Region 直接实现。它也可以通过首先使用字段 Country 转到表 ProductCountry,然后将 ProdcutID 映射到 Salesregion 来实现。

3 cr data model

Resolving Circular Reference

可以通过重命名数据集中的一些列来解决上述循环引用,以便 QlikView 不会使用列名自动在表之间形成关联。为此,我们将 RegionCountry 中的国家/地区列重命名为 SalesCountry。在数据集 ProdcuCountry 中,我们将国家/地区列重命名为 ProductCountry。

4 cr load script rectified

Rectified Data Model

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

5 cr data model rectified

Control+R 重新加载数据不会再给我们警告,并且我们可以使用此数据来创建报告。