Qlik Sense图表中按ID统计CODE_A与CODE_B不匹配的错误次数
Qlik Sense 直表实现按ID统计CODE_A未匹配CODE_B的错误次数
需求说明
- 输出直表:每行对应一个ID,显示该ID的错误次数
- 错误判定规则:对于某个ID,若其下的唯一CODE_A值未出现在该ID的所有CODE_B值集合中,则该CODE_A计为一次错误
图表实现方案(无需修改脚本)
创建直表,配置如下:
- 维度:选择字段
ID - 度量:使用以下表达式二选一即可
表达式1:基于Exists函数
Count(DISTINCT If(Not Exists({<ID=P({<ID=[$ID]>})>} CODE_B, CODE_A), CODE_A))
逻辑解释:
{<ID=P({<ID=[$ID]>})>}:获取当前ID对应的所有CODE_B值的集合Not Exists(...):判断当前CODE_A是否不在上述集合中Count(DISTINCT ...):统计符合条件的唯一CODE_A数量,即该ID的错误次数
表达式2:基于Aggr聚合函数
Sum(Aggr( If(Count({<ID=[$ID], CODE_B=CODE_A>}) = 0, 1, 0), ID, CODE_A ))
逻辑解释:
Aggr(..., ID, CODE_A):按ID和CODE_A进行分组计算Count({<ID=[$ID], CODE_B=CODE_A>}) = 0:判断当前分组的CODE_A在对应ID的CODE_B中是否无匹配项Sum(...):对每个ID下的分组结果求和,得到总错误次数
示例验证(基于提供的测试数据)
| ID | 错误次数 | 说明 |
|---|---|---|
| 1 | 0 | CODE_A的AA在该ID的CODE_B集合(AA、BB)中存在 |
| 2 | 1 | CODE_A的CC未在该ID的CODE_B(DD)中出现 |
| 3 | 0 | CODE_A的EE在该ID的CODE_B集合(EE、FF)中存在 |
| 4 | 0 | CODE_A的FF在该ID的CODE_B集合(FF、GG)中存在 |
| 5 | 2 | CODE_A的AA、BB均未在该ID的CODE_B集合(FF、GG)中出现 |
| 6 | 1 | CODE_A的EE未在该ID的CODE_B集合(DD、CC)中出现(注:原示例说明此处描述可能有误) |
内容的提问来源于stack exchange,提问作者Michael Simonsen
相关产品推荐
相关产品推荐

