mardi 16 avril 2013

Challenge MDX : Generate, TopCount et restriction sur un set... en 2005

Voici un cas marrant sur lequel nous nous sommes penchés avec Thomas Ricquebourg. Nous avons une dimension produit avec une hiérarchie standard (Marque - SousMarque - Produit), une dimension temps avec une hiérarchie (Année - Mois - Jour), une dimension Géographie (Pays) et enfin un groupe de mesures (Quantité et CA) avec des données au jour.
Le but du jeu c'est de ramener les 5 produits les plus vendus par pays pour un mois et une marque donnés. Première étape dans l'écriture de la requête :

WITH SET [Top Product] AS
GENERATE(
[Geography].[Country].Members
,TopCount(
[Product].[Product].Members
,5
,[Measures].[Quantity]
)
)

SELECT [Measures].[Quantity] ON 0,[Geography].[Country].Members
*[Product].[Brand].Member
*[Time].[Month].&[201304]
*[Top Product] ON 1

FROM [MyCube]


Cette dernière va poser un(des) problème(s) : Elle ne me retourne pas les produits les plus vendus sur le mois sélectionné ou encore, le nombre de produit par pays ne sera pas toujours le même et ce malgré le TopCount. A votre avis pourquoi? Comment résoudre ce cas (attention, nous sommes en 2005)?
Comme d'habitude, laisser vos avis dans les commentaires.
Encore une fois je le précise, tout le monde peut laisser libre cours à son imagination. Peu importe que les propositions soient plus ou moins bonnes, l'idée de ce genre de billet c'est de faire resurgir des notions générales à partir d'un cas précis.

3 commentaires:

  1. N'empêche, ça fait 5 mois que j'attends la réponse :p

    RépondreSupprimer
  2. WITH SET [Top Product] AS
    GENERATE(
    [Geography].[Country].Members
    ,{[Geography].[Country].currentmember }
    *TopCount(
    [Product].[Product].Members
    ,5
    ,[Measures].[Quantity]
    )
    )

    SELECT [Measures].[Quantity] ON 0,[Geography].[Country].Members
    *[Product].[Brand].Member
    *[Time].[Month].&[201304]
    *[Top Product] ON 1
    FROM [MyCube]

    RépondreSupprimer
  3. normalement avec cette raquette tu auras ta réponse :)

    RépondreSupprimer