基于日期切片器的DAX动态排名:按日期范围统计最新目标状态计数
动态日期范围下的目标状态最新值计数解决方案
问题背景
样本数据表:
entry_id entry_date company_id objective_title objective_status key objective_rank 1 2024-03-01 company_1 objective_1 Completed company_1_objective_1 1 2 2024-12-30 company_1 objective_1 In Progress company_1_objective_1 2 3 2024-01-02 company_2 objective_2 Not Started company_2_objective_2 1 4 2023-11-10 company_3 objective_3 Completed company_3_objective_3 1
原通过计算列objective_rank实现全表最新状态统计:
objective_rank = RANKX( FILTER( table_1, table_1[key] = EARLIER(table_1[key]) ), table_1[entry_date], , DESC )
全表统计结果:
objective_status count_key Not Started 1 In Progress 0 Completed 2
需求:添加基于entry_date的日期范围切片器,实现选择特定日期范围时,动态统计该范围内每个key的最新目标状态计数。例如选择entry_date < 2023-12-31时,需得到:
objective_status count_key Not Started 0 In Progress 1 Completed 1
解决方案
计算列是模型加载时静态计算的,无法响应切片器的动态筛选,因此需要改用DAX度量值实现动态逻辑。
1. 创建核心度量值 count_key
直接创建以下度量值,替代原计算列的统计逻辑:
count_key = VAR KeyLatestStatus = SUMMARIZE( table_1, table_1[key], -- 计算当前筛选范围内每个key的最新日期 "MaxEntryDate", MAX(table_1[entry_date]), -- 获取该最新日期对应的目标状态 "LatestStatus", CALCULATE( MAX(table_1[objective_status]), table_1[entry_date] = [MaxEntryDate] ) ) -- 统计当前选中状态对应的key数量 RETURN COUNTROWS( FILTER(KeyLatestStatus, [LatestStatus] = SELECTEDVALUE(table_1[objective_status])) )
2. 配置可视化组件
- 添加日期范围切片器,数据源选择
table_1[entry_date] - 添加表格/矩阵,行字段选择
table_1[objective_status],值字段选择刚创建的count_key度量值
原理说明
- 度量值会实时响应切片器的筛选上下文,针对每个
key仅计算当前日期范围内的最新entry_date - 通过
SUMMARIZE聚合每个key的最新状态,再统计对应状态的数量,实现动态更新
内容的提问来源于stack exchange,提问作者SunStorm44
相关产品推荐
相关产品推荐

