Hiérarchies déséquilibrées
Une hiérarchie déséquilibrée est une hiérarchie définie par l'utilisateur qui comporte un nombre impair de niveaux. Exemples les plus courants : organigramme fonctionnel dans lequel un responsable hiérarchique a à la fois autorité sur des responsables régionaux et sur des non-cadres qui lui sont subordonnés directement, ou hiérarchies géographiques composées du modèle pays-région-ville où certaines villes n'ont pas de province ou d'état parent, comme Washington D.C., la Cité du Vatican ou New Delhi.
Pour la plupart des hiérarchies d'une dimension, chaque niveau comporte le même nombre de membres au-dessus de lui que tout autre membre au même niveau. Cela n'est pas le cas dans une hiérarchie déséquilibrée, où le parent logique d'au moins un membre ne figure pas dans le niveau immédiatement supérieur à ce membre. En pareil cas, la hiérarchie descend à des niveaux différents pour des chemins d'extraction différents. Dans une application cliente, cela peut rendre les chemins d'extraction inutilement compliqués.
Les applications clientes varient dans la manière dont elles gèrent une hiérarchie déséquilibrée. S'il existe des hiérarchies déséquilibrées dans votre modèle, soyez prêt à fournir un léger travail supplémentaire pour obtenir le comportement de rendu que vous attendez.
La première étape consiste à vérifier l'application cliente pour voir comment elle gère le chemin d'extraction. Par exemple, Excel répète les noms parents sous forme d'espaces réservés pour les valeurs manquantes. Pour constater vous-même ce comportement, créez un tableau croisé dynamique avec la dimension de secteur de vente dans le modèle multidimensionnel Adventure Works. Dans un tableau croisé dynamique comprenant le groupe d'attributs, le pays et la région de secteur de vente, vous constaterez que les pays qui ne comportent aucune valeur de région obtiennent un espace réservé, dans ce cas une répétition du parent de niveau supérieur (nom du pays). Ce comportement provient de la propriété de la chaîne de connexion de compatibilité MDX=1 qui est fixe dans Excel. Si le client ne propose pas naturellement les comportements d'exploration que vous attendez, vous pouvez définir des propriétés dans le modèle afin de changer au moins quelques-uns de ces comportements.
Cette rubrique contient les sections suivantes :
Approches relatives à la modification de la navigation d'exploration dans une hiérarchie déséquilibrée
Définir HideMemberIf pour masquer les membres d'une hiérarchie régulière
Définir la compatibilité MDX pour déterminer la manière dont les espaces réservés sont représentés dans les applications clientes
Approches relatives à la modification de la navigation d'exploration dans une hiérarchie déséquilibrée
La présence d'une hiérarchie déséquilibrée pose problème lorsque la navigation d'exploration ne retourne pas les valeurs attendues ou est considérée comme difficile à utiliser. Pour résoudre les problèmes de navigation qui proviennent de hiérarchies déséquilibrées, pensez à utiliser les options suivantes :
Utilisez une hiérarchie régulière, mais définissez la propriété HideMemberIf sur chaque niveau afin de spécifier si un niveau manquant est visualisé par l'utilisateur. Lors de la définition de HideMemberIf, vous devez également définir MDXCompatibility sur la chaîne de connexion afin de remplacer les comportements de navigation par défaut. Les instructions de définition de ces propriétés sont fournies dans cette rubrique.
Créez une hiérarchie parent-enfant qui gère explicitement les membres de niveau. Pour obtenir une illustration de cette technique, consultez Hiérarchie déséquilibrée dans SSAS (article de blog). Pour plus d'informations dans la documentation en ligne, consultez Dimensions parent-enfant. Parmi les inconvénients de la création d'une hiérarchie parent-enfant, sachez que vous ne pouvez en avoir qu'une seule par dimension et que son utilisation s'accompagne généralement d'une baisse des performances lors du calcul d'agrégations pour les membres intermédiaires.
Si votre dimension contient plusieurs hiérarchies déséquilibrées, vous devez recourir à la première approche, en définissant HideMemberIf. Les développeurs BI disposant d'une expérience pratique dans l'utilisation des hiérarchies déséquilibrées vont un peu plus loin en préconisant des changements supplémentaires dans les tables de données physiques et la création de tables distinctes pour chaque niveau. Consultez le blog Martin Mason's the SSAS Financial Cube–Part 1a–Ragged Hierarchies (en anglais) pour en savoir plus sur cette technique.
Définir HideMemberIf pour masquer les membres d'une hiérarchie régulière
Dans la table d'une dimension déséquilibrée, les membres manquants peuvent être représentés de différentes manières. Les espaces réservés des cellules de table peuvent être des valeurs NULL ou des chaînes vides, ou bien la même valeur que leurs parents. La représentation des espaces réservés est déterminée par l'état d'espace réservé de membres enfants, conformément à la propriété HideMemberIf, et par la propriété de chaîne de connexion MDX Compatibility pour l'application cliente.
Pour les applications clientes qui autorisent l'affichage de hiérarchies déséquilibrées, vous pouvez utiliser ces propriétés de façon à masquer logiquement les membres manquants.
Dans SSDT, double-cliquez sur une dimension pour l'ouvrir dans le Concepteur de dimensions. Le premier onglet, Structure de dimension, affiche les hiérarchies d'attribut dans le volet Hiérarchies.
Cliquez avec le bouton droit sur un membre de la hiérarchie et choisissez Propriétés. Définissez HideMemberIf sur l'une des valeurs décrites ci-dessous.
Paramètre de HideMemberIf
Description
Never
Les membres de ce niveau ne sont jamais masqués. Ceci est la valeur par défaut.
OnlyChildWithNoName
Un membre de ce niveau est masqué quand il est le seul enfant de son parent et qu'il a pour nom la valeur NULL ou une chaîne vide.
OnlyChildWithParentName
Un membre de ce niveau est masqué quand il est le seul enfant de son parent et qu'il porte le même nom que son parent.
NoName
Un membre de ce niveau est masqué lorsque son nom est vide.
ParentName
Un membre de ce niveau est masqué quand son nom est identique à celui de son parent.
Définir la compatibilité MDX pour déterminer la manière dont les espaces réservés sont représentés dans les applications clientes
Après avoir défini HideMemberIf sur un niveau hiérarchique, vous devez également définir la propriété MDX Compatibility dans la chaîne de connexion envoyée depuis l'application cliente. Le paramètre MDX Compatibility détermine si HideMemberIf est utilisé.
Paramètre de compatibilité MDX |
Description |
Utilisation |
---|---|---|
1 |
Affichez une valeur d'espace réservé. |
Il s'agit de la valeur par défaut utilisée par Excel, SSDT et SSMS. Elle indique au serveur de retourner les valeurs d'espace réservé lors de l'exploration de niveaux vides dans une hiérarchie déséquilibrée. Si vous cliquez sur la valeur d'espace réservé, vous pouvez continuer à explorer le bas de la hiérarchie pour obtenir les nœuds enfants (feuille). Excel détient la chaîne de connexion utilisée pour la connexion à Analysis Services et définit toujours MDX Compatibility sur 1 pour chaque nouvelle connexion. Ce comportement préserve la compatibilité ascendante. |
2 |
Masquez une valeur d'espace réservé (valeur Null ou dupliquée du niveau parent), mais affichez d'autres niveaux et nœuds avec des valeurs pertinentes. |
MDX Compatibility=2 est généralement considéré comme le paramètre privilégié pour les hiérarchies déséquilibrées. Un rapport Reporting Services et certaines applications clientes tierces peuvent rendre ce paramètre persistant. |