Короткий ответ
Чаще всего проблема в контексте фильтра: функция вроде SAMEPERIODLASTYEAR некорректно работает внутри матрицы, если дата не берётся из выделенной, помеченной непрерывной Date-таблицы, либо иерархия дат в матрице не связана с этой же таблицей.
Как это работает подробнее
DAX-мера вычисляется в контексте фильтра; внутри матрицы у каждой ячейки свой неявный контекст по заголовкам строк/столбцов, и функции временной аналитики корректно работают только при наличии выделенной, непрерывной, помеченной как Date table таблицы дат с правильной связью.
Пример кода
Power BI DAX measure
Revenue LY =
CALCULATE(
[Revenue],
SAMEPERIODLASTYEAR('Date'[Date])
)Что использовать на практике
- Применение. Создайте отдельную таблицу-измерение дат, пометьте её как Date table, используйте DATEADD/SAMEPERIODLASTYEAR/PARALLELPERIOD со ссылкой на колонку даты именно этой таблицы, убедитесь, что иерархия в матрице построена на той же таблице дат (а не на несвязанном текстовом поле), протестируйте меру сначала в простой таблице, а потом добавляйте в сложную матрицу.
- Проверка. вручную отфильтровать матрицу на один конкретный месяц и сверить значение
Revenue LYс прямым запросом к таблице фактов за тот же месяц годом ранее.
Подводные камни
- Частые ошибки. Использование текстового поля «Месяц», не упорядоченного и не непрерывного по реальной дате, для временной аналитики; несколько похожих дата-полей, создающих неоднозначные связи; корректная работа меры как отдельной карточки, но некорректная внутри матрицы из-за иного неявного контекста; сравнение полного прошлого месяца с неполным текущим без пометки об этом.