Power BI中按年度获取各协议号最新数据的非SQL实现方案
在Power BI中获取每年各协议号最新记录的替代方法
针对SQL直连查询出错的情况,以下是几种在Power BI内实现需求的方法:
方法1:Power Query编辑器清洗数据
- 导入数据后进入Power Query编辑器,添加自定义列提取年份:
Date.Year([日期列]),命名为「年份」 - 按「协议号」和「年份」分组,分组操作选择「所有行」,新列名设为「组内数据」
- 添加自定义列,筛选每组中日期最大的记录:
Table.SelectRows([组内数据], each [日期列] = List.Max([组内数据][日期列])) - 展开这个自定义列,删除多余的分组列,就能得到每年每个协议号的唯一最新记录
方法2:DAX创建计算表
直接用DAX生成符合要求的新表,公式示例:
每年最新协议记录 = VAR 带年份的表 = ADDCOLUMNS( 原始数据表, "年份", YEAR(原始数据表[日期列]) ) VAR 分组取最新 = SUMMARIZE( 带年份的表, 带年份的表[协议号], 带年份的表[年份], "最新日期", MAX(带年份的表[日期列]) ) RETURN NATURALINNERJOIN(分组取最新, 原始数据表)
- 逻辑:先给原始表加年份列,再按协议号+年份分组取对应最大日期,最后通过内连接关联回原始表,拿到最新日期的完整记录
方法3:DAX度量值配合可视化筛选
如果不需要生成新表,仅在可视化中展示目标数据:
- 创建度量值判断当前行是否为该协议号当年的最新记录:
是否为当年最新记录 = VAR 当前年份 = YEAR(MAX(原始数据表[日期列])) VAR 当前协议号 = MAX(原始数据表[协议号]) VAR 当年最大日期 = CALCULATE( MAX(原始数据表[日期列]), ALLSELECTED(原始数据表), 原始数据表[协议号] = 当前协议号, YEAR(原始数据表[日期列]) = 当前年份 ) RETURN IF(MAX(原始数据表[日期列]) = 当年最大日期, 1, 0)
- 在可视化组件的筛选器中添加这个度量值,设置为「等于1」,即可只显示每年各协议号的最新记录
内容的提问来源于stack exchange,提问作者Pallavi Singh
相关产品推荐
相关产品推荐

