QlikView基于计数条件统计仅出现一次的订单号实现方法
QlikView 统计仅出现1次的订单号个数的正确方案
场景说明
- 待统计数据表包含
order_number字段,各订单号出现频次:100共1条、101共2条、102共1条、103共3条、104共2条 - 统计目标:计算仅出现1次的无重复order_number总个数,示例数据预期返回结果为2(符合条件的订单号为100、102)
- 此前尝试的两种写法均不符合QlikView语法规则,无法返回正确结果:
- 写法1:
count({<count(order_number)={1}>}order_number) - 写法2:
count(({<Aggr(count(order_number), order_number))={1}>}order_number)
- 写法1:
错误原因
集合分析的修饰符中不支持直接嵌套未绑定维度的聚合函数,Aggr函数的返回结果也无法直接放在集合修饰符的字段匹配位做等值判断,因此两种写法都会触发语法错误或返回错误计算值。
可用正确表达式
方案1:Aggr+If条件判断(易读性高,适合小数据量场景)
=Count(Aggr(If(Count(order_number)=1, order_number), order_number))
计算逻辑:
- 内层
Aggr(..., order_number)以order_number为分组维度,计算每个独立订单号对应的记录条数 If判断仅保留计数等于1的订单号,不符合条件的订单号返回null值- 外层Count统计所有非null的订单号数量,直接返回预期结果2
方案2:集合分析+搜索匹配(性能更优,适合大数据量场景)
=Count({<order_number={"=Count(order_number)=1"}>} DISTINCT order_number)
计算逻辑:
- 集合修饰符内使用双引号包裹的搜索表达式
"=Count(order_number)=1",自动按order_number维度聚合,筛选出计数为1的订单号集合 DISTINCT关键字用于去重,避免符合条件的订单号因对应多条明细记录被重复计数,最终返回正确结果2
内容的提问来源于stack exchange,提问作者Bhargav Gorantla
相关产品推荐
相关产品推荐

