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

基于时间切片器动态统计最新版本结果数量的DAX实现

DAX度量值实现:基于切片器日期统计每个ID的最新版本记录数量

需求说明

现有数据集包含4个唯一ID,每个ID对应多个不同版本的记录。需创建DAX度量值,根据时间切片器选择的日期,仅统计每个ID的最新版本记录数量。

预期结果

  • 2024/4/1:1条Open记录(ID:55)
  • 2024/5/15:2条Open记录(ID:55、77),1条Closed记录(ID:66)
  • 2024/8/1:2条Open记录(ID:88、55),2条Closed记录(ID:77、66)

现有配置

  • 已创建与Modified字段关联的Calendar表
  • Version和ID字段设为整数,且设置为“不汇总”
  • 版本号可能存在间隔,但版本越高对应的Modified日期越晚

已遇问题

硬编码日期变量dMax时可得到正确结果表,但改为动态获取MAX('Calendar'[Date])后无法正确响应切片器筛选;使用CALCULATE+COUNTROWS时出现错误或结果不符,需高效实现动态统计,无需完全重建结果表。

解决方案

1. 返回最新版本记录的表度量值

该度量值会返回符合切片器日期条件的所有ID最新版本记录,作为后续统计的基础:

最新版本记录 = 
VAR dMax = MAX('Calendar'[Date])
-- 聚合每个ID在选定日期前的最新Modified日期
VAR ID_LatestModified = 
    SUMMARIZE(
        FILTER('sampleTable', 'sampleTable'[Modified] <= dMax),
        'sampleTable'[ID],
        "LatestModified", MAX('sampleTable'[Modified])
    )
-- 关联原表,筛选出每个ID的最新版本记录
VAR ResultTable = 
    NATURALINNERJOIN(
        'sampleTable',
        ID_LatestModified
    )
RETURN
    ResultTable

2. 按状态统计数量的度量值

基于上述表度量值,可分别创建统计Open/Closed记录数的度量值:

Open记录数 = 
COUNTROWS(
    FILTER([最新版本记录], [Status] = "Open")
)
Closed记录数 = 
COUNTROWS(
    FILTER([最新版本记录], [Status] = "Closed")
)

方案说明

原代码的问题在于嵌套筛选时上下文处理逻辑混乱,导致动态获取切片器日期时无法正确关联筛选上下文。使用SUMMARIZE先聚合每个ID的最新Modified日期,再通过NATURALINNERJOIN关联原表的方式,既保证了效率,又能正确响应切片器的动态筛选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 00:17:02