Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Всем день добрый. Что-то никак не соображу как сделать в Qlik Sense относительно простую задачу. Как проигнорировать одно из измерений? Пример такой, в плановых данных есть цифры только по одному из измерений, во втором NULL. В фактических, по двум измерениям.
Надо получить такую таблицу:
Измерение1, Измерение2, ТутКолВоИзПлана, ТутКолВоИзФакта.
Я добавляю в формулу Sum(TOTAL <Измерение1> {$<[ВидОперации]={'План'}>} [Количество])
Но у меня добавляются записи с NULL по второму измерению. А они мне не нужны.
Код для тестовых данных
[ТаблицаФактов]:
Load * Inline [
Период|ВидОперации|Категория|ТоварнаяГруппа|Количество
2018-04-26|План|Аксессуары|NULL|4
2018-04-26|План|Белье|NULL|7
2018-04-26|План|Кожгалантерея|NULL|5
2018-04-26|План|Обувь|NULL|9
2018-04-26|План|Одежда|NULL|8
2018-04-26|План|Сумки|NULL|11
2018-04-26|Факт|Аксессуары|Перчатки|2
2018-04-26|Факт|Белье|Носки|1
2018-04-26|Факт|Кожгалантерея|Кошелек|1
2018-04-26|Факт|Обувь|Кеды|2
2018-04-26|Факт|Одежда|Джинсы|1
2018-04-26|Факт|Сумки|Клатч|2] (delimiter is '|');
Привет.
Пример с разбивкой на 2 таблицы:
[ТаблицаФактов]:
Load * Inline [
Период|ВидОперации|Категория|ТоварнаяГруппа|Количество
2018-04-26|План|Аксессуары|NULL|4
2018-04-26|План|Белье|NULL|7
2018-04-26|План|Кожгалантерея|NULL|5
2018-04-26|План|Обувь|NULL|9
2018-04-26|План|Одежда|NULL|8
2018-04-26|План|Сумки|NULL|11
2018-04-26|Факт|Аксессуары|Перчатки|2
2018-04-26|Факт|Белье|Носки|1
2018-04-26|Факт|Кожгалантерея|Кошелек|1
2018-04-26|Факт|Обувь|Кеды|2
2018-04-26|Факт|Одежда|Джинсы|1
2018-04-26|Факт|Сумки|Клатч|2] (delimiter is '|');
План:
NoConcatenate
load Период,Категория,Количество as КоличествоПлан Resident ТаблицаФактов where ВидОперации='План';
Факт:
NoConcatenate
load Период,Категория,ТоварнаяГруппа,Количество as КоличествоФакт Resident ТаблицаФактов where ВидОперации='Факт';
DROP Table ТаблицаФактов
А просто фильтрануть с диаграммы значения с null разве нельзя?
Чтобы получить указанную таблицу необходимо добавить вычисляемое измерение (чтобы откинуть NULL, =aggr(only({<ТоварнаяГруппа-={'NULL'}>}ТоварнаяГруппа),ТоварнаяГруппа))
В выражениях использовать синтаксис анализа множеств и условие для "откидывания" строк с планом по пустышкам.
if(ТоварнаяГруппа<>'NULL',
Sum ({<ВидОперации={'План'}>}total <Категория> Количество)
)
и
Sum ({<ВидОперации={'Факт'}>} Количество)
Результат вы получите, но это неверное решение задачи.
Добрый день!
Если конечно вопрос еще актуален, то можно попробовать в свойстве таблицы "Дополнения" --> "Обработка данных" убрать галочку "Включить нулевые значения"
Это не влияет ни на что.
Если делю на две таблицы, получаю тот же самый результат что и в начальном вопросе.
Немного не так написал.
В свойствах таблицы, в измерении "ТоварнаяГруппа" убираете галочку "Включить пустые значение".
Я бы разделил задачу на две подзадачи:
1. Избавиться от "мусорных" значений.
1.1. Дело в том, что значение NULL может обрабатываться по разному. И в вашем примере значение NULL - это строка символов из четырех букв: "N" + "U" + "L" + "L". Если значение NULL загружается из источника данных, например, ODBC то правилами его обработки можно управлять, интерпретируя их как значение, либо как действительно отсутствующее значение, эквивалентное результату выполнения функции Null(). См. в документации раздел https://help.qlik.com/en-US/sense/June2018/Subsystems/Hub/Content/Scripting/null-value-handling.htm
1.2. В вашем случае, значение "NULL", являясь строкой, используется в поле "ТоварнаяГруппа" как реальное значение (строка символов), с которой связаны цифры плановых показателей.
1.3. Поэтому если вы понимаете, что "NULL" - это эквивалент несуществующего значения, то лучше от него избавиться изначально (пример см. ниже).
2. Разделил значения Планов и Фактов в две отдельные таблицы, как и предложили другие участники Сommunity. В этом случае каждому значению Плана связанному только с соответствующей ему Категорией, будут сопоставлены несколько Фактов, связанных с парой значений Категория + ТоварнаяГруппа
Итого, ваш сценарий загрузки может выглядеть следующим образом:
ИсхДанные:
Load
Период,
ВидОперации,
Категория,
If(ТоварнаяГруппа = 'NULL', Null(), ТоварнаяГруппа) as ТоварнаяГруппа,
Количество
;
Load * Inline [
Период|ВидОперации|Категория|ТоварнаяГруппа|Количество
2018-04-26|План|Аксессуары|NULL|4
2018-04-26|План|Белье|NULL|7
2018-04-26|План|Кожгалантерея|NULL|5
2018-04-26|План|Обувь|NULL|9
2018-04-26|План|Одежда|NULL|8
2018-04-26|План|Сумки|NULL|11
2018-04-26|Факт|Аксессуары|Перчатки|2
2018-04-26|Факт|Белье|Носки|1
2018-04-26|Факт|Кожгалантерея|Кошелек|1
2018-04-26|Факт|Обувь|Кеды|2
2018-04-26|Факт|Одежда|Джинсы|1
2018-04-26|Факт|Сумки|Клатч|2] (delimiter is '|');
ТаблицаФактов:
Load
Период,
Категория,
ТоварнаяГруппа,
Количество as КоличествоФакт
Resident ИсхДанные
Where ВидОперации = 'Факт';
ТаблицаПланов:
Load
Период,
Категория,
Количество as КоличествоПлан
Resident ИсхДанные
Where ВидОперации = 'План';
Drop Table ИсхДанные;
А итоговая таблица: