Power BI计算表聚合列筛选:如何按出勤类型统计时长
解决DAX度量值异常问题的修正方案
原代码的问题分析
- HoursWorked:存在拼写错误(
"Rrgular"应为"Regular");且直接引用计算表列做筛选易引发上下文冲突,建议基于分组表的聚合列进行计算。 - TotalLeave2:DAX多值筛选语法错误,
||直接连接字符串的写法不合法,需改用IN运算符或完整的OR条件逻辑。
正确的度量值写法
1. 计算Regular类型的工作时长
基于分组表TableGroupByPP的聚合列TotalGrpHrsPP计算(已完成分组求和,性能更优):
HoursWorked = CALCULATE( SUM(TableGroupByPP[TotalGrpHrsPP]), TableGroupByPP[Budget_Attendance_Report_ATTENDANCE_TYPE] = "Regular" )
若需直接基于源表计算:
HoursWorked = CALCULATE( SUM(Budget_Attendance_Report[HOURS]), Budget_Attendance_Report[ATTENDANCE_TYPE] = "Regular" )
2. 计算休假类型的总时长
使用IN运算符简化多值筛选:
TotalLeave2 = CALCULATE( SUM(TableGroupByPP[TotalGrpHrsPP]), TableGroupByPP[Budget_Attendance_Report_ATTENDANCE_TYPE] IN {"Annual", "Sick", "FamilySick"} )
或使用完整OR条件写法:
TotalLeave2 = CALCULATE( SUM(TableGroupByPP[TotalGrpHrsPP]), TableGroupByPP[Budget_Attendance_Report_ATTENDANCE_TYPE] = "Annual" || TableGroupByPP[Budget_Attendance_Report_ATTENDANCE_TYPE] = "Sick" || TableGroupByPP[Budget_Attendance_Report_ATTENDANCE_TYPE] = "FamilySick" )
补充说明
- 优先使用分组表的聚合列
TotalGrpHrsPP计算,避免重复对源表数据求和,提升查询性能。 - 确保列名、类型名称的拼写完全一致,DAX对拼写准确性要求严格(大小写不敏感)。
内容的提问来源于stack exchange,提问作者user19896554
相关产品推荐
相关产品推荐

