Qlik Sense:使用过滤器加载表格

问题描述 投票:0回答:1

这是我的加载脚本:

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
表。我错过了什么?

qliksense
1个回答
0
投票

这里可能发生的是自动串联,这是多个表自动串联的地方,因为它们具有:

  1. 完全相同的字段名称;
  2. 字段数量完全相同。

所以基本上,如果多个表的结构完全相同,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];
© www.soinside.com 2019 - 2024. All rights reserved.