Power BI DAX报错调试求助:统计月驻场≥2周员工数
问题分析与解决方案
原代码核心问题
- 语法错误:
SUMMARIZE里的SUM('Table1'[WeeksOnsite])完全错误——WeeksOnsite是你在ADDCOLUMNS里临时生成的列,不属于Table1,不能用表名引用。 - 逻辑错误:你用
CALCULATE(COUNTROWS('Timelogs'), 'Timelogs'[is_Onsite] >=3)计算驻场周数完全不符合需求:is_Onsite是1/0标记单日是否驻场,不是天数,而且没有按员工+周分组统计该周的总驻场天数,根本无法判断是否满足“每周驻场≥3天”的条件。
修正后的DAX代码
CountEmployeesOnsiteAtLeast2WeeksPerMonth = VAR ValidOnsiteWeeks = // 第一步:按员工、年周分组,计算该周驻场天数,标记是否为有效驻场周(≥3天) SUMMARIZE( FILTER('Timelogs', 'Timelogs'[Log Type] = "Time-In"), // 只保留签到记录 'Timelogs'[Employee Name], 'Date'[YearWeek], // 确保Date表有年周字段,用于按周分组 'Date'[Month], // 关联到月份 "WeeklyOnsiteDays", SUM('Timelogs'[is_Onsite]), // 统计该周驻场总天数 "IsValidOnsiteWeek", IF(SUM('Timelogs'[is_Onsite]) >=3, 1, 0) // 标记是否为有效驻场周 ) VAR EmployeeMonthlyValidWeeks = // 第二步:按员工、月份分组,统计有效驻场周的总数 SUMMARIZE( ValidOnsiteWeeks, [Month], [Employee Name], "TotalValidOnsiteWeeks", SUM([IsValidOnsiteWeek]) ) // 第三步:筛选出有效周数≥2的员工,计数 RETURN COUNTROWS( FILTER(EmployeeMonthlyValidWeeks, [TotalValidOnsiteWeeks] >=2) )
关键说明
- 确保你的
Date表包含**年周(YearWeek)**字段(比如格式为"2024-W01"),用来按周聚合数据——这是判断“驻场周”的核心维度。 SUM('Timelogs'[is_Onsite])会把该员工该周的所有驻场天数(1累加)求和,得到周驻场总天数,再判断是否≥3天。- 分步骤用变量(VAR)拆分逻辑,不仅更容易调试,也让代码可读性更强。
额外调试提示
- 先单独计算
ValidOnsiteWeeks变量,放到可视化里查看:每个员工每周的驻场天数、是否标记为有效周,确认数据是否符合预期。 - 再查看
EmployeeMonthlyValidWeeks变量,检查每个员工每月的有效周数统计是否正确。 - 如果
Date表没有年周字段,可以直接在Date表中添加计算列生成:YearWeek = FORMAT('Date'[Date], "YYYY-WWW")
内容的提问来源于stack exchange,提问作者Stefan Salazar
相关产品推荐
相关产品推荐

