You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Power BI Desktop中如何计算截至当日的月度预算

解决截至当日的动态累计预算DAX度量值问题

嘿,我明白你要实现的是基于年份参数、截至当前日期的累计预算计算,之前的方案算到年末确实不对,咱们来调整成精准到当日的版本,一步步来:

首先,先明确几个核心计算逻辑的修正点:

  • 动态年份过滤:所有预算数据要限定在选中的年份参数范围内
  • 当月已过天数:要基于「当月首日」和「当前日期」的差值计算,还要避免超过当月总天数的情况
  • 累计预算:前N-1个月的完整预算 + 当月截至当日的部分预算

完整DAX度量值代码

假设你的模型里有:

  • 日期表 Dates(包含Date列,关联预算表)
  • 预算表 Budget(包含YearMonthMonthlyBudget列)
  • 年份参数表 YearParameters(用来选择年份,包含Year列)
Cumulative Budget To Date = 
VAR SelectedYear = SELECTEDVALUE(YearParameters[Year], YEAR(TODAY()))
VAR CurrentDate = TODAY() -- 如果是报表切片器选日期,替换成 SELECTEDVALUE(Dates[Date], TODAY())
VAR CurrentMonth = MONTH(CurrentDate)
VAR CurrentDay = DAY(CurrentDate)

-- 1. 过滤出选中年份的所有预算数据
VAR YearlyBudgetData = 
    FILTER(
        Budget,
        Budget[Year] = SelectedYear
    )

-- 2. 计算前N-1个月的总预算(当前月份之前的所有月份)
VAR PriorMonthsTotal = 
    SUMX(
        FILTER(
            YearlyBudgetData,
            Budget[Month] < CurrentMonth
        ),
        Budget[MonthlyBudget]
    )

-- 3. 获取当前月份的预算和当月总天数
VAR CurrentMonthBudget = 
    SUMX(
        FILTER(
            YearlyBudgetData,
            Budget[Month] = CurrentMonth
        ),
        Budget[MonthlyBudget]
    )
VAR DaysInCurrentMonth = DAY(EOMONTH(DATE(SelectedYear, CurrentMonth, 1), 0))

-- 4. 计算当月已过天数(最多不超过当月总天数)
VAR DaysPassedInMonth = MIN(CurrentDay, DaysInCurrentMonth)

-- 5. 计算当月截至当日的预算
VAR CurrentMonthToDateBudget = 
    IF(
        DaysPassedInMonth > 0,
        CurrentMonthBudget / DaysInCurrentMonth * DaysPassedInMonth,
        0
    )

-- 6. 累加得到最终累计预算
RETURN
    IF(
        ISBLANK(PriorMonthsTotal),
        CurrentMonthToDateBudget,
        PriorMonthsTotal + CurrentMonthToDateBudget
    )

关键细节解释

  • 动态年份处理:用SELECTEDVALUE(YearParameters[Year], YEAR(TODAY()))获取选中的年份,默认取当前年份,确保数据随参数动态变化
  • 已过天数修正:用MIN(CurrentDay, DaysInCurrentMonth)避免出现超过当月总天数的情况(比如如果当前日期是下月的,就取整月预算)
  • 日期灵活性:如果你的报表是用切片器选择“截至日期”而不是固定今日,把CurrentDate的定义改成SELECTEDVALUE(Dates[Date], TODAY())即可
  • 空值处理:用IF(ISBLANK(...))避免没有数据时返回错误

适配你的示例场景

拿你给出的2018年1-5月数据举例:

  • 选中年份2018,当前日期是5月24日
  • PriorMonthsTotal就是1-4月预算总和:19099080 - 4049404 = 15049676
  • CurrentMonthBudget是4049404,DaysInCurrentMonth是31,DaysPassedInMonth是24
  • CurrentMonthToDateBudget = 4049404 / 31 *24 ≈ 3169861
  • 最终累计预算:15049676 + 3169861 = 18219537,和你的预期完全一致!

内容的提问来源于stack exchange,提问作者Serdia

火山引擎 最新活动