图表中显示/隐藏行背后的逻辑

时间:2019-05-31 13:20:38

标签: qlikview qliksense

我对QlikView / QLik Sense图表中显示和隐藏行背后的逻辑感到困惑。这是我想的情况:

  1. 如果对于某行,维度的值为NULL,并且对于该维度,“ Supress NULL”处于打开状态(QV)或“ Include NULLs”处于关闭状态(QS),则该行不显示。
  2. li>
  3. 如果对于某行,其所有表达式/量度均为零或NULL,并且对象级设置“抑制零值”处于打开状态(QV),或“包含零值”处于关闭状态(QS),则行未显示。
  4. 显示其余的行。

但是,我得到了一个令人困惑的度量示例,即使我抑制了零值/启用了零值,它也导致行消失。这是一些示例客户及其咨询的小脚本:

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,这是两个我认为不必要的强烈原因:

  1. 如果集合分析度量是错误的,并且需要以某种方式包含aggr,这仍然不是引擎隐藏行的原因-它只会因具有无效的公式而返回NULL。而且,正如我们所见,这种方法实际上是正确的
  2. custcode是在两个表之间创建关联的字段。但这似乎并不是取消隐藏行的原因。实际上,即使使用aggr(min(0),[]),我也会得到相同的结果:
+----------+-----------------------+-----------------+
| custcode | sum({<grp={'age'}>}x) | aggr(min(0),[]) |
+----------+-----------------------+-----------------+
| C1       |                     0 |               - |
| C2       |                     1 |               - |
| C3       |                     2 |               - |
+----------+-----------------------+-----------------+

问题2:为什么这种奇怪的aggr措施会取消隐藏行?

1 个答案:

答案 0 :(得分:0)

问题1: 当您只有一个表达式并添加集合分析时,就像告诉Qlik选择集合值一样。 所以图片1没有选择 enter image description here

带有选择的图片2

enter image description here

不是答案为空,而是关联引擎根据选择/设置规则从数据集中减少了数据。

绝对没有必要使用aggr()。图表的尺寸将考虑整个维度上的汇总。仅当您要使用不受尺寸控制的聚合时才需要aggr()。

我不明白您的aggr(min(0),[])试图达到什么目的,但我没有;您得到的结果与您的表相同。该表达式只是创建空值,因为它无法求值

如果要查看维度的所有成员,应在维度标签上勾选“显示所有值”,而不要尝试更改表达式

enter image description here