在Qlik Sense数据加载脚本中的何处放置标志?

时间:2019-10-09 15:55:09

标签: database scripting qliksense

最终目标和背景

我的Qlik工作表中的最终产品应该有一个显示“已覆盖百分比”列的表格。这是指部门中库存大于或等于要求的项目所占的百分比。

以下是茶几的外观示例(“已覆盖百分比”字段是计算字段:

| Department | Count of Products | Percent Covered |
|------------|-------------------|-----------------|
| Bio        | 34858             | 89.40%          |
| Mech       | 50119             | 92.05%          |
| Admin      | 560               | 98.22%          |

为希望更好地说明这一点,这是将计算应用于产品编号表的样子:

| 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]);
  

错误:“数据尚未加载。请更正错误,然后尝试重新加载。”

[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]);
  

错误:“数据尚未加载。请更正错误,然后尝试重新加载。”

[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
  

错误:“意外令牌:','`

2 个答案:

答案 0 :(得分:1)

根据您的尝试,有两种方法:

内部载荷

您可以在load语句本身内部创建标志字段

[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]);

答案 1 :(得分:1)

上面关于装入内标志的答案是正确的,但是为了将来参考,在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]