Меня смущает логика, которая существует за показом и скрытием строк в диаграммах QlikView / QLik Sense. Вот то, что я думал, было:
- Если для какой-либо строки значение измерения равно NULL, а для этого измерения «Supress NULL» включено (QV) или «Включить NULL» выключено (QS), то строка не отображается.
- Если для некоторой строки все ее выражения / меры равны нулю или NULL, а параметр уровня объекта «Подавить нулевые значения» включен (QV) или «Включить нулевые значения» выключен (QS), то строка не отображается.
- Остальные строки показаны.
Тем не менее, я получаю сбивающий с толку пример меры, которая заставляет строки исчезать, даже если я подавляю нулевые значения / включаю нулевые значения. Вот небольшой сценарий некоторых примеров клиентов и их консультации:
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
, вот две веские причины, почему я думаю, что это не должно быть необходимым:
- Если установленная мера анализа была неправильной и нужно было каким-то образом включить aggr, для движка все равно не было бы причины скрывать строки - он просто возвратил бы NULL из-за неверной формулы. Кроме того, эта мера на самом деле работает правильно, как мы видим
custcode
- это поле, которое создает связь между двумя таблицами. Но это, кажется, не причина для того, чтобы показывать строки; на самом деле, я получаю то же самое даже с aggr(min(0),[])
:
+----------+-----------------------+-----------------+
| custcode | sum({<grp={'age'}>}x) | aggr(min(0),[]) |
+----------+-----------------------+-----------------+
| C1 | 0 | - |
| C2 | 1 | - |
| C3 | 2 | - |
+----------+-----------------------+-----------------+
Вопрос 2: Почему эта странная агрегированная мера отображает строку?