首页 > 解决方案 > 日期度量以过滤表现出不一致行为的值

问题描述

我面临以下问题:

一些附加信息:我必须获得某种类型的最新 FX 才能将其用作我的重述汇率。我用计算的真/假列来做到这一点:

bool_Latest_FX_Act = 
var latestDate = 
CALCULATE(
    MAX(FX_Table[Month-Year])
    ,FILTER(ALL(FX_Table)
        , FX_Table [Type] = "Actuals"
    )
)
return
IF((FX_Table [Month-Year] = latestDate) && (FX_Table [Type] = "Actuals"), TRUE(), FALSE())

如果汇率是最新汇率,则返回 true。如果不是,则为假。(它有效)这并不真正适用于问题,但解释了我如何获得 CP 测量的真/假。

我有这个模型: PBI 模型

我创建了两个度量,每个度量返回 1 个日期:

[CP] & [CP_PY]

(本期) & (去年本期)

CP = 
VAR ThisActMonth =
    CALCULATE (
        DISTINCT (FX_Table[Month-Year] ),
        FX_Table[bool_Latest_FX_Act] = TRUE ()
    )
RETURN
    ThisActMonth

此度量以日期格式返回 2019 年 2 月:

我将此度量用作度量中的布尔值来过滤我的值:

CP Actuals = SUMX(
     FILTER (ValuesTable, ValuesTable [Type] = "Actuals" && ValuesTable [Month-Year]=[CP]),
            ValuesTable [RestCurrAct]
     )

当我使用此度量时,结果按预期返回,我的数据按类型和最新的 FX 周期过滤(随模型中加载的任何内容动态变化)。

上一年:

CP_PY = SUMX(
    Filter('Date', 'Date'[Date Hierarchy]=[CP]),
    SAMEPERIODLASTYEAR('Date'[Date Hierarchy])
)

此度量返回 2018 年 2 月:

当我尝试使用 CP_PY 度量来过滤我的值时,没有返回任何内容:

LY Actuals (NoFX) = SUMX(
     FILTER (ValuesTable, ValuesTable [Type] ="Actuals" && ValuesTable [Month-Year]=[CP_PY]),
            ValuesTable [USDNoFX(xElim)]
     )

我检查了期间测量值是否与 ValuesTable[month-year] 值相同,并且我已确保实际上存在上一年的值;)。我有一种感觉,这是我的 CP_PY 的编写方式,但我不知道我哪里出错了。我真的很困惑为什么这适用于 CP 而不是 CP_PY。任何帮助将不胜感激。

标签: powerbidaxpowerbi-desktop

解决方案


当你写

FILTER ( ValuesTable, ... )

您正在过滤的表ValuesTable不一定是整个表,而是在您当前的过滤器上下文中进行评估。我猜您正在尝试在不包括 2018 年 2 月的上下文中评估该度量,这意味着添加[CP_PY]条件将使FILTER函数返回一个空集,因为它不能同时包含和排除该月。

有几种方法可以解决这个问题。一个简单的方法可能是包含、或ValuesTable的适当变体。也就是说,像ALLALLSELECTEDALLEXCEPT

FILTER ( ALL ( ValuesTable ), ... )

我建议重写度量,但看起来更像这样:

LY Actuals (NoFX) =
VAR PrevYear = [CP_PY]
RETURN
    CALCULATE (
        SUM ( ValuesTable[USDNoFX(xElim)] ),
        ValuesTable[Type] = "Actuals",
        ValuesTable[Month-Year] = PrevYear
    )

推荐阅读