如何提取每月首次出现日期对应的行值(DAX/Power Query实现)
每月首个日期对应数值提取方案
一、Power Query 预处理方案
既然你的Date列已经按升序排列,用Power Query做数据预处理最直接:
- 打开Power Query编辑器,选中目标表格
- 按月份分组提取首条数值:
- 切换到「转换」选项卡,点击「分组依据」
- 分组规则选「自定义」:
- 新增分组列
年月标识,用公式Date.Year([Date])*100 + Date.Month([Date])生成唯一的年月编号 - 再新增一列
月度首值,操作选「行→首行」,目标列选Values
- 新增分组列
- 完成分组后,你可以把结果合并回原表,或者直接用分组后的数据集做可视化
要是想在原表新增一列标记每月首条记录的数值,添加自定义列即可:
if [Date] = List.Min(Table.SelectRows(#"上一步骤名称", (x) => Date.Year(x[Date]) = Date.Year([Date]) and Date.Month(x[Date]) = Date.Month([Date]))[Date]) then [Values] else null
二、DAX 实现方案(适配可视化需求)
因为你要做12个月滚动折线图,DAX的计算列或度量值都能满足,推荐用度量值更灵活:
1. 计算列(添加到原表)
在Power BI数据视图里新建计算列:
月度首值 = VAR 当前年月 = YEAR('你的表名'[Date])*100 + MONTH('你的表名'[Date]) VAR 当月最早日期 = MINX(FILTER('你的表名', YEAR('你的表名'[Date])*100 + MONTH('你的表名'[Date]) = 当前年月), '你的表名'[Date]) RETURN IF('你的表名'[Date] = 当月最早日期, '你的表名'[Values], BLANK())
2. 度量值(直接用于折线图)
如果不需要修改原表,用度量值直接计算每个月的首值,更适合滚动范围计算:
滚动12月首值 = VAR 滚动日期范围 = DATESINPERIOD('日期表'[Date], LASTDATE('日期表'[Date]), -12, MONTH) VAR 每月最早日期 = ADDCOLUMNS(SUMMARIZE(滚动日期范围, '日期表'[年月标识]), "首日期", MINX(FILTER('你的表名', YEAR('你的表名'[Date])*100 + MONTH('你的表名'[Date]) = '日期表'[年月标识]), '你的表名'[Date])) RETURN SUMX(每月最早日期, CALCULATE(MAX('你的表名'[Values]), '你的表名'[Date] = [首日期]))
提示:建议搭配单独的日期表使用,能大幅优化时间智能函数的性能;如果没有日期表,直接替换成原表的Date列即可
三、可视化设置建议
制作12个月滚动折线图时:
- 用日期表的「年月标识」作为横轴
- 将DAX度量值或Power Query处理后的「月度首值」作为纵轴值
- 开启视觉对象的滚动筛选,设置为最近12个月,或者用DAX度量值自动计算滚动范围
内容的提问来源于stack exchange,提问作者Derek Huggens
相关产品推荐
相关产品推荐

