#mdx
#многомерные выражения
Вопрос:
Я хочу подсчитать рост числа клиентов за это время. Итак, каждый день у меня есть общее количество клиентов по состоянию и по подписке на продукт, и я могу рассчитать общее количество за каждый день. Если я хочу вычислять прирост каждый день, у меня не возникнет проблем, потому что я использую вычисляемый элемент с
[Date].CurrentMember-[Date].PrevMember
Это работает довольно хорошо, но теперь я хочу рассчитать рост за месяц. Итак, я должен суммировать все дневные приросты месяца, чтобы рассчитать месячный приросты, верно?
Но моя проблема в том, что я слишком новичок в многомерных выражениях, и я не могу найти способ получить этот результат (я хочу знать, сколько клиентов у меня более или менее за год). Моя интуиция подсказывает, что мне нужно суммировать рост за весь день в сводной дате.
Не могли бы вы мне помочь?
Ответ №1:
Если в вашей иерархии дат уровень месяца выше уровня даты (например. Год-месяц-день), в вашем кубе это значение уже будет предварительно обработано. Я бы использовал ANCESTOR
и LAG
для получения данных за определенный день месяц:
WITH MEMBER [Date].[YMD].[Current Month] AS
ANCESTOR(
[Date].[YMD].CurrentMember,
[Date].[YMD].[Month Level]
)
MEMBER [Date].[YMD].[Growth this month] AS
(
[Date].[YMD].[Current Month]
-
[Date].[YMD].[Current Month].LAG(1)
)
Однако при этом будут получены данные только за период в целый месяц.
Если вам нужны все данные за период с определенного дня по тот же день предыдущего месяца, то PARALLELPERIOD
это ваша функция перехода (примечание: не goto
инструкция). PARALLELPERIOD(Level, N, Member)
посмотрим на положение Member
среди его братьев и сестер, затем перейдем к его предку в Level
, перейдем N
к членам, предшествующим этому, и вернемся обратно к члену в том же относительном положении, что и Member
.
Другими словами, он просматривает вашу дату за предыдущий месяц, год или что-то еще.
WITH MEMBER [Date].[YMD].[One Month Ago Today] AS
PARALLELPERIOD(
[Date].[YMD].[Calendar Month],
1,
[Date].[YMD].CurrentMember
)
MEMBER [Date].[YMD].[All data since today last month] AS
(
/* The [Member]:[Member] syntax here is a range */
[Date].[YMD].[One Month Ago Today] : [Date].[YMD].CurrentMember
)
MEMBER [Date].[YMD].[Two Months Ago Today] AS
PARALLELPERIOD(
[Date].[YMD].[Calendar Month],
2,
[Date].[YMD].CurrentMember
)
MEMBER [Date].[YMD].[All data between today last month and today in the previous month] AS
(
[Date].[YMD].[Two Months Ago Today] : [Date].[YMD].[One Month Ago Today]
)
MEMBER [Date].[YMD].[Growth in the last month since the previous month] AS
(
[Date].[YMD].[All data between today last month and today in the previous month]
-
[Date].[YMD].[All data since today last month]
)
Надеюсь, это поможет.
<3