SSAS -> Création KPI -> Comment créer un KPI qui compare le rang d'un client un jour par rapport à la veille?

StackOverflow https://stackoverflow.com/questions/8995515

Question

J'ai travaillé sur la création d'un KPI qui compare le rang de client à une date spécifique par rapport à la veille. À son tour, vous pourriez voir si ce client a augmenté en rang ou en baisse en termes de la liste générée par la liste. Dans ma situation, ils sont commandés par des revenus.

Je suis en mesure de classer mes clients via la fonction de rang assez facilement et de fournir le rapport, mais quand il s'agit de créer le KPI de comparer ces rangs à travers les jours, j'ai du mal à comprendre comment cela devrait être abordé. Le rang lui-même n'est pas quelque chose de stocké en tant que données, c'est quelque chose que je devrai créer à la volée via la fonction de rang.

Voici un exemple de ma requête MDX que j'utilise pour créer mon rapport de départ initial qui me fournit un rang de clients sans épissage de date:

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] 

À partir de cela, j'essaie d'épisser à une date spécifique (jour), puis de comparer ce rang à une veille dans un KPI. Donc, à commencer, je travaille sur la rupture de cette requête. J'ai créé un ensemble pré-calculé et un membre pré-calculé pour m'aider à le faire plus facilement. Maintenant, j'essaie juste de comprendre comment créer cet ensemble et ce membre un jour, puis je peux au moins produire une comparaison entre un jour et le suivant.

26/01/2012 Mise à jour: OK, je suis un peu plus loin sur la route, mais j'ai toujours des problèmes avec le grade de grade dans ma requête, la requête ci-dessous a nuls pour le classement. J'espère que quelqu'un pourra voir le problème avec cette requête.

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]}
Était-ce utile?

La solution

Vous pouvez utiliser le Parallelperiod fonction pour calculer le rang pour la veille. Cela devra également être fait à la volée.

Ensuite, vous pouvez simplement comparer les deux dans votre valeur 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

Autres conseils

Voici ma requête terminée, j'espère que cela aide quelqu'un d'autre. :

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]}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top