Рост числа клиентов с течением времени многомерное выражение

#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