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

Power BI DirectQuery中筛选后获取各名称最新行的DAX需求

在Power BI DirectQuery中实现带日期切片器的各分组最新行展示

嘿,这个需求我之前帮别人处理过,DirectQuery模式下因为对计算列有不少限制,确实得用点巧劲,我给你两个可行的方案,优先推荐第一个,适配性更强:

方案一:用度量值标记+视觉对象筛选(推荐)

这个方法完全适配DirectQuery的特性,不会有数据源兼容性问题:

  1. 创建标记最新行的度量值
    打开Power BI的建模选项卡,新建一个度量值,粘贴下面的DAX代码(记得把你的表名换成你实际的表名称):

    IsLatestRow = 
    VAR CurrentName = SELECTEDVALUE('你的表名'[Name])
    VAR CurrentTxDate = SELECTEDVALUE('你的表名'[TxDate])
    VAR MaxDateForName = CALCULATE(MAX('你的表名'[TxDate]), ALLSELECTED('你的表名'), '你的表名'[Name] = CurrentName)
    RETURN IF(CurrentTxDate = MaxDateForName, 1, 0)
    

    简单解释下逻辑:这个度量值会跟着切片器的筛选范围走,先拿到当前行的Name和日期,然后在筛选后的数据集里,找出该Name对应的最新日期,最后判断当前行是不是这个最新日期的行,是就返回1,否则返回0。

  2. 给表格视觉对象加筛选

    • 把你需要展示的字段(Name、Tx、TxDate、Other Columns)都添加到表格里
    • 打开右侧的「视觉对象筛选器」面板,找到刚才创建的IsLatestRow度量值,把筛选条件设为「等于1」

这样设置完,不管你怎么调整日期切片器,表格都会自动展示每个Name在当前筛选范围内的最新行,完全符合你的要求。

方案二:用TopN创建计算表(注意数据源兼容性)

如果你的DirectQuery数据源支持计算表(比如SQL Server、Azure SQL这类是支持的,部分小众数据源可能不行),也可以直接生成只包含最新行的计算表:

LatestRows = 
VAR RankedRows = 
    ADDCOLUMNS(
        '你的表名',
        "Rank", RANKX(FILTER('你的表名', '你的表名'[Name] = EARLIER('你的表名'[Name])), '你的表名'[TxDate],, DESC, DENSE)
    )
RETURN
    SELECTCOLUMNS(
        FILTER(RankedRows, [Rank] = 1),
        "Name", '你的表名'[Name],
        "Tx", '你的表名'[Tx],
        "TxDate", '你的表名'[TxDate],
        "Other Columns", '你的表名'[Other Columns]
    )

然后把这个计算表作为表格视觉对象的数据源,再配合日期切片器就行。不过要注意,DirectQuery下计算表的性能取决于数据源的大小,如果数据量很大,可能会有点卡,所以还是优先用方案一。

测试验证

比如你把日期切片器设为1/1/2017到1/2/2017时:

  • Name A在筛选范围内的最新日期是1/1/2017,所以显示Tx=1的行
  • Name C的最新日期是1/2/2017,显示Tx=7的行
  • Name B在这个范围里没有数据,自然不会显示,完全符合你的预期。

内容的提问来源于stack exchange,提问作者Dan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:10:24