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

Power BI如何基于选定日期区间筛选数据表中的新增记录

DAX实现无关系日期筛选下的区间新增ID展示

问题描述

现有存储ID月度快照的事实表,样例数据如下:

Id date
 A  2022-01-31
 B  2022-01-31
 C  2022-01-31
 D  2022-02-28
 A  2022-02-28
 B  2022-02-28
 C  2022-02-28
 E  2022-03-31
 D  2022-03-31
 A  2022-03-31
 B  2022-03-31
 C  2022-03-31

报表配置说明:

  • 页面放置两个独立日期筛选器D_start(起始日期)、D_end(结束日期),取值来自独立DimDate表,该表未与事实表建立模型关系,仅提供可选日期值
  • 需求:根据筛选器选中的日期区间,仅展示区间内的新增ID记录(即ID首次出现的日期落在区间内,且仅展示首次出现的那条记录),预期效果如下:
    • 选D_start=2022-01-31、D_end=2022-02-28时,仅展示D 2022-02-28
    • 选D_start=2022-01-31、D_end=2022-03-31时,展示D 2022-02-28、E 2022-03-31
    • 选D_start=2022-02-28、D_end=2022-03-31时,仅展示E 2022-03-31
  • 已知可通过ETL预加工新增ID数据集实现,需要纯DAX实现方案。

实现方案

不需要调整模型关系、不需要预加工数据,通过度量值+视觉级筛选即可实现,步骤如下:

  1. 先写度量值获取筛选器选中的起止日期,因DimDate和事实表无关系,直接取选中范围的最大最小值即可:
    Selected Start = MIN('DimDate'[Date])
    Selected End = MAX('DimDate'[Date])
    
  2. 写度量值计算每个ID的首次出现(新增)日期:
    ID First Date = 
    CALCULATE(
        MIN('FactTable'[date]),
        ALLEXCEPT('FactTable', 'FactTable'[Id])
    )
    
  3. 写行级判断的标记度量值,用来过滤不符合要求的记录:
    Is Valid New Record = 
    VAR _first_date = [ID First Date]
    VAR _s = [Selected Start]
    VAR _e = [Selected End]
    RETURN
    INT(
        _first_date >= _s 
        && _first_date <= _e 
        && SELECTEDVALUE('FactTable'[date]) = _first_date
    )
    
  4. 把Id、date字段拖到表格视觉对象,再把Is Valid New Record度量值加到该表格的视觉级筛选器,设置筛选条件为值等于 1即可。

逻辑说明:判断条件分三层,一是ID的新增日期在选中区间内,二是当前行的日期刚好是该ID的新增日期,这样就会自动过滤掉老ID在后续月份的快照记录,只保留区间内新增ID的首条记录,完全匹配需求中的三个场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 07:34:23