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

求基于新事实表的DAX度量:计算日期上下文下的活跃客户数

活跃客户数DAX度量解决方案(基于单案例行+ValidFrom/ValidTo设计)

核心需求

将原每日一行的客户支持案例表改为单案例一行(每行包含案例的有效起始日期ValidFrom和结束日期ValidTo),需在任意日期/日期范围筛选下,统计拥有至少一个活跃案例的唯一CustomerKey数量。

基础版DAX度量

适用于大多数场景,逻辑清晰易理解:

活跃客户数 = 
VAR SelectedDates = VALUES('日期表'[Date])
RETURN
CALCULATE(
    DISTINCTCOUNT('Customer Support Cases'[CustomerKey]),
    FILTER(
        ALL('Customer Support Cases'),
        EXISTS(
            SelectedDates,
            '日期表'[Date] >= 'Customer Support Cases'[ValidFrom] &&
            '日期表'[Date] <= 'Customer Support Cases'[ValidTo]
        )
    )
)

逻辑说明

  1. SelectedDates捕获当前筛选上下文内的所有日期
  2. 筛选出所有案例时间区间与筛选日期有重叠的行
  3. 对筛选结果中的CustomerKey去重计数

性能优化版DAX度量

针对百万级以上案例行的大表场景,通过日期边界筛选替代逐日期检查,大幅提升计算效率:

活跃客户数(优化版) = 
VAR MinSelectedDate = MIN('日期表'[Date])
VAR MaxSelectedDate = MAX('日期表'[Date])
RETURN
CALCULATE(
    DISTINCTCOUNT('Customer Support Cases'[CustomerKey]),
    'Customer Support Cases'[ValidFrom] <= MaxSelectedDate &&
    'Customer Support Cases'[ValidTo] >= MinSelectedDate
)

逻辑说明

  1. 先获取筛选日期范围的最小/最大值
  2. 直接筛选出ValidFrom不晚于筛选结束日期、且ValidTo不早于筛选起始日期的案例(即与筛选范围有重叠的案例)
  3. 对符合条件的CustomerKey去重计数

关键注意事项

  • 确保日期表已标记为Power BI/SSAS中的日期表,保证筛选上下文正确传递
  • ValidFrom、ValidTo需与日期表的Date列格式一致(建议统一为无时间部分的日期类型)
  • 若用9999-12-31标记仍在活跃的案例,上述度量逻辑完全适用
  • 大表场景下,建议给ValidFrom和ValidTo列创建列存储索引,进一步提升筛选性能

内容的提问来源于stack exchange,提问作者Andreas Mondrup-Hansen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:32:36