#powerbi #dax #powerbi-desktop
#powerbi #dax #powerbi-desktop
Вопрос:
Я сталкиваюсь со следующей проблемой:
Некоторая дополнительная информация: мне нужно получить последнюю версию FX определенного типа, чтобы использовать ее в качестве коэффициента пересчета. Я делаю это с помощью вычисляемого столбца true / false:
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) amp;amp; (FX_Table [Type] = "Actuals"), TRUE(), FALSE())
Это возвращает значение true, если значения являются самыми последними значениями. Если нет, то значение равно False. (это работает) На самом деле это не относится к проблеме, но объясняет, как я получаю значение true / false для меры CP.
Я создал две меры, каждая из которых возвращает 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" amp;amp; ValuesTable [Month-Year]=[CP]),
ValuesTable [RestCurrAct]
)
Когда я использую эту меру, результаты возвращаются, как и ожидалось, мои данные фильтруются по типу и по последнему периоду обмена валют (динамически изменяется в зависимости от того, что загружено в модель).
За предыдущий год:
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" amp;amp; ValuesTable [Month-Year]=[CP_PY]),
ValuesTable [USDNoFX(xElim)]
)
Я проверил, что показатели периода идентичны значениям ValuesTable [месяц-год], и я убедился, что на самом деле существуют значения предыдущего года 😉 . У меня такое чувство, что именно так написан мой CP_PY, но я понятия не имею, где я ошибаюсь. Я действительно смущен тем, почему это работает для CP, а не для CP_PY. Любая помощь была бы очень признательна.
Ответ №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
)
Комментарии:
1. Спасибо Алексис, я отмечу ваш ответ; Перенос таблицы значений в вариант ALL и т.д. странным образом не работает. Однако; объявление «переменной measure (CP_PY)» в качестве переменной, как вы проиллюстрировали в своем примере, решило проблему. Есть идеи, почему это могло произойти? Спасибо за вашу помощь, действительно ценится.