PowerBI DAX度量需求:基于单日期字段计算任务分配时长等
PowerBI DAX 解决方案
a) 计算每个Person ID的服务时长(首次至终止日期)
计算列方案(直接在事实表添加)
先创建计算列获取每个Person的关键日期,再计算时长:
- 首次分配日期:
首次分配日期 = CALCULATE( MIN('事实表'[Assign_Date]), ALLEXCEPT('事实表', '事实表'[Person ID]) )
- 终止日期(末次分配日期):
终止日期 = CALCULATE( MAX('事实表'[Assign_Date]), ALLEXCEPT('事实表', '事实表'[Person ID]) )
- 服务总天数:
服务总天数 = DATEDIFF([首次分配日期], [终止日期], DAY)
- 服务总周数(适配每周固定分配的场景):
服务总周数 = DATEDIFF([首次分配日期], [终止日期], WEEK)
度量方案(用于报表动态计算)
配合日历表筛选时,用度量更灵活:
服务总天数_度量 = VAR 首次日期 = CALCULATE(MIN('事实表'[Assign_Date]), ALLEXCEPT('事实表', '事实表'[Person ID])) VAR 末次日期 = CALCULATE(MAX('事实表'[Assign_Date]), ALLEXCEPT('事实表', '事实表'[Person ID])) RETURN DATEDIFF(首次日期, 末次日期, DAY)
周数度量只需把DAY替换为WEEK即可。
b) 生成每年各月的Person ID列表
用CONCATINATEX按年月分组去重拼接:
月度Person列表 = CONCATINATEX( DISTINCT('事实表'[Person ID]), '事实表'[Person ID], ", " )
说明:将此度量搭配日历表的「年份」「月份」字段使用,即可自动生成对应年月所有出现过的Person ID列表(自动去重)。若“完成所有任务”有额外规则,可在CONCATINATEX的第一参数中添加筛选条件。
c) 计算特定Assignment ID的分配时长
固定任务计算列方案(比如指定任务"A001")
A001分配天数 = VAR 该任务首次日期 = CALCULATE( MIN('事实表'[Assign_Date]), ALLEXCEPT('事实表', '事实表'[Person ID]), '事实表'[Assignment ID] = "A001" ) VAR 该任务末次日期 = CALCULATE( MAX('事实表'[Assign_Date]), ALLEXCEPT('事实表', '事实表'[Person ID]), '事实表'[Assignment ID] = "A001" ) RETURN IF(NOT(ISBLANK(该任务首次日期)), DATEDIFF(该任务首次日期, 该任务末次日期, DAY), BLANK())
动态任务度量方案(支持切片器选择任务)
特定任务分配天数_度量 = VAR 选中任务 = SELECTEDVALUE('事实表'[Assignment ID]) VAR 该任务首次日期 = CALCULATE( MIN('事实表'[Assign_Date]), ALLEXCEPT('事实表', '事实表'[Person ID]), '事实表'[Assignment ID] = 选中任务 ) VAR 该任务末次日期 = CALCULATE( MAX('事实表'[Assign_Date]), ALLEXCEPT('事实表', '事实表'[Person ID]), '事实表'[Assignment ID] = 选中任务 ) RETURN IF(NOT(ISBLANK(该任务首次日期)), DATEDIFF(该任务首次日期, 该任务末次日期, DAY), BLANK())
说明:添加Assignment ID切片器后,选择对应任务即可查看每个Person的分配时长,周数只需替换DAY为WEEK。
内容的提问来源于stack exchange,提问作者Jo Pumpkin
相关产品推荐
相关产品推荐

