如何在Power BI中创建按月重置的Cumulative Count
Power BI 实现按月重置的累计计数
你需要的是自然月维度内逐天累计记录数、每月初自动从0重启计数的计算逻辑,直接通过DAX即可实现,分两种常用场景给出方案:
场景1:给原始表每行添加固定累计值(计算列方案)
- 先在数据视图确认
DATE列格式为Power BI可识别的「日期类型」,若为文本格式先修改列类型。 - 选中你的业务数据表,点击建模栏的「新建列」,输入以下DAX代码:
月累计计数 = VAR CurrentMonthEnd = EOMONTH('业务表'[DATE], 0) VAR CurrentDate = '业务表'[DATE] RETURN CALCULATE( COUNTROWS('业务表'), FILTER( ALL('业务表'), // 限定和当前行同属一个自然月,且日期早于/等于当前行日期 EOMONTH('业务表'[DATE], 0) = CurrentMonthEnd && '业务表'[DATE] <= CurrentDate ) ) - 代码中
'业务表'替换为你自己的实际表名即可。如果需要按Code等字段分组单独累计(比如不同编码各自算自己的月累计),只需要在FILTER筛选条件内追加对应字段的匹配规则,例如按Code分组就加一行'业务表'[Code] = EARLIER('业务表'[Code])。
场景2:可视化报表动态计算(度量值方案)
如果不需要给原始表加固定列,只是在报表可视化时动态展示月累计值,可以搭配独立的标准日期表写度量值,性能更好:
月累计计数_度量值 = CALCULATE( COUNTROWS('业务表'), DATESMTD('日期表'[日期]) )
使用时将日期表的日期字段放到可视化轴/筛选器上,该度量值会自动按当前筛选的日期范围,返回月初至今的累计记录数,跨月自动重置。
结果校验
用你提供的示例数据测试计算列方案,输出结果和你给出的预期完全一致:
- 2022/5/30记录:同月份内≤当日的记录共1条,返回1
- 2022/5/31两条记录:同月份内≤当日的记录共3条,均返回3
- 2022/6/1两条记录:进入新自然月,同月份内≤当日的记录共2条,均返回2
- 2022/6/2记录:同月份内≤当日的记录共3条,返回3
内容的提问来源于stack exchange,提问作者Data-7scientist
相关产品推荐
相关产品推荐

