You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power BI DAX计算去年同期工作日返回空白的问题求助

Power BI度量值获取去年同期工作日数返回空白问题解决

场景还原

原度量值可正常计算当前所选年月的工作日数:

Measure = 
VAR selYear = SELECTEDVALUE('Stats Param LindyCalendar'[Date].[Year])
VAR selMonth = SELECTEDVALUE('Stats Param LindyCalendar'[Month])
VAR selDay = day(now())
VAR enddate = DATE(selYear, selMonth, selDay)
VAR CurWorkingDay = 
    COUNTROWS(
        FILTER(
            FILTER('Stats Param LindyCalendar', 'Stats Param LindyCalendar'[Date].[Date] <= enddate),
             'Stats Param LindyCalendar'[WorkingDay_YN] = -1))
RETURN CurWorkingDay

配置三个切片器:Country表筛选国家、Stats Param LindyCalendar年份切片器、月份切片器,调整参数时原度量值工作正常。但修改selYear = SELECTEDVALUE('Stats Param LindyCalendar'[Date].[Year])-1后,卡片视觉对象返回空白。

核心原因

切片器选中当前年份后,度量值继承了该筛选上下文,Stats Param LindyCalendar表中仅保留当前年份的日期数据,修改后的selYear指向去年,但此时表中无去年日期记录,导致计算返回空白。

解决方法

方法1:清除年份筛选上下文(保留其他筛选)

通过CALCULATETABLE配合ALL清除年份筛选,让度量值能访问去年的日期数据,同时保留国家、月份等其他筛选条件:

LastYearSamePeriodWorkingDays = 
VAR selYear = SELECTEDVALUE('Stats Param LindyCalendar'[Date].[Year]) - 1
VAR selMonth = SELECTEDVALUE('Stats Param LindyCalendar'[Month])
VAR selDay = DAY(NOW())
VAR enddate = DATE(selYear, selMonth, selDay)
VAR LastYearWorkingDay = 
    COUNTROWS(
        FILTER(
            CALCULATETABLE('Stats Param LindyCalendar', ALL('Stats Param LindyCalendar'[Date].[Year])),
            'Stats Param LindyCalendar'[Date].[Date] <= enddate
            && 'Stats Param LindyCalendar'[WorkingDay_YN] = -1
        )
    )
RETURN LastYearWorkingDay

如果需要更精准保留用户已选的非年份筛选,可替换ALL为ALLSELECTED:

LastYearSamePeriodWorkingDays = 
VAR selYear = SELECTEDVALUE('Stats Param LindyCalendar'[Date].[Year]) - 1
VAR selMonth = SELECTEDVALUE('Stats Param LindyCalendar'[Month])
VAR selDay = DAY(NOW())
VAR enddate = DATE(selYear, selMonth, selDay)
VAR LastYearWorkingDay = 
    COUNTROWS(
        FILTER(
            CALCULATETABLE('Stats Param LindyCalendar', ALLSELECTED('Stats Param LindyCalendar'[Date].[Year])),
            'Stats Param LindyCalendar'[Date].[Month] = selMonth
            && 'Stats Param LindyCalendar'[Date].[Date] <= enddate
            && 'Stats Param LindyCalendar'[WorkingDay_YN] = -1
        )
    )
RETURN LastYearWorkingDay

方法2:使用时间智能函数DATEADD(更简洁)

利用Power BI内置时间智能函数DATEADD直接定位去年同期日期,简化计算逻辑:

LastYearSamePeriodWorkingDays = 
VAR CurrentEndDate = DATE(
    SELECTEDVALUE('Stats Param LindyCalendar'[Date].[Year]),
    SELECTEDVALUE('Stats Param LindyCalendar'[Month]),
    DAY(NOW())
)
VAR LastYearEndDate = DATEADD(CurrentEndDate, -1, YEAR)
RETURN
COUNTROWS(
    FILTER(
        'Stats Param LindyCalendar',
        'Stats Param LindyCalendar'[Date].[Date] <= LastYearEndDate
        && 'Stats Param LindyCalendar'[WorkingDay_YN] = -1
        && 'Stats Param LindyCalendar'[Date].[Month] = SELECTEDVALUE('Stats Param LindyCalendar'[Month])
    )
)

注意:使用时间智能函数前,需确保Stats Param LindyCalendar已标记为日期表(建模选项卡设置)。

额外检查点

  • 确认Stats Param LindyCalendar表中存在去年对应年月的日期数据,且WorkingDay_YN字段正确标记工作日(值为-1)。
  • 检查Country表与日历表的关系筛选方向,若为单向筛选,需确保不会阻止去年日期数据的读取。

内容的提问来源于stack exchange,提问作者Matthias Müller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 06:40:20