Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Игнорирование измерения

Всем день добрый.  Что-то никак не соображу как сделать в Qlik Sense относительно простую задачу. Как проигнорировать одно из измерений? Пример такой, в плановых данных есть цифры только по одному из измерений, во втором NULL. В фактических, по двум измерениям.


Надо получить такую таблицу:

     Измерение1, Измерение2, ТутКолВоИзПлана, ТутКолВоИзФакта.

F1.png

Я добавляю в формулу Sum(TOTAL <Измерение1> {$<[ВидОперации]={'План'}>} [Количество])

Но у меня добавляются записи с NULL по второму измерению. А они мне не нужны.

F2.png

Код для тестовых данных

[ТаблицаФактов]:

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

8 Replies
Eugeny_Ilyin
Creator II
Creator II

Привет.

Пример с разбивкой на 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 ТаблицаФактов

Anonymous
Not applicable
Author

А просто фильтрануть с диаграммы значения с null разве нельзя?

Eugeny_Ilyin
Creator II
Creator II

Чтобы получить указанную таблицу необходимо добавить вычисляемое измерение (чтобы откинуть NULL, =aggr(only({<ТоварнаяГруппа-={'NULL'}>}ТоварнаяГруппа),ТоварнаяГруппа))

В выражениях использовать синтаксис анализа множеств и условие для "откидывания" строк с планом по пустышкам.

if(ТоварнаяГруппа<>'NULL',

Sum ({<ВидОперации={'План'}>}total <Категория> Количество)

)

и

Sum ({<ВидОперации={'Факт'}>} Количество)

Результат вы получите, но это неверное решение задачи.

timofeykim
Partner - Contributor II
Partner - Contributor II

Добрый день!

Если конечно вопрос еще актуален, то можно попробовать в свойстве таблицы "Дополнения" --> "Обработка данных" убрать галочку "Включить нулевые значения"

111.png

Anonymous
Not applicable
Author

Это не влияет ни на что.

Anonymous
Not applicable
Author

Если делю на две таблицы, получаю тот же самый результат что и в начальном вопросе.

timofeykim
Partner - Contributor II
Partner - Contributor II

Немного не так написал.

В свойствах таблицы, в измерении "ТоварнаяГруппа" убираете галочку "Включить пустые значение".

Sergey_Polekhin
Employee
Employee

Я бы разделил задачу на две подзадачи:

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 ИсхДанные;

А итоговая таблица:

Capture1.PNG