这是我的加载脚本:
All:
load *;
sql exec [StoredProcedure];
LastYear:
load *
resident All
where Ship_Year = year(now())-1;
ThisYear:
load *
resident All
where Ship_Year = year(now());
但是,我没有加载我的
LastYear
和 ThisYear
表。我错过了什么?
这里可能发生的是自动串联,这是多个表自动串联的地方,因为它们具有:
所以基本上,如果多个表的结构完全相同,Qlik 会自动将它们连接在一起。
在您的情况下,这意味着由于您的
[LastYear]
和 [ThisYear]
表正在加载与 [All]
表相同的字段(通过 load *
),它们会自动连接回 [All]
表。
要防止自动连接,您必须:
NoConcatenate
前缀NoConcatenate
前缀可防止表自动连接,即使它具有与另一个表完全相同的字段。
例如:
LastYear:
NoConcatenate load *
resident All
where Ship_Year = year(now())-1;
此方法很简单,但您必须注意合成键,因为您强制多个表具有所有匹配字段,Qlik 当然会关联这些字段。
由于当存在相同数量的同名字段时会发生自动串联,因此您可以通过简单地更改表正在加载的字段来防止这种行为。
例如:
LastYear:
load
*
, 1 as [Last Year]
resident All
where Ship_Year = year(now())-1;
ThisYear:
load
*
, 1 as [This Year]
resident All
where Ship_Year = year(now());
在该示例中,
[LastYear]
表添加新字段 [Last Year]
,[ThisYear]
表添加新字段 [This Year]
。这确保了我们所有的表至少有一个字段不在其他表中,从而防止自动串联。
就像
NoConcatenate
方法一样,此解决方案将导致合成键突然出现,除非稍后在脚本中对其进行处理。
Qualify
声明Qualify
语句是一个切换语句,用于“打开”特定字段的字段限定,其中在Qualify
语句之后加载的任何表中的字段都在其前面添加了表名称。然后,您可以使用 Unqualify
语句“关闭”该行为。
例如:
Qualify *;
LastYear:
load *
resident All
where Ship_Year = year(now())-1;
Unqualify *;
这会导致这样的结果:
基本上,该脚本的内容如下:“从现在开始,打开所有字段 (
*
) 的字段限定。现在加载 [LastYear]
表,其中每个字段将自动重命名,并将 LastYear.
添加到每个字段的开头名称。然后从现在开始关闭所有字段的字段限定。”
您还可以告诉 Qlik 仅限定特定字段,如下所示:
Qualify [colA], [Ship_Year];
Load * ...;
Unqualify [colA], [Ship_Year];