Qlik Sense按ID1去重求和:合计正确但明细金额显示为0的问题
Qlik Sense 实现明细正常显示+按ID1去重计算总计金额
问题背景
示例数据生成SQL:
SELECT 1 ID1, 1 ID2, 100 Amount FROM dual UNION ALL SELECT 1 ID1, 2 ID2, 100 Amount FROM dual UNION ALL SELECT 1 ID1, 3 ID2, 100 Amount FROM dual UNION ALL SELECT 2 ID1, 1 ID2, 500 Amount FROM dual UNION ALL SELECT 2 ID1, 2 ID2, 500 Amount FROM dual;
默认情况下Qlik Sense输出的总计金额为1300(所有Amount直接累加),但业务需求为:
- 总计金额需按ID1去重计算:每个ID1仅统计一次其对应的Amount值,最终总计应为100+500=600
- 明细行需保持原Amount值正常显示
尝试使用社区方案Sum(Aggr(Sum(DISTINCT Amount), ID1))后,明细行除首条外均显示0,无法满足需求。
预期输出效果:
| ID1 | ID2 | Amount |
|---|---|---|
| Totals | 600 | |
| 1 | 1 | 100 |
| 1 | 2 | 100 |
| 1 | 3 | 100 |
| 2 | 1 | 500 |
| 2 | 2 | 500 |
解决方法
替换原Amount度量为以下条件表达式:
If(Dimensionality() = 0, Sum(Aggr(Sum(DISTINCT Amount), ID1)), Sum(Amount))
逻辑说明
- 总计行判断:
Dimensionality() = 0用于识别当前行是否为总计行(无维度层级),此时执行Sum(Aggr(Sum(DISTINCT Amount), ID1))——先按ID1分组计算去重后的金额和,再汇总得到符合要求的总计值600。 - 明细行处理:非总计行(即明细行)直接执行
Sum(Amount),确保每行的Amount值正常显示。
内容的提问来源于stack exchange,提问作者rhemmuuu
相关产品推荐
相关产品推荐

