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

Power BI同比计算报错:Date表NewMinPeriod列无法识别或不可用

Power BI 同比期间汇总报错解决办法

问题场景

需实现同比值对比:用户通过切片器选择多个连续的Period(格式YYYYMM,位于Date表),一个度量值展示所选期间的汇总工时,另一个展示去年同期的汇总工时。注:不按自然日期汇总,存在跨期交易,且无法在Date表中创建计算列,仅能使用度量值。

已创建的度量值:

  • Date表中的两个度量值:
NewMinPeriod = VALUE(CONCATENATE(LEFT(MIN('Date'[Period]),4) - 1, FORMAT(MID(MIN('Date'[Period]),5,2),"00")))
NewMaxPeriod = VALUE(CONCATENATE(LEFT(MAX('Date'[Period]),4) - 1, FORMAT(MID(MAX('Date'[Period]),5,2),"00")))
  • Time事实表中的两个度量值:
BetweenPeriodWorkHours = 
CALCULATE(
    SUM(Time[HoursWorked]),
    FILTER(
        'Time',
        'Time'[PeriodKey] >= MIN('Date'[Period]) &&
        'Time'[PeriodKey] <= MAX('Date'[Period])
    )
)
BetweenPreviousPeriodWorkHours = 
CALCULATE(
    SUM(Time[HoursWorked]),
    FILTER(
        'Time',
        'Time'[PeriodKey] >= MIN('Date'[NewMinPeriod]) &&
        'Time'[PeriodKey] >= MAX('Date'[NewMaxPeriod])
    )
)

错误信息

BetweenPeriodWorkHours可正常返回数据,但BetweenPreviousPeriodWorkHours抛出报错:

The report measure 'Time'[BetweenPreviousPeriodWorkHours] has a syntax error at line 6, position 40, reported by Analysis Services: 'Column NewMinPeriod' in table 'Date' cannot be found or may not be used in this expression'.

中文翻译:

报表度量值'Time'[BetweenPreviousPeriodWorkHours]在第6行第40位存在语法错误,Analysis Services报告:无法找到表'Date'中的列'NewMinPeriod',或者该列不能在此表达式中使用。

错误原因

  1. NewMinPeriod和NewMaxPeriod是度量值而非Date表的物理列,不能用MIN('Date'[NewMinPeriod])这种引用列的方式调用,需直接引用度量值本身。
  2. 原度量值逻辑存在错误:Time[PeriodKey] >= MAX('Date'[NewMaxPeriod])应为<=,否则筛选的是大于等于最大同期值的范围,不符合同期区间的筛选需求。

修正后的度量值

直接调用Date表的度量值,同时修正逻辑运算符:

BetweenPreviousPeriodWorkHours = 
CALCULATE(
    SUM(Time[HoursWorked]),
    FILTER(
        'Time',
        'Time'[PeriodKey] >= 'Date'[NewMinPeriod] &&
        'Time'[PeriodKey] <= 'Date'[NewMaxPeriod]
    )
)

简化方案(可选)

也可将同期计算逻辑直接整合到目标度量值中,无需额外创建NewMinPeriod和NewMaxPeriod度量值:

BetweenPreviousPeriodWorkHours = 
VAR SelectedMinPeriod = MIN('Date'[Period])
VAR SelectedMaxPeriod = MAX('Date'[Period])
VAR PrevMinPeriod = VALUE(CONCATENATE(LEFT(SelectedMinPeriod,4)-1, FORMAT(MID(SelectedMinPeriod,5,2),"00")))
VAR PrevMaxPeriod = VALUE(CONCATENATE(LEFT(SelectedMaxPeriod,4)-1, FORMAT(MID(SelectedMaxPeriod,5,2),"00")))
RETURN
CALCULATE(
    SUM(Time[HoursWorked]),
    FILTER(
        'Time',
        'Time'[PeriodKey] >= PrevMinPeriod &&
        'Time'[PeriodKey] <= PrevMaxPeriod
    )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 03:57:05