我对QlikView / QLik Sense图表中显示和隐藏行背后的逻辑感到困惑。这是我想的情况:
但是,我得到了一个令人困惑的度量示例,即使我抑制了零值/启用了零值,它也导致行消失。这是一些示例客户及其咨询的小脚本:
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
];
如您所见,客户代码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
,这是两个我认为不必要的强烈原因:
custcode
是在两个表之间创建关联的字段。但这似乎并不是取消隐藏行的原因。实际上,即使使用aggr(min(0),[])
,我也会得到相同的结果:+----------+-----------------------+-----------------+ | custcode | sum({<grp={'age'}>}x) | aggr(min(0),[]) | +----------+-----------------------+-----------------+ | C1 | 0 | - | | C2 | 1 | - | | C3 | 2 | - | +----------+-----------------------+-----------------+
问题2:为什么这种奇怪的aggr措施会取消隐藏行?