Power Pivot:如何关联含FTE起止日期的员工表与日期表以计算聚合FTE?
员工FTE按日/周/月/年度聚合解决方案
1. 先搭建标准日期表
这是时间维度聚合的基础,用DAX生成即可(适用于Power BI/Excel Power Pivot):
日期表 = ADDCOLUMNS ( CALENDAR (DATE(2020,1,1), DATE(2030,12,31)), -- 按需调整日期范围 "年份", YEAR([Date]), "月份", MONTH([Date]), "年月", FORMAT([Date], "YYYY-MM"), "周数", WEEKNUM([Date], 2), -- 周数以周一为起始 "年度周", FORMAT([Date], "YYYY") & "-W" & FORMAT(WEEKNUM([Date],2), "00") )
生成后记得将其标记为日期表(Power BI中右键表→设为日期表)。
2. 用DAX度量值计算,避免数据膨胀
不用在Power Query里生成百万条日期记录,直接通过度量值实现需求:
每日FTE合计
每日FTE合计 = SUMX ( '员工表', VAR 生效开始 = '员工表'[生效起始日期] VAR 生效结束 = '员工表'[生效结束日期] VAR 当前日期 = MAX('日期表'[Date]) RETURN IF (当前日期 >= 生效开始 && 当前日期 <= 生效结束, '员工表'[FTE], 0) )
月度FTE总天数(匹配你的示例需求)
计算每个员工在当月的有效天数×FTE,再汇总所有员工:
月度FTE总天数 = SUMX ( '员工表', VAR 生效开始 = '员工表'[生效起始日期] VAR 生效结束 = '员工表'[生效结束日期] VAR 当月第一天 = EOMONTH(MAX('日期表'[Date]), -1) + 1 VAR 当月最后一天 = EOMONTH(MAX('日期表'[Date]), 0) VAR 有效起始 = MAX(生效开始, 当月第一天) VAR 有效结束 = MIN(生效结束, 当月最后一天) RETURN IF (有效起始 <= 有效结束, (有效结束 - 有效起始 + 1) * '员工表'[FTE], 0) )
周/年度的聚合可参照月度逻辑修改,只需把当月起止日期替换为当周/当年的起止日期即可。
3. 模型关系处理
无需给员工表和日期表建立物理关系,上述度量值会通过MAX('日期表'[Date])自动关联透视表的日期上下文。若一定要建立关系,可设置双向筛选,但无关系的度量值方式更简洁高效。
4. 透视表使用方法
将日期表的「年月」「年度周」「年份」拖到透视表的行/列区域,再把上述度量值拖到值区域,即可直接得到周/月/年度的FTE聚合结果。
内容的提问来源于stack exchange,提问作者Scraps
相关产品推荐
相关产品推荐

