SSAS -> Создание KPI -> Как создать kpi, который сравнивает рейтинг клиента за один день по сравнению с предыдущим днем? - PullRequest
2 голосов
/ 25 января 2012

Я работал над созданием kpi, который сравнивал бы рейтинг клиента на определенную дату по сравнению с предыдущим днем. В свою очередь, вы сможете увидеть, повысился ли этот клиент по рангу или снизился по рангу с точки зрения того, чем был сгенерирован список. В моей ситуации они упорядочены по выручке.

Я могу достаточно легко ранжировать своих клиентов с помощью функции ранжирования и предоставлять отчет, но когда дело доходит до создания kpi сравнения этих рангов по дням, я изо всех сил пытаюсь выяснить, как к этому следует подходить. Сам ранг не является чем-то, что хранится, поскольку данные - это то, что мне нужно будет создать на лету с помощью функции ранга.

Вот пример моего запроса MDX, который я использую для создания своего начального начального отчета, который предоставляет мне рейтинг клиентов без слияния дат:

WITH SET [RevRank] AS
ORDER (
    [Customer].[Customer Id].CHILDREN ,
    [Measures].[Revenue], BDESC)  
  MEMBER [Measures].[RANKRevenue] AS RANK([Customer].[Customer Id].CurrentMember, [RevRank] )

SELECT NON EMPTY { [Measures].[Revenue], [Measures].[Fact Order Count], [Measures].[RANKRevenue] } ON COLUMNS, 
  NON EMPTY TopCount( { ([RevRank] ) } , 100, [Measures].[Revenue]) ON ROWS 
FROM [DW] 

Исходя из этого, я пытаюсь склеить определенную дату (день), а затем сравнить этот ранг с предыдущим днем ​​в кПи. Итак, с самого начала я работаю над тем, чтобы разбить этот запрос. Я создал предварительно рассчитанный набор и предварительно рассчитанный член, чтобы помочь мне сделать это проще. Сейчас я просто пытаюсь выяснить, как создать этот набор и член по дням, и тогда я могу хотя бы произвести сравнение между одним днем ​​и следующим.

01/26/2012 Обновление: Хорошо, я немного продвинулся в этом вопросе, но у меня все еще есть проблемы с получением ранга для моего запроса, запрос ниже имеет нулевые значения для ранжирования. Надеюсь, кто-то может увидеть проблему с этим запросом.

WITH MEMBER  [Measures].[PrevDayRevenue] AS
( [Measures].[Revenue], ParallelPeriod ([Date Link].[PK Date].[PK Date],1))
SET [RevRankPrevOrder] AS
ORDER (
   [Customer].[Customer Id].Members ,
   [Measures].[PrevDayRevenue],
   BDESC)
MEMBER [Measures].[RANKRevenuePrevOrder] AS RANK([Customer].CurrentMember, [RevRankPrevOrder])
SET [RevRankCurrOrder] AS
ORDER (
   [Customer].[Customer Id].Members ,
   [Measures].[Revenue],
   BDESC)
MEMBER [Measures].[RANKRevenueCurrOrder] AS RANK([Customer].CurrentMember, [RevRankCurrOrder])

SELECT NON EMPTY { [Measures].[Revenue],  [Measures].[PrevDayRevenue], [Measures].[RANKRevenuePrevOrder], [Measures].[RANKRevenueCurrOrder] } ON COLUMNS,
NON EMPTY { ( [RevRankCurrOrder] ) } ON ROWS 
FROM [DW] 
WHERE {[Date Link].[PK Date].&[2012-01-08T00:00:00]}

Ответы [ 2 ]

1 голос
/ 26 января 2012

Вы можете использовать функцию ParallelPeriod для вычисления ранга за предыдущий день. Это также должно быть сделано на лету.

Тогда вы можете просто сравнить два в вашем значении KPI ...

CASE
    WHEN [Customer Rank Yesterday] - [Customer Rank Today] > 0 THEN 1
    WHEN [Customer Rank Yesterday] - [Customer Rank Today] = 0 THEN 0
    ELSE -1
END
0 голосов
/ 27 января 2012

Вот мой законченный запрос, надеюсь, это поможет кому-то еще. :

WITH MEMBER  [Measures].[PrevDayRevenue] AS
( [Measures].[Revenue], ParallelPeriod ([Date Link].[PK Date].[PK Date],1))

SET [RevRankPrevOrder] AS
ORDER (
   [Customer].[Customer Id].CHILDREN ,
   [Measures].[PrevDayRevenue],
   BDESC)

MEMBER [Measures].[RANKRevenuePrevOrder] AS 
    RANK(
    [Customer].[Customer Id].CurrentMember,
    [RevRankPrevOrder])

SET [RevRankCurrOrder] AS
ORDER (
   [Customer].[Customer Id].CHILDREN,
   [Measures].[Revenue],
   BDESC)

MEMBER [Measures].[RANKRevenueCurrOrder] AS RANK([Customer].[Customer Id].CurrentMember, [RevRankCurrOrder])

SELECT NON EMPTY { [Measures].[Revenue],  [Measures].[PrevDayRevenue], [Measures].[RANKRevenuePrevOrder], [Measures].[RANKRevenueCurrOrder]  } ON COLUMNS,
NON EMPTY { ( [RevRankCurrOrder] ) } ON ROWS 
FROM [DW] 
WHERE {[Date Link].[PK Date].&[2012-01-10T00:00:00]}
...