使用DAX在Power BI中计算月度按比例分摊值的技术问询
Power BI中DAX实现月度按比例分摊目标值计算
需求说明
现有两张数据表:
- 日历表:包含
日期、工作日天数列(记录每日的工作日标识或天数) - 目标值表:包含
日期、目标数值列(记录每日目标值)
需按以下逻辑计算每日的月度分摊目标值:
(月度目标值总和 ÷ 月度总工作日) × 当月首日至当日的累计工作日天数
示例:4月总工作日21天,月度目标总和6212,截至当月第20个工作日时,分摊值为 (6212÷21)×20≈5916.19
DAX度量值实现
月度分摊目标值 = VAR 当前日期 = MAX('日历表'[日期]) VAR 当前月份区间 = DATESBETWEEN( '日历表'[日期], DATE(YEAR(当前日期), MONTH(当前日期), 1), EOMONTH(当前日期, 0) ) VAR 月度目标总和 = CALCULATE(SUM('目标值表'[目标数值]), 当前月份区间) VAR 月度总工作日 = CALCULATE(SUM('日历表'[工作日天数]), 当前月份区间) VAR 累计工作日 = CALCULATE(SUM('日历表'[工作日天数]), '日历表'[日期] <= 当前日期) RETURN DIVIDE(月度目标总和, 月度总工作日) * 累计工作日
代码解释
- 当前日期:获取当前视觉上下文对应的日期,确保计算锚定到具体单日
- 当前月份区间:通过
DATESBETWEEN生成当前日期所在月份的完整日期范围,简化当月数据筛选 - 月度目标总和:计算当月所有日期的目标值总和,利用
当前月份区间限定筛选范围 - 月度总工作日:计算当月所有工作日天数的总和(若
工作日天数是0/1标识,可替换为COUNTROWS(FILTER('日历表', '日历表'[工作日天数]=1))) - 累计工作日:计算从当月首日到当前日期的工作日累计值
- 返回结果:用
DIVIDE处理除法(自动处理除零错误),再乘以累计工作日得到最终分摊值
注意事项
- 确保日历表与目标值表通过
日期字段建立一对一或一对多关系 - 若日历表的
工作日天数是布尔型(如"是/否"),需调整计算逻辑为统计工作日的数量而非求和
内容的提问来源于stack exchange,提问作者zle_bi
相关产品推荐
相关产品推荐

