Formules MDX - Associer deux dimentions temporelles avec LINKMEMBER
Posted on Wednesday 08 September 2010, 22:00 - Décisionnel - Permalink Tweet
- Article
- |
- Comments(0)
- |
- Attachments(0)
Voici un exemple d'utilisation de la fonction LINKMEMBER pour le calcul d'une mesure dans un cube Miscosoft SSAS.
Présentation
Cet exemple est extrait d'un travail sur le thème de la "validité des prévisions":- Des données de prévision commerciale sont extraites et stockées chaque semaine. Chacune de ces extractions correspond à une valeur EXTRACT_DATE.
- Les données d'entrée nous donnent des quantités (QTY) par date de prévision (SCHED_HIPT_DTTM)
- Dans le cas réel, plusieurs dimensions complémentaires sont présentes (client, produit, etc.)
Notre table de faits présente donc au minimum, pour l'exemple, les éléments
suivants :
Par exemple, nous voulons observer l'évolution des quantités prévues pour Mai 2010, durant les mois qui précèdent. Le but est d'évaluer la fiabilité des prévisions de M-1 à M-6.
- EXTRACT_DATE (KEY)
- SCHED_SHIP_DTTM ((KEY)
- QTY (MEASURE)
Besoin d'analyse
Il s'agit d'observer au cours du temps (date de vision), l'évolution des quantités prévues pour une date donnée (date de prévision).Par exemple, nous voulons observer l'évolution des quantités prévues pour Mai 2010, durant les mois qui précèdent. Le but est d'évaluer la fiabilité des prévisions de M-1 à M-6.
Modèle
On a donc un modèle de base contenant une table de fait et deux dimensions temporelles.Dimensions
Les dimensions que nous voulons lier ont une structure identique.Extract Time (date de Vision)
Schedule Time (date de réalisation prévue de la mesure)
Formule
Dans les formules suivantes, nous utilisons la fonction LINKMEMBER (Retourne le membre équivalent à un membre spécifié dans une hiérarchie spécifique).CREATE MEMBER CURRENTCUBE.[MEASURES].[Qty on Schedule]
AS SUM(
LINKMEMBER([Schedule Time].[Schedule Time].currentmember,[Extract Time].[Extract Time])
,[Measures].[QTY]),
VISIBLE = 1;
CREATE MEMBER CURRENTCUBE.[MEASURES].[QTY M-1]
AS SUM(parallelperiod([Extract Time].[Extract Time].[Month], 1, LINKMEMBER([Schedule Time].[Schedule Time].currentmember,[Extract Time].[Extract Time])),[Measures].[QTY]),
VISIBLE = 1 ;
CREATE MEMBER CURRENTCUBE.[MEASURES].[QTY M-2]
AS SUM(parallelperiod([Extract Time].[Extract Time].[Month], 2, LINKMEMBER([Schedule Time].[Schedule Time].currentmember,[Extract Time].[Extract Time])),[Measures].[QTY]),
VISIBLE = 1;
CREATE MEMBER CURRENTCUBE.[MEASURES].[QTY M-3]
AS SUM(parallelperiod([Extract Time].[Extract Time].[Month], 3, LINKMEMBER([Schedule Time].[Schedule Time].currentmember,[Extract Time].[Extract Time])),[Measures].[QTY]),
VISIBLE = 1;
CREATE MEMBER CURRENTCUBE.[MEASURES].[QTY M-4]
AS SUM(parallelperiod([Extract Time].[Extract Time].[Month], 4, LINKMEMBER([Schedule Time].[Schedule Time].currentmember,[Extract Time].[Extract Time])),[Measures].[QTY]),
VISIBLE = 1;
CREATE MEMBER CURRENTCUBE.[MEASURES].[QTY M-5]
AS SUM(parallelperiod([Extract Time].[Extract Time].[Month], 5, LINKMEMBER([Schedule Time].[Schedule Time].currentmember,[Extract Time].[Extract Time])),[Measures].[QTY]),
VISIBLE = 1;
CREATE MEMBER CURRENTCUBE.[MEASURES].[QTY M-6]
AS SUM(parallelperiod([Extract Time].[Extract Time].[Month], 6, LINKMEMBER([Schedule Time].[Schedule Time].currentmember,[Extract Time].[Extract Time])),[Measures].[QTY]),
VISIBLE = 1;