En introduction à cet article, j’en profite pour remercier la communauté MVP qui me permet régulièrement d’échanger et de trouver des solutions à des problèmes exotiques et se fut encore une fois le cas récemment avec un problème de manipulation Excel sur base SSAS. Merci donc à Greg Galloway d’avoir partagé l’utilisation d’une petite checkbox et à Chris Webb qui en a profité pour communiquer sur la solution proposée.
Le problème est le suivant, j’ai une dimension code client qui contient de très nombreux membres (120 000) et lorsque j’en désélectionne un… je me retrouve avec uniquement 12 000 clients…
Premier réflexe, regarder dans le profiler ce qui se passe et là…
SELECT NON EMPTY Hierarchize({DrilldownLevel({[Client].[Client Code].[All]},,,INCLUDE_CALC_MEMBERS)}) DIMENSION PROPERTIES PARENT_UNIQUE_NAME,HIERARCHY_UNIQUE_NAME ON COLUMNS FROM (SELECT ({ [Client].[Client Code].&[000002] , [Client].[Client Code].&[000003] , [Client].[Client Code].&[000004] , [Client].[Client Code].&[000005] , [Client].[Client Code].&[000006] , [Client].[Client Code].&[000007] , [Client].[Client Code].&[000008] , [Client].[Client Code].&[000009] , [Client].[Client Code].&[000010] , [Client].[Client Code].&[000011] , [Client].[Client Code].&[000012] ……
Alors que j’aurais souhaité un Except… Excel me génère la totalité des codes présents dans ma liste… n’ayant pas trouvé de documentation sur une limite à ce niveau, nous ne pouvons que postuler qu’Excel limite le nombre maximal de membres envoyés ce qui provoque l’absence de membres…
C’est là qu’est intervenu Greg qui nous a partagé qu’un clic droit sur la colonne Client Code / Paramètre de champ… puis cocher la case « Inclure les nouveaux éléments dans le filtre manuel » forcerait la génération d’un Except ce qui a pour effet de régler mon problème.
Voici maintenant le MDX généré :
SELECT NON EMPTY Hierarchize({DrilldownLevel({[Client].[Client Code].[All]},,,INCLUDE_CALC_MEMBERS)}) DIMENSION PROPERTIES PARENT_UNIQUE_NAME,HIERARCHY_UNIQUE_NAME ON COLUMNS FROM ( SELECT (Intersect( Except({[Client].[Client Code].[Client Code].AllMembers} , {[Client].[Client Code].&[000001]}) , [Client].[Client Code].[Client Code].AllMembers)) ON COLUMNS