You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 01:06:17