Je viens de passer une demie journée à essayer de comprendre ce que je considère comme un bug de SSAS.

Je n’ai pas réussi à résoudre mon problème, mais du moins, j’ai trouvé un contournement.

Voici d’abord le problème :

J’ai une dimension, disons DimClient. Chaque client est lié à 3 groupes, disons DimGroup.

Nous avons donc dans la table DimClient, 3 foreign keys différentes, vers la table DimGroup.

Chaque client a :

  • 1 groupe d’origine (OriginGroupId)
  • 1 groupe précédent (LastGroupId)
  • 1 groupe actuel (ActualGroupId)

Voici une représentation de ma Data Source View dans le designer :

image

Ce que je fais maintenant n’est pas conceptuellement le plus efficace en terme de design de dimensions, mais le principe étant de mettre le focus sur le bug que j’ai rencontré.

Dans ma dimension DimClient, j’ai donc décidé de créer 3 hiérarchies, contenant chacun le groupe adéquate.

  • Une hiérarchie Origin
  • Une hiérarchie Last
  • Une hiérarchie Actual

Voici encore une copie d’écran de ma dimension :

image

Pour que chaque client sache faire le lien sur chaque catégorie, il est aussi nécessaire de créer les relations de mes hiérarchies.

C’est ce que je fais dans l’onglet adéquate, en voici la représentation :

image

Ok à partir de là, je lance le process de ma dimension, pour vérifier les résultats. Et là, c’est le drame !

image

Voici les requêtes qu’il exécute :

image

On remarque tout de suite qu’il y a un ENORME soucis sur la requête Sourire

J’ai essayé toutes les manipulations possibles, en passant par les incantations vaudous, le dénie, la colère et les menaces, rien y fait. Le résultat est faux et archi faux.

 

La solution de contournement

 

Et voir même la solution idéale, beaucoup plus conceptuellement adéquate.

En y regardant de plus prés, j’ai créé des hiérarchies de groupe dans une dimension client. Ce qui est possible mais pas élégant.

Pour envisager quelque chose de plus propre, on peut passer par des dimensions de type “Role Playing” qui ont pour but de se mapper à chaque groupe de mon client.

Tout d’abord je vire les hiérarchies de ma dimension client, et je ne laisse que les clés externes (que je met en visible = false au minimum)

Ensuite, il va donc falloir ajouter 3 dimensions à la structure du cube, chacune d’entre elles étant nommée correctement.

  1. Origin Group
  2. Last Group
  3. Actual Group

 

image

Rajouter ensuite chacune des relations qui lie le Groupe à la table de fait par la référence Client Groupe

image

Voilà, vous avez un cube qui fonctionne, et qui est correctement architecturé.

Il n’en reste pas moins que SSAS ne gère pas bien les multiples clés externes dans une dimension, et que cela reste pour moi un bon vieux Bug  Sourire

Bon cube !