Логика за отображением / скрытием строк в диаграммах - PullRequest
0 голосов
/ 31 мая 2019

Меня смущает логика, которая существует за показом и скрытием строк в диаграммах QlikView / QLik Sense. Вот то, что я думал, было:

  1. Если для какой-либо строки значение измерения равно NULL, а для этого измерения «Supress NULL» включено (QV) или «Включить NULL» выключено (QS), то строка не отображается.
  2. Если для некоторой строки все ее выражения / меры равны нулю или NULL, а параметр уровня объекта «Подавить нулевые значения» включен (QV) или «Включить нулевые значения» выключен (QS), то строка не отображается.
  3. Остальные строки показаны.

Тем не менее, я получаю сбивающий с толку пример меры, которая заставляет строки исчезать, даже если я подавляю нулевые значения / включаю нулевые значения. Вот небольшой сценарий некоторых примеров клиентов и их консультации:

customer:
LOAD * INLINE [
custcode,descr
C1,pan1
C2,pan2
C3,pan3
];

consultation:
LOAD * INLINE [
custcode,grp,val,x
C2,eye,sth1,1
C2,age,20,1
C3,legs,sth2,1
C3,skin,sth5,1
C3,age,20,1
C3,age,30,1
];

Как видите, custcode C1 не имеет справочных строк. Я продолжаю создавать прямую таблицу с custcode в качестве измерения и sum(x) в качестве меры. Вот что я получаю:

+----------+--------+
| custcode | sum(x) |
+----------+--------+
| C1       |      0 |
| C2       |      2 |
| C3       |      4 |
+----------+--------+

Все хорошо до сих пор. Конечно же, я не подавил нулевые значения: если бы я это сделал, строка C1 была бы удалена. Также отметим, что по какой-либо причине aggr не требуется.

Теперь давайте добавим анализ набора к этой мере, чтобы суммировать только x для grp = 'age':

sum({<grp={'age'}>}x)

Это скрывает строку C1 с поля зрения:

+----------+-----------------------+
| custcode | sum({<grp={'age'}>}x) |
+----------+-----------------------+
| C2       |                     1 |
| C3       |                     2 |
+----------+-----------------------+

Вопрос 1: Почему набор анализа скрывает строку в этом случае?

Добавление дополнительной меры со значением 1 ничего не меняет. Мы можем быть уверены, что это не имеет ничего общего с настройками нулевых значений.

Теперь давайте добавим эту меру:

aggr(min(0),[custcode])

Строка вернулась, хотя новая мера NULL:

+----------+-----------------------+-------------------------+
| custcode | sum({<grp={'age'}>}x) | aggr(min(0),[custcode]) |
+----------+-----------------------+-------------------------+
| C1       |                     0 |                       - |
| C2       |                     1 |                       - |
| C3       |                     2 |                       - |
+----------+-----------------------+-------------------------+

Теперь, о aggr, вот две веские причины, почему я думаю, что это не должно быть необходимым:

  1. Если установленная мера анализа была неправильной и нужно было каким-то образом включить aggr, для движка все равно не было бы причины скрывать строки - он просто возвратил бы NULL из-за неверной формулы. Кроме того, эта мера на самом деле работает правильно, как мы видим
  2. custcode - это поле, которое создает связь между двумя таблицами. Но это, кажется, не причина для того, чтобы показывать строки; на самом деле, я получаю то же самое даже с aggr(min(0),[]):
+----------+-----------------------+-----------------+
| custcode | sum({<grp={'age'}>}x) | aggr(min(0),[]) |
+----------+-----------------------+-----------------+
| C1       |                     0 |               - |
| C2       |                     1 |               - |
| C3       |                     2 |               - |
+----------+-----------------------+-----------------+

Вопрос 2: Почему эта странная агрегированная мера отображает строку?

1 Ответ

0 голосов
/ 01 июня 2019

Вопрос 1: Если у вас есть только одно выражение и добавлен анализ набора, это все равно что сказать Qlik выбрать значение набора. Итак, картинка 1 без выбора enter image description here

картинка 2 с выделением

enter image description here

Таким образом, дело не в том, что ответ нулевой, а в том, что ассоциативный механизм сократил эти данные из набора данных на основе правила выбора / набора.

Aggr () определенно не должен быть там необходим. Размерность диаграммы позаботится об агрегации по измерению. aggr () требуется только в том случае, если вы хотите использовать агрегирование, которое не контролируется измерениями.

Я не понимаю, к чему стремится ваш aggr (min (0), []), и я не получаю тот же результат, что и ваша таблица. Выражение просто создает нули, потому что оно не может вычислять

Если вы хотите увидеть все элементы измерения, вам нужно поставить галочку «Показать все значения» на вкладке измерений, а не пытаться изменять выражения

enter image description here

...