Power BI中为非连续日期添加月度重置的MTD累计计数列
在Power BI中计算非连续工作日的MTD累计天数(每月重置)
针对你遇到的非连续Bus_Day日期无法用DATEDIFF计算MTD累计的问题,提供两种可行方案:
方案1:DAX计算列
直接通过筛选同年同月且小于等于当前日期的Bus_Day行数实现累计,自动在每月首个工作日重置为1。
将以下代码替换表名后作为计算列添加:
MTD Day = VAR 当前年月 = YEAR([Bus_Day]) * 100 + MONTH([Bus_Day]) RETURN CALCULATE( COUNTROWS('你的表名'), FILTER( '你的表名', YEAR([Bus_Day]) * 100 + MONTH([Bus_Day]) = 当前年月 && [Bus_Day] <= EARLIER([Bus_Day]) ) )
原理:用当前年月变量标记每行所属的年月区间,通过CALCULATE+FILTER筛选出同区间内日期不晚于当前行的所有Bus_Day,COUNTROWS统计的数量就是累计天数,每月第一行只会统计自身,自然得到1。
方案2:Power Query(M语言)预处理
如果希望在数据加载阶段完成计算,可通过分组加索引的方式实现:
- 打开Power Query编辑器,加载你的Bus_Day表
- 按Bus_Day升序排序(确保日期顺序正确)
- 添加如下M代码步骤(替换数据源):
let 源 = 你的数据源, 按日期排序 = Table.Sort(源,{{"Bus_Day", Order.Ascending}}), 添加年月标识 = Table.AddColumn(按日期排序, "年月", each Date.Year([Bus_Day])*100 + Date.Month([Bus_Day])), 分组并生成索引 = Table.Group(添加年月标识, {"年月"}, {{"分组数据", each Table.AddIndexColumn(_, "MTD Day", 1, 1), type table}}), 展开数据 = Table.ExpandTableColumn(分组并生成索引, "分组数据", {"Bus_Day", "MTD Day"}, {"Bus_Day", "MTD Day"}), 清理列 = Table.RemoveColumns(展开数据,{"年月"}) in 清理列
原理:先给每行标记年月组合,再按年月分组,对每个分组添加从1开始的索引,索引值就是当月累计天数,自动实现每月重置。
内容的提问来源于stack exchange,提问作者Brian Samson
相关产品推荐
相关产品推荐

