PowerQuery如何按年份统计跨多年的创建、审批、解决等事件数量
解决方法
问题核心原因
你当前仅建立了「创建日期」和Calendar表的激活关联,统计审批、解决数时CALCULATE默认走激活的创建日期关联,所以统计结果是按记录创建年份归类,而非对应事件的实际发生年份。
推荐方案(性能最优,适合大数据量)
步骤1:配置表关系
在数据模型中给Calendar表和source表建立3组关联:
- 创建日期和Calendar表日期的关联保持「激活」状态
- 分别建立审批日期、解决日期和Calendar表日期的关联,关联状态设为「非激活」
步骤2:编写对应度量值
- 统计创建数(直接用激活关系即可)
创建数 = COUNT('source'[记录ID]) - 统计审批数(临时激活审批日期的关联,同时过滤掉未审批的空值记录)
审批数 = CALCULATE(COUNT('source'[记录ID]), USERELATIONSHIP('source'[审批日期], 'calendar'[date]), NOT(ISBLANK('source'[审批日期]))) - 统计解决数(逻辑同上)
解决数 = CALCULATE(COUNT('source'[记录ID]), USERELATIONSHIP('source'[解决日期], 'calendar'[date]), NOT(ISBLANK('source'[解决日期])))
效果验证
拿你举的单条记录示例验证:2017年创建、2018年审批、2019年解决,把Calendar表的年份字段拉到报表行维度时,结果完全符合预期:
- 2017年:创建数=1,审批数=0,解决数=0
- 2018年:创建数=0,审批数=1,解决数=0
- 2019年:创建数=0,审批数=0,解决数=1
替代方案(小数据量可用,无需额外建关系)
如果你的源数据量小于10万行,不想配置多组表关系,可以直接在度量值中做年份匹配:解决数 = COUNTROWS(FILTER('source', YEAR('source'[解决日期]) = SELECTEDVALUE('calendar'[年份]) && NOT(ISBLANK('source'[解决日期]))))
该方案计算时会遍历全表,数据量大时性能会明显下降,优先推荐第一种方案。
内容的提问来源于stack exchange,提问作者AndyJ97
相关产品推荐
相关产品推荐

