Мера даты для фильтрации значений, демонстрирующих непоследовательное поведение

Я столкнулся со следующей проблемой:

Дополнительная информация: мне нужно получить последнюю версию 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())

Это возвращает истину, если это самые последние ставки. Неверно, если нет. (это работает) На самом деле это не относится к проблеме, но объясняет, как я получаю истинное / ложное значение для меры 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 года в формате даты:

Я использую эту меру как логическое значение для фильтрации моих значений:

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 г .:

Когда я пытаюсь использовать меру CP_PY для фильтрации своих значений, ничего не возвращается:

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

Я проверил, что измерения периода идентичны значениям ValuesTable [месяц-год], и убедился, что на самом деле существуют значения за предыдущий год;). У меня такое чувство, что мой CP_PY написан именно так, но я понятия не имею, где я ошибаюсь. Меня действительно смущает, почему это работает для CP, а не для CP_PY. Любая помощь будет очень признательна.


person user3845582    schedule 18.03.2019    source источник


Ответы (1)


Когда ты пишешь

FILTER ( ValuesTable, ... )

Таблица, которую вы фильтруете, ValuesTable, не обязательно является всей таблицей, но она оценивается в текущем контексте фильтра. Я предполагаю, что вы пытаетесь оценить эту меру в контексте, который не включает февраль 2018 года, а это означает, что добавление условия [CP_PY] приведет к тому, что функция FILTER вернет пустой набор, поскольку он не может одновременно включать и исключать этот месяц.

Есть несколько способов исправить это. Самый простой способ - заключить ValuesTable в соответствующий вариант ALL, ALLSELECTED или ALLEXCEPT. То есть что-то вроде

FILTER ( ALL ( ValuesTable ), ... )

Я бы рекомендовал переписать меру, чтобы она выглядела примерно так:

LY Actuals (NoFX) =
VAR PrevYear = [CP_PY]
RETURN
    CALCULATE (
        SUM ( ValuesTable[USDNoFX(xElim)] ),
        ValuesTable[Type] = "Actuals",
        ValuesTable[Month-Year] = PrevYear
    )
person Alexis Olson    schedule 25.03.2019
comment
Спасибо Алексис, отмечу твой ответ; Как ни странно, не получается обернуть таблицу значений вариацией ALL и т. Д. Тем не мение; объявление переменной меры (CP_PY) как переменной, как вы проиллюстрировали в своем примере, решило проблему. Есть идеи, почему это могло произойти? Спасибо за вашу помощь, очень признателен. - person user3845582; 26.03.2019