Где разместить флаги в скрипте загрузки данных Qlik Sense? - PullRequest
1 голос
/ 09 октября 2019

Конечная цель и контекст

Привет всем, спасибо за чтение! Конечный продукт на моем листе Qlik должен иметь таблицу, в которой отображается столбец «% Covered». Это то, каков процент предметов в отделе, инвентарь которых больше или равен требованию.

Вот пример того, как должна выглядеть конечная таблица (Поле Percent Covered - вычисляемое поле:

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

Проблема в том, что независимо от того, где я помещаю это в скрипт, выдает ошибкуs.

Что я пробовал

Я пробовал все эти комбинации с точкой с запятой и без нее.

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

1 голос
/ 22 октября 2019

Ответ выше для флага в загрузке является правильным, но для дальнейшего использования, перед 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]
1 голос
/ 09 октября 2019

На основании того, что вы попробовали, есть два способа:

Внутренняя загрузка

вы можете создать поле флага внутри самого оператора загрузки

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

Предшествующая нагрузка

Другой метод использует предшествующую нагрузку

Вы можете иметь много предшествующих нагрузок, сколько хотите. Каждая загрузка загружает данные из предыдущих нагрузок под ней

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