如何在Power BI中结合月份切片器计算重叠4个月滚动窗口达标员工?
Power BI 动态4个月窗口周均工时达标员工解决方案
前提准备:完善日期表
首先确保模型中有日期表(需标记为日期表),至少包含以下列:
Date:完整日期Year:年份(如2024)MonthNumber:月份数字(1-12)MonthName:月份名称(如"1月")YearMonth:年月组合(如"2024-01",用于排序)
步骤1:创建动态4个月窗口计算表
新建计算表,生成用户所选日期范围内所有重叠的4个月窗口:
4个月窗口表 = VAR SelectedMonths = SUMMARIZE( '日期表', '日期表'[Year], '日期表'[MonthNumber], '日期表'[MonthName], '日期表'[YearMonth] ) VAR WindowStarts = FILTER( SelectedMonths, COUNTROWS( FILTER( SelectedMonths, [Year] = EARLIER([Year]) && [MonthNumber] >= EARLIER([MonthNumber]) && [MonthNumber] <= EARLIER([MonthNumber]) + 3 || [Year] = EARLIER([Year]) + 1 && [MonthNumber] <= EARLIER([MonthNumber]) + 3 - 12 ) ) = 4 ) RETURN GENERATE( WindowStarts, VAR StartYear = [Year] VAR StartMonth = [MonthNumber] VAR EndMonth = StartMonth + 3 VAR EndYear = IF(EndMonth > 12, StartYear + 1, StartYear) VAR AdjustedEndMonth = IF(EndMonth > 12, EndMonth - 12, EndMonth) VAR EndMonthName = LOOKUPVALUE('日期表'[MonthName], '日期表'[Year], EndYear, '日期表'[MonthNumber], AdjustedEndMonth) RETURN ROW( "窗口起始年月", [YearMonth], "窗口范围", [MonthName] & "–" & EndMonthName, "窗口结束年份", EndYear, "窗口结束月份", AdjustedEndMonth ) )
步骤2:创建达标员工度量值
新建两个度量值,分别计算窗口内总工时和达标状态:
窗口内总工时 = CALCULATE( SUM('考勤汇总表'[WorkHours]), FILTER( '考勤汇总表', YEAR('考勤汇总表'[Date]) >= MIN('4个月窗口表'[Year]) && MONTH('考勤汇总表'[Date]) >= MIN('4个月窗口表'[MonthNumber]) && YEAR('考勤汇总表'[Date]) <= MAX('4个月窗口表'[窗口结束年份]) && MONTH('考勤汇总表'[Date]) <= MAX('4个月窗口表'[窗口结束月份]) ) ) 周均工时达标 = IF( [窗口内总工时] > 48 * 16, // 48小时/周 × 16周 "是", "否" )
步骤3:构建可视化组件
- 月份切片器:用日期表的
YearMonth或MonthName(搭配年份筛选)创建切片器,供用户选择日期范围。 - 结果表格:添加以下字段到表格:
4个月窗口表[窗口范围]考勤汇总表[EmployeeID]- 度量值
窗口内总工时 - 度量值
周均工时达标
- 表格筛选:设置
周均工时达标为"是",仅显示符合条件的记录。
关键逻辑说明
- 计算表
4个月窗口表会根据用户选择的月份自动生成所有连续4个月窗口,仅保留能凑齐完整4个月的起始月份。 - 度量值通过窗口表的起止年月精准筛选考勤数据,计算员工在对应窗口的总工时,再判断是否满足周均>48小时的条件。
内容的提问来源于stack exchange,提问作者Mohamed Abith
相关产品推荐
相关产品推荐

