QlikSense前端筛选指定Object ID及数据集对比方法
QlikSense 筛选六月Flag为1且五月Flag不为1的Object ID方法
直接用集合差集表达式实现
最简洁的方式是利用Qlik的集合运算,通过P()函数获取可能集后做差集,直接得到符合条件的Object ID列表:
Concat({<[Object ID] = P({<[Reporting Month]={'$(vCurrentMonth)'}, [Flag]={'1'}>}) - P({<[Reporting Month]={'$(vPreviousMonth)'}, [Flag]={'1'}>})>} Distinct [Object ID], ', ')
逻辑说明:
P({<[Reporting Month]={'$(vCurrentMonth)'}, [Flag]={'1'}>}):提取六月(当前月份)中Flag为1的所有Object ID集合- P({<[Reporting Month]={'$(vPreviousMonth)'}, [Flag]={'1'}>}):从上述集合中排除五月(上月)中Flag为1的Object ID- 最终通过
Concat将结果拼接为逗号分隔的字符串
用Aggr+条件判断实现(适合复杂场景)
如果需要更灵活的条件控制,也可以用Aggr结合聚合函数判断每个Object ID的月度Flag状态:
Concat(Distinct If( Sum({<[Reporting Month]={'$(vCurrentMonth)'}>} [Flag]) = 1 and (Sum({<[Reporting Month]={'$(vPreviousMonth)'}>} [Flag]) = 0 or IsNull(Sum({<[Reporting Month]={'$(vPreviousMonth)'}>} [Flag]))), [Object ID] ), ', ')
逻辑说明:
- 对每个Object ID,判断六月的Flag总和为1(即六月Flag=1)
- 同时五月的Flag总和为0,或五月无该ID的记录(Sum结果为Null),满足五月Flag不为1的要求
关于你之前的问题
你之前创建的两个变量只是分别提取了不同范围的Object ID集合,但没有进行集合差集运算,因此无法得到符合“六月有1且五月无1”的结果。QlikSense原生支持集合的并(+)、交(*)、差(-)运算,直接通过P()/E()函数配合运算符就能实现数据集对比。
内容的提问来源于stack exchange,提问作者akshat khetan
相关产品推荐
相关产品推荐

