在 Qlik Sense 数据加载脚本中的何处放置标志?
Where to place flags in Qlik Sense data loading script?
最终目标和背景
我的 Qlik sheet 中的最终产品应该有一个显示“% Covered”列的 table。这是一个部门中库存大于或等于要求的项目的百分比。
下面是结尾 table 的示例(覆盖百分比字段是计算字段:
| Department | Count of Products | Percent Covered |
|------------|-------------------|-----------------|
| Bio | 34858 | 89.40% |
| Mech | 50119 | 92.05% |
| Admin | 560 | 98.22% |
为了更好地说明这一点,如果将计算应用于 table 产品编号,它会是这样的:
| Product Number | Inventory | Requirement | Percent Covered |
|----------------|-----------|-------------|-----------------|
| 444391 | 112 | 113 | 99.11% |
| 444569 | 86 | 350 | 24.57% |
| 443551 | 12 | 11 | 109.09% |
问题
尽管它适用于测试少量数据,但当加载真实数据时,Qlik 无法在图表本身的表达式中处理并抛出超时错误:
Count({<ProductNumber = {"=[Inventory] >= [Requirement]"}>} ProductNumber) / Count(ProductNumber)
为了解决这个问题,我一直在尝试在数据加载脚本中完成上述工作。在 Qlik 文档和社区论坛的帮助下,这显然应该可行:
在数据加载器脚本中:If([Inventory] >= [Requirement], 1, 0) as Flag
在表达式中:Count({<Flag = {'1'}>} ProductNumber)/Count(ProductNumber)
问题是,无论我将它放在脚本中的什么位置,它都会抛出错误。
我尝试过的
我已经尝试了所有这些带分号和不带分号的组合。
[MyAwesomeSheet]:
If([Inventory] >= [Requirement], 1, 0) as Flag
LOAD
[ProductNumber],
[Requirement],
[Inventory],
[Department],
FROM [lib://Desktop/fake-example-data.xlsx]
(ooxml, embedded labels, table is [MyAwesomeTable]);
Error: "Data has not been loaded. Please correct the error and try loading again."
[MyAwesomeSheet]:
LOAD
[ProductNumber],
[Requirement],
[Inventory],
[Department],
FROM [lib://Desktop/fake-example-data.xlsx]
If([Inventory] >= [Requirement], 1, 0) as Flag
(ooxml, embedded labels, table is [MyAwesomeTable]);
Error: "Data has not been loaded. Please correct the error and try loading again."
[MyAwesomeSheet]:
LOAD
[ProductNumber],
[Requirement],
[Inventory],
[Department],
FROM [lib://Desktop/fake-example-data.xlsx]
(ooxml, embedded labels, table is [MyAwesomeTable]);
If([Inventory] >= [Requirement], 1, 0) as Flag
Error: "Unexpected token: ','`
根据您的尝试,有两种方法:
内部负载
您可以在加载语句本身内部创建标志字段
[MyAwesomeSheet]:
LOAD
[ProductNumber],
[Requirement],
[Inventory],
[Department],
If([Inventory] >= [Requirement], 1, 0) as Flag
FROM [lib://Desktop/fake-example-data.xlsx]
(ooxml, embedded labels, table is [MyAwesomeTable]);
预先加载
另一种技术是使用 preceding load
您可以根据需要设置多个前置负载。每个负载都从其下方的先前负载加载数据
[MyAwesomeSheet]:
Load
*,
If([Inventory] >= [Requirement], 1, 0) as Flag
LOAD
[ProductNumber],
[Requirement],
[Inventory],
[Department],
FROM [lib://Desktop/fake-example-data.xlsx]
(ooxml, embedded labels, table is [MyAwesomeTable]);
上面关于加载中的标志的答案是正确的,但为了将来参考,在 FROM 之前有一个逗号会引发加载错误。
LOAD
[ProductNumber],
[Requirement],
[Inventory],
[Department],
FROM [lib://Desktop/fake-example-data.xlsx]
应该是:
LOAD
[ProductNumber],
[Requirement],
[Inventory],
[Department]
FROM [lib://Desktop/fake-example-data.xlsx]
最终目标和背景
我的 Qlik sheet 中的最终产品应该有一个显示“% Covered”列的 table。这是一个部门中库存大于或等于要求的项目的百分比。
下面是结尾 table 的示例(覆盖百分比字段是计算字段:
| Department | Count of Products | Percent Covered |
|------------|-------------------|-----------------|
| Bio | 34858 | 89.40% |
| Mech | 50119 | 92.05% |
| Admin | 560 | 98.22% |
为了更好地说明这一点,如果将计算应用于 table 产品编号,它会是这样的:
| Product Number | Inventory | Requirement | Percent Covered |
|----------------|-----------|-------------|-----------------|
| 444391 | 112 | 113 | 99.11% |
| 444569 | 86 | 350 | 24.57% |
| 443551 | 12 | 11 | 109.09% |
问题
尽管它适用于测试少量数据,但当加载真实数据时,Qlik 无法在图表本身的表达式中处理并抛出超时错误:
Count({<ProductNumber = {"=[Inventory] >= [Requirement]"}>} ProductNumber) / Count(ProductNumber)
为了解决这个问题,我一直在尝试在数据加载脚本中完成上述工作。在 Qlik 文档和社区论坛的帮助下,这显然应该可行:
在数据加载器脚本中:If([Inventory] >= [Requirement], 1, 0) as Flag
在表达式中:Count({<Flag = {'1'}>} ProductNumber)/Count(ProductNumber)
问题是,无论我将它放在脚本中的什么位置,它都会抛出错误。
我尝试过的
我已经尝试了所有这些带分号和不带分号的组合。
[MyAwesomeSheet]:
If([Inventory] >= [Requirement], 1, 0) as Flag
LOAD
[ProductNumber],
[Requirement],
[Inventory],
[Department],
FROM [lib://Desktop/fake-example-data.xlsx]
(ooxml, embedded labels, table is [MyAwesomeTable]);
Error: "Data has not been loaded. Please correct the error and try loading again."
[MyAwesomeSheet]:
LOAD
[ProductNumber],
[Requirement],
[Inventory],
[Department],
FROM [lib://Desktop/fake-example-data.xlsx]
If([Inventory] >= [Requirement], 1, 0) as Flag
(ooxml, embedded labels, table is [MyAwesomeTable]);
Error: "Data has not been loaded. Please correct the error and try loading again."
[MyAwesomeSheet]:
LOAD
[ProductNumber],
[Requirement],
[Inventory],
[Department],
FROM [lib://Desktop/fake-example-data.xlsx]
(ooxml, embedded labels, table is [MyAwesomeTable]);
If([Inventory] >= [Requirement], 1, 0) as Flag
Error: "Unexpected token: ','`
根据您的尝试,有两种方法:
内部负载
您可以在加载语句本身内部创建标志字段
[MyAwesomeSheet]:
LOAD
[ProductNumber],
[Requirement],
[Inventory],
[Department],
If([Inventory] >= [Requirement], 1, 0) as Flag
FROM [lib://Desktop/fake-example-data.xlsx]
(ooxml, embedded labels, table is [MyAwesomeTable]);
预先加载
另一种技术是使用 preceding load
您可以根据需要设置多个前置负载。每个负载都从其下方的先前负载加载数据
[MyAwesomeSheet]:
Load
*,
If([Inventory] >= [Requirement], 1, 0) as Flag
LOAD
[ProductNumber],
[Requirement],
[Inventory],
[Department],
FROM [lib://Desktop/fake-example-data.xlsx]
(ooxml, embedded labels, table is [MyAwesomeTable]);
上面关于加载中的标志的答案是正确的,但为了将来参考,在 FROM 之前有一个逗号会引发加载错误。
LOAD
[ProductNumber],
[Requirement],
[Inventory],
[Department],
FROM [lib://Desktop/fake-example-data.xlsx]
应该是:
LOAD
[ProductNumber],
[Requirement],
[Inventory],
[Department]
FROM [lib://Desktop/fake-example-data.xlsx]