/ / як отримати річну історію даних у dax - excel, mdx, зведена таблиця, dax, таблична

як отримати рік історії даних в dax - excel, mdx, pivot-table, dax, tabular

IIF(SUM
(
[Calendar].[Month].CurrentMember.Lag(11) :
[Calendar].[Month].CurrentMember,
[Measures].[Qty]
) = 0, 0,
SUM
(
[Calendar].[Month].CurrentMember.Lag(11) :
[Calendar].[Month].CurrentMember,
[Measures].[Num]
) /

SUM
(
[Calendar].[Month].CurrentMember.Lag(11) :
[Calendar].[Month].CurrentMember,
[Measures].[Qty]
) )

Це формула з багатовимірної моделі, я намагаюся перетворити цю формулу MDX у формулу DAX для використання в трубчастій моделі.

12 Month Avg  :=
IF (
CALCULATE (
SUM ( [QTY] ),
FILTER (
ALL ( Calendar[Month] ),
Calendar[Month] - 11
= ( Calendar[Month] - 11 )
)
)
= 0,
BLANK (),
CALCULATE (
SUM ( [Num] ),
FILTER (
ALL ( Calendar[Month] ),
Calendar[Month] - 11
= ( Calendar[Month] - 11 )
)
)
/ CALCULATE (
SUM ( [QTY] ),
FILTER (
ALL ( Calendar[Month] ),
Calendar[Month] - 11
= ( Calendar[Month] - 11 )
)
)
)

Тому я зробив цю формулу DAX для перетворення формули MDXна вершині. Однак, здається, не працює належним чином, коли я вибираю місяць у зведеній таблиці. Ці дві формули не відповідають, коли я фільтруюсь за місяцем. Як я можу вирішити цю проблему?

Відповіді:

2 для відповіді № 1

1) Створіть три базові заходи:

TotalNum := SUM([Num])

TotalQty := SUM([Qty])

Avg := DIVIDE ( [TotalNum], [TotalQty], 0 )

2) Створіть обчислену міру для обчислення середнього значення за попередній рік, включаючи поточний обраний місяць:

AvgLastYear:= CALCULATE (
[Avg] ,
DATESINPERIOD (
Calendar[Date] ,
MAX(Calendar[Date]),
-1, year
)
)

Пояснення:

По-перше, вам не потрібно, щоб ділити на нульовий ригмарол, і MDX, і DAX мають функцію DIVIDE (), яка обробляє це неявно.

По-друге, для DAX ідея полягає в тому, щоб побудувати базовий показник, а потім використовувати CALCULATE () для зміщення контексту цього заходу за необхідності - у цьому випадку проміжок часу.

Тут ми переглядаємо поточний обраний місяць (представлений як MAX(Calendar[Date]), хоча ви можете використовувати будь-яку функцію агрегації), а потім використовувати DATESINPERIOD() вибрати набір дат у нашому Calendar таблиця, яка представляє часовий період T-1 року до поточного місяця.