[SSRS] Une Parent Child mise à plat dans plusieurs champs

Une petite note rapide: dans Reporting Services, lorsque l’on veut utiliser une hiérarchie Parent/Enfant, tous les membres sont exposés dans la même colonne, peu importe leur niveau.
Et si vous désirez avoir un champ par niveau? Impossible de CrossJoiner sur une même hiérarchie (C’est interdit par MDX!), et si vous googlisez, on vous dira soit que c’est un soucis de provider et que vous n’avez qu’à utiliser l’OLE DB, soit de créer des membres calculés, soit d’arrêter les P/C voire Reporting Services tout court…
Mais on peut hacker, un peu de la même manière que pour le DrillThrough dans un de mes vieux posts.
La propriété « DbpropMsmdFlattened2 »
Effectivement, ce soucis de colonne est un soucis lié au provider, plus exactement de configuration de la commande AS. Sur un sujet lié lui aussi à RS, Greg Galloway m’a fait tilter dans ce post, en disant que le provider Analysis Services pour RS met les propriétés ReturnCellProperties et DbpropMsmdFlattened2 à true. Son post parle du premier, le deuxième nous intéresse aujourd’hui.
Tout d’abord son assertion est vraie: vous pouvez le constater dans le Profiler sur les events Query Begin.
Quel est l’effet de ces deux propriétés? Dans la doc des propriétés XMLA, il est spécifié que la première demande l’exposition des propriétés de cellules en tant que colonnes – ce dont traite Galloway – et que la seconde « Fournit tous les membres d’une hiérarchie parent-enfant dans une seule colonne de table« .

Bingo?
On pense alors qu’il ne reste plus qu’à rajouter DbPropMsMdFlattened=false à la connection string…. Et bien non car cela ne marche pas: la propriété est insérée dans la commande par RS, donc après établissement de la connexion, et override le choix fait dans la connection string.
La solution? Switcher en mode de requête DMX.
Dans ce cas, ces deux propriétés ne sont pas affectées (on le voit là aussi dans le Profiler, les deux lignes ne sont pas présentes dans l’entête de commande), mais ce pour des raisons que je ne connais pas. On perd le designer mais la requête marche comme on le souhaite, j’ai bien mes niveaux dans des champs différents.
Conclusion
Après est-ce la bonne approche? A vous de juger, effectivement cela ressemble beaucoup à un hack douteux mais dans le cas (qui est le mien) ou on ne fait pas un usage extensif des P/C, si un hack certes douteux mais utilisé rarement évite de recréer et maintenir une data source dédiée ça peut valoir le coup…
A bientôt!

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s