在 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]