NoConcatenate
NoConcatenate 前缀强制将两个使用相同字段集的加载表格处理为两个单独的内部表格(当它们以其他方式自动串联时)。
语法:
NoConcatenate( loadstatement | selectstatement )
默认情况下,如果加载的表包含相同数量的字段,并且字段名称与脚本中先前加载的表匹配,则 Qlik Sense 将自动串联这两个表。即使第二个表的名称不同,也会发生这种情况。
但是,如果脚本前缀 NoConcatenate 包含在第二个表的 LOAD 语句或 select 语句之前,则这两个表将分别加载。
NoConcatenate的一个典型用例是,您可能需要创建表的临时副本以对该副本执行一些临时转换,同时保留原始数据的副本。NoConcatenate 确保您可以创建该副本,而无需将其隐式添加回源表。
区域设置
除非另有规定,本主题中的示例使用以下日期格式:MM/DD/YYYY。日期格式已经在数据加载脚本中的 SET DateFormat 语句中指定。由于区域设置和其他因素,系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者,您可以更改加载脚本中的格式以匹配这些示例。
应用程序中的默认区域设置基于安装 Qlik Sense 的计算机或服务器的区域系统设置。如果您访问的 Qlik Sense 服务器设置为瑞典,则数据加载编辑器将使用瑞典地区设置的日期、时间和货币。这些区域格式设置与 Qlik Sense 用户界面中显示的语言无关。Qlik Sense 将以与您使用的浏览器相同的语言显示。
Example | 结果 |
---|---|
Source: LOAD A,B from file1.csv; CopyOfSource: NoConcatenate LOAD A,B resident Source; |
加载带有 A 和 B 作为度量的表。使用 NoConcatenate 变量单独加载具有相同字段的第二个表。 |
示例 1 – 隐式串联
概述
在本例中,您将按顺序加载两个加载脚本。
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
一个初始数据集,其中包含发送到名为 Transactions 的表的日期和金额。
第一个加载脚本
Transactions:
LOAD
*
Inline [
id, date, amount
1, 08/30/2018, 23.56
2, 09/07/2018, 556.31
3, 09/16/2018, 5.75
4, 09/22/2018, 125.00
5, 09/22/2018, 484.21
6, 09/22/2018, 59.18
7, 09/23/2018, 177.42
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
id
-
date
-
amount
id | 日期 | 金额 |
---|---|---|
1 | 08/30/2018 | 23.56 |
2 | 09/07/2018 | 556.31 |
3 | 09/16/2018 | 5.75 |
4 | 09/22/2018 | 125.00 |
5 | 09/22/2018 | 484.21 |
6 | 09/22/2018 | 59.18 |
7 | 09/23/2018 | 177.42 |
第二个加载脚本
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
具有相同字段的第二个数据集被发送到名为 Sales 的表。
Sales:
LOAD
*
Inline [
id, date, amount
8, 10/01/2018, 164.27
9, 10/03/2018, 384.00
10, 10/06/2018, 25.82
11, 10/09/2018, 312.00
12, 10/15/2018, 4.56
13, 10/16/2018, 90.24
14, 10/18/2018, 19.32
];
结果
加载数据并转到表。
id | 日期 | 金额 |
---|---|---|
1 | 08/30/2018 | 23.56 |
2 | 09/07/2018 | 556.31 |
3 | 09/16/2018 | 5.75 |
4 | 09/22/2018 | 125.00 |
5 | 09/22/2018 | 484.21 |
6 | 09/22/2018 | 59.18 |
7 | 09/23/2018 | 177.42 |
8 | 10/01/2018 | 164.27 |
9 | 10/03/2018 | 384.00 |
10 | 10/06/2018 | 25.82 |
11 | 10/09/2018 | 312.00 |
12 | 10/15/2018 | 4.56 |
13 | 10/16/2018 | 90.24 |
14 | 10/18/2018 | 19.32 |
当脚本运行时,由于两个数据集共享相同数量的字段和相同的字段名,Sales 表隐式串联到现有 Transactions 表上。尽管第二个表名标记试图命名结果集 ‘Sales’,但仍会发生这种情况。
通过查看数据加载进度日志,可以看到销售额数据集是隐式串联的。
示例 2 – 用例场景
概述
在这个用例场景中,您有:
-
一个交易数据集,其具有:
-
id
-
日期
-
金额 (GBP)
-
-
一个货币表:
-
USD 到 GBP 的转换率
-
-
第二个交易数据集,其具有:
-
id
-
日期
-
金额 (USD)
-
您将按顺序加载五个脚本。
-
第一个加载脚本包含一个初始数据集,其中包含发送到名为 Transactions 的表的日期和金额 (GBP)。
-
第二个加载脚本包含:
-
第二个初始数据集,其中包含发送到名为 Transactions_in_USD 的表的日期和金额 (USD)。
-
放置在 Transactions_in_USD 数据集的 LOAD 语句之前以防止隐式串联的 noconcatenate 前缀。
-
-
第三个加载脚本包含 join 前缀,用于在 Transactions_in_USD 表中创建 GBP 和 USD 之间的货币汇率。
-
第四个加载脚本包含将 Transactions_in_USD 添加到初始 Transactions 表的 concatenate 前缀。
-
第五个加载脚本包含 drop table 语句,该语句将删除其数据已串联到 Transactions 表的表 Transactions_in_USD。
第一个加载脚本
Transactions:
Load * Inline [
id, date, amount
1, 12/30/2018, 23.56
2, 12/07/2018, 556.31
3, 12/16/2018, 5.75
4, 12/22/2018, 125.00
5, 12/22/2018, 484.21
6, 12/22/2018, 59.18
7, 12/23/2018, 177.42
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
- id
- date
- amount
id | 日期 | 金额 |
---|---|---|
1 | 12/30/2018 | 23.56 |
2 | 12/07/2018 | 556.31 |
3 | 12/16/2018 | 5.75 |
4 | 12/22/2018 | 125.00 |
5 | 12/22/2018 | 484.21 |
6 | 12/22/2018 | 59.18 |
7 | 12/23/2018 | 177.42 |
该表显示了初始数据集,带有按 GBP 计的金额。
第二个加载脚本
Transactions_in_USD:
NoConcatenate
Load * Inline [
id, date, amount
8, 01/01/2019, 164.27
9, 01/03/2019, 384.00
10, 01/06/2019, 25.82
11, 01/09/2019, 312.00
12, 01/15/2019, 4.56
13, 01/16/2019, 90.24
14, 01/18/2019, 19.32
];
结果
加载数据并转到表。
id | 日期 | 金额 |
---|---|---|
1 | 12/30/2018 | 23.56 |
2 | 12/07/2018 | 556.31 |
3 | 12/16/2018 | 5.75 |
4 | 12/22/2018 | 125.00 |
5 | 12/22/2018 | 484.21 |
6 | 12/22/2018 | 59.18 |
7 | 12/23/2018 | 177.42 |
8 | 01/01/2019 | 164.27 |
9 | 01/03/2019 | 384.00 |
10 | 01/06/2019 | 25.82 |
11 | 01/09/2019 | 312.00 |
12 | 01/15/2019 | 4.56 |
13 | 01/16/2019 | 90.24 |
14 | 01/18/2019 | 19.32 |
您将看到 Transactions_in_USD 表中的第二个数据集已添加。
第三个加载脚本
此加载脚本将从 USD 到 GBP 的货币汇率加入到 Transactions_in_USD 表中。
Join (Transactions_in_USD)
Load * Inline [
rate
0.7
];
结果
加载数据并转到数据模型查看器。选择 Transactions_in_USD 表,您将看到每个现有记录的“汇率”字段值为 0.7。
第四个加载脚本
使用常驻加载,此加载脚本将在将金额转换为 USD 后将 Transactions_in_USD 表格串联到 Transactions 表格。
Concatenate (Transactions)
LOAD
id,
date,
amount * rate as amount
Resident Transactions_in_USD;
结果
加载数据并转到表。您将看到第八行至第十四行以 GBP 为单位的新条目。
id | 日期 | 金额 |
---|---|---|
1 | 12/30/2018 | 23.56 |
2 | 12/07/2018 | 556.31 |
3 | 12/16/2018 | 5.75 |
4 | 12/22/2018 | 125.00 |
5 | 12/22/2018 | 484.21 |
6 | 12/22/2018 | 59.18 |
7 | 12/23/2018 | 177.42 |
8 | 01/01/2019 | 114.989 |
8 | 01/01/2019 | 164.27 |
9 | 01/03/2019 | 268.80 |
9 | 01/03/2019 | 384.00 |
10 | 01/06/2019 | 18.074 |
10 | 01/06/2019 | 25.82 |
11 | 01/09/2019 | 218.40 |
11 | 01/09/2019 | 312.00 |
12 | 01/15/2019 | 3.192 |
12 | 01/15/2019 | 4.56 |
13 | 01/16/2019 | 63.168 |
13 | 01/16/2019 | 90.24 |
14 | 01/18/2019 | 13.524 |
14 | 01/18/2019 | 19.32 |
第五个加载脚本
此加载脚本将删除第四个加载脚本结果表中的重复条目,只留下金额按 GBP 计的条目。
drop tables Transactions_in_USD;
结果
加载数据并转到表。
id | 日期 | 金额 |
---|---|---|
1 | 12/30/2018 | 23.56 |
2 | 12/07/2018 | 556.31 |
3 | 12/16/2018 | 5.75 |
4 | 12/22/2018 | 125.00 |
5 | 12/22/2018 | 484.21 |
6 | 12/22/2018 | 59.18 |
7 | 12/23/2018 | 177.42 |
8 | 01/01/2019 | 114.989 |
9 | 01/03/2019 | 268.80 |
10 | 01/06/2019 | 18.074 |
11 | 01/09/2019 | 218.40 |
12 | 01/15/2019 | 3.192 |
13 | 01/16/2019 | 63.168 |
14 | 01/18/2019 | 13.524 |
加载第五个加载脚本后,结果表显示了两个事务数据集中存在的所有十四个事务;然而,交易 8-14 的金额已转换为 GBP。
如果我们在第二个加载脚本中删除在 Transactions_in_USD之前使用的 NoConcatenate 前缀,脚本将失败,并显示错误:“找不到表 'Transactions_in_USD' ”。这是因为 Transactions_in_USD 表将自动串联到原始 Transactions 表上。