首页 > 解决方案 > 在图表中显示/隐藏行背后的逻辑

问题描述

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

  1. 如果对于某些行,维度的值为 NULL,并且对于该维度,“Supress NULL”为 on (QV) 或“Include NULLs”为 off(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无论出于何种原因,都不需要。

现在,让我们对该度量添加一个集合分析,以仅对 grp='age' 求和 x:

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

这隐藏了 C1 行:

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

问题一:为什么集合分析在这种情况下会隐藏行?

添加一个值为 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 度量会取消隐藏行?

标签: qlikviewqliksense

解决方案


问题 1:当您只有一个表达式并添加集合分析时,就像告诉 Qlik 选择集合值一样。所以图1没有选择 在此处输入图像描述

图 2 与选择

在此处输入图像描述

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

那里绝对不需要 aggr() 。图表的维度将负责跨维度的聚合。仅当您要使用不受维度控制的聚合时,才需要 aggr()。

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

如果您想查看维度的所有成员,您应该在维度选项卡上勾选“显示所有值”,而不是尝试更改表达式

在此处输入图像描述


推荐阅读