如何在DAX中实现基于当月日均成本的月末剩余天数成本预测?
解决方案:基于当月日均成本的月末预测DAX公式
直接给出满足需求的DAX度量值,分两种适用场景:
场景1:基于系统当前日期计算
CostsForecast = VAR CurrentMonthTotal = CALCULATE(SUM('Usage details'[costInBillingCurrency]), DATESMTD('Usage details'[date])) VAR DaysElapsed = COUNTROWS(DATESMTD('Usage details'[date])) VAR AvgDailyCost = DIVIDE(CurrentMonthTotal, DaysElapsed, 0) VAR LastDayOfMonth = EOMONTH(TODAY(), 0) VAR RemainingDays = DAY(LastDayOfMonth) - DAY(TODAY()) RETURN CurrentMonthTotal + (AvgDailyCost * RemainingDays)
场景2:基于报表选择的日期计算(更灵活)
如果需要支持历史日期的预测分析,将系统日期替换为报表数据中的最大日期:
CostsForecast = VAR CurrentDate = MAX('Usage details'[date]) VAR CurrentMonthTotal = CALCULATE(SUM('Usage details'[costInBillingCurrency]), DATESMTD('Usage details'[date])) VAR DaysElapsed = COUNTROWS(DATESMTD('Usage details'[date])) VAR AvgDailyCost = DIVIDE(CurrentMonthTotal, DaysElapsed, 0) VAR LastDayOfMonth = EOMONTH(CurrentDate, 0) VAR RemainingDays = DAY(LastDayOfMonth) - DAY(CurrentDate) RETURN CurrentMonthTotal + (AvgDailyCost * RemainingDays)
公式拆解说明
- CurrentMonthTotal:通过
DATESMTD筛选当月截至指定日期的成本数据,计算累计总成本 - DaysElapsed:统计当月已过的天数,确保与成本数据的日期范围完全匹配
- AvgDailyCost:用当月总成本除以已过天数,
DIVIDE函数自动处理除数为0的异常情况(如当月无数据时返回0) - LastDayOfMonth:使用
EOMONTH函数快速获取当月最后一天的日期 - RemainingDays:用当月最后一天的天数减去当前日期的天数,得到月末剩余天数
示例验证
按你给出的场景:3月23日,当月已产生成本23000美元,已过23天
- 日均成本:23000 ÷ 23 = 1000美元
- 剩余天数:31 - 23 = 8天
- 预测总成本:23000 + (1000 × 8) = 31000美元,完全符合预期
内容的提问来源于stack exchange,提问作者Francesco Mantovani
相关产品推荐
相关产品推荐

