28 Ecrire des requêtes MDX
MDX est un langage de type SQL que vous pouvez utiliser pour émettre des requêtes qui extraient des données d'Essbase. MDX est également utilisé pour définir des formules sur des cubes ASO, interroger des métadonnées, qualifier des noms de membre et délimiter des sous-ensembles de données ou de métadonnées. La meilleure façon d'apprendre MDX est d'écrire des requêtes.
Cette section vous aide à apprendre MDX en écrivant des requêtes sur le cube Sample Basic dans une série d'exercices.
Prérequis pour l'écriture des requêtes MDX
Pour effectuer les exercices, vous aurez besoin des éléments suivants :
-
un éditeur de texte, pour écrire les requêtes MDX.
-
Accès à une instance Essbase avec Sample Basic.
Si vous devez obtenir l'exemple de base, suivez les étapes décrites dans Création d'un exemple de cube pour explorer les propriétés d'outline (il vous suffit d'effectuer l'import et d'ignorer la définition des propriétés d'outline).
-
Client MaxL, pour émettre les requêtes vers Essbase.
Créer un modèle de requête MDX
Découvrez le format de base d'une requête MDX, afin de commencer à utiliser MDX avec Essbase. Comme pour les instructions SQL, les requêtes MDX commencent généralement par SELECT.
Dans cette section, vous allez créer un modèle à utiliser comme base pour le développement de requêtes MDX simples.
La plupart des requêtes peuvent être construites sur la structure grammaticale suivante :
SELECT
{}
ON COLUMNS
FROM Sample.BasicSELECT à la ligne 1 est le mot-clé qui commence le corps principal des instructions MDX.
Les accolades { } à la ligne 2 constituent un espace réservé pour un ensemble. Dans la requête ci-dessus, l'ensemble est vide, mais les accolades restent comme espace réservé.
Exercice 1 : Créer un modèle de requête MDX
Pour créer un modèle de requête :
-
Créez un dossier pour stocker les requêtes échantillon qui peuvent être exécutées sur le cube Sample.Basic.
-
A l'aide d'un éditeur de texte, saisissez le code suivant dans un fichier vide :
SELECT {} ON COLUMNS FROM Sample.Basic -
Enregistrez le fichier sous le nom
qry_blank.txt.
Ensembles et tuples MDX
Ecrivez votre première requête et exécutez-la dans le client MaxL pour extraire certaines données du cube Sample Basic.
Ensembles
Un ensemble MDX peut être vide, être un ensemble de tuples ou un ensemble d'ensembles.
Par exemple, l'ensemble suivant est vide.
{ }Un ensemble doit être placé entre accolades {}, sauf dans les cas où l'ensemble est représenté par une fonction MDX qui renvoie un ensemble (plus d'informations sur les fonctions ultérieurement).
Ce qui suit est un ensemble composé d'un tuple.
{[Cola]}
Dans la requête suivante, {([Cola], [Actual])} est également un ensemble composé d'un tuple, bien que dans ce cas, le tuple ait plusieurs noms de membre.
SELECT
{([Cola], [Actual])}
ON COLUMNS
FROM Sample.Basic{([Cola], [Actual])} est un tuple composé de deux membres (Cola et Actual) de deux dimensions (Product et Scenario).
Règle de dimensionnalité
Lorsqu'un ensemble comporte plusieurs tuples, les membres de chaque tuple doivent représenter les mêmes dimensions Essbase, dans le même ordre. Autrement dit, tous les tuples doivent avoir la même dimensionnalité que les autres.
-
OK : L'ensemble suivant se compose de deux tuples de même dimensionnalité :
{(West, Feb), (East, Mar)} -
Non OK : le jeu suivant enfreint la règle de dimensionnalité, car Feb et Sales proviennent de dimensions différentes :
{(West, Feb), (East, Sales)} -
Non OK : l'ensemble suivant rompt la règle de dimensionnalité, car bien que les deux tuples contiennent les mêmes dimensions, l'ordre des dimensions est inversé dans le deuxième tuple :
{(West, Feb), (Mar, East)}
Tuples et noms de membre
Un uplet est un moyen de faire référence à un membre ou à une combinaison de membres de n'importe quel nombre de dimensions. Par exemple, dans le cube Sample.Basic, tous les tuples suivants sont valides :
Jan(Jan, Sales)([Jan],[Sales],[Cola],[Utah],[Actual])
Les noms de membre peuvent être indiqués de l'une des manières suivantes :
-
En spécifiant le nom réel ou l'alias, par exemple :
-
Cola -
Actual -
COGS -
[100]
Si le nom du membre commence par un nombre ou contient des espaces, il doit être placé entre crochets (par exemple,
[100]ou[New York]). Toutefois, les accolades de nom de membre sont recommandées pour tous les noms de membre, pour plus de clarté et de lisibilité du code.Si le nom de membre commence par une esperluette (&), il doit être placé entre guillemets ; par exemple,
["&xyz"]. En effet, l'esperluette de début est réservée aux variables de substitution (reportez-vous à Variables dans les requêtes MDX). Vous pouvez également l'indiquer en tant queStrToMbr("&100").Pour les membres d'attribut, le nom long (qualifié pour identifier de manière unique le membre) doit être utilisé ; par exemple,
[Ounces_12]au lieu de[12]. -
-
En indiquant le nom de dimension ou l'un des noms de membre ancêtre comme préfixe du nom de membre (par exemple,
[Product].[100-10]et[Diet].[100-10]). Cet exercice est recommandé pour tous les noms de membre, car il élimine les ambiguïtés et permet de référencer avec précision les membres partagés. Voir : "Membres qualifiés en différenciant ancêtre" dans la rubrique Noms de membre en double dans les profils.Remarques :
N'utilisez pas plusieurs ancêtres dans la qualification de nom de membre. Essbase renvoie une erreur si plusieurs ancêtres sont inclus. Par exemple,
[Market].[New York]et[East].[New York]sont des noms valides pour New York. Cependant,[Market].[East].[New York]renvoie une erreur. -
En spécifiant le nom d'un membre calculé défini dans la section WITH.
Exercice 2 : Exécuter la première requête
Rappelons que les accolades {} à la ligne 2 de votre modèle de requête sont un espace réservé pour un ensemble. Dans cet exercice, nous allons ajouter un ensemble à la requête et l'exécuter.
Pour exécuter la requête, vous devez :
-
Ouvrez
qry_blank.txt, modèle de requête que vous avez créé à partir de Créer un modèle de requête MDX. -
Comme un ensemble peut être aussi simple qu'un tuple, ajoutez le tuple entre accolades
{ }qui contient l'ensemble.Saisissez
[Jan]entre accolades{ }à la ligne 2 :SELECT {[Jan]} ON COLUMNS FROM Sample.Basic -
Enregistrez la requête sous le nom
qry_first.txt. -
Vérifiez qu'Essbase est en cours d'exécution.
-
Démarrez le client MaxL et connectez-vous avec un nom d'utilisateur et un mot de passe valides. Exemple :
login admin1 my_Pa55w0rD on "https://myserver.example.com:9001/essbase/agent"; -
Copiez et collez l'intégralité de la requête SELECT dans le client MaxL, mais n'appuyez pas encore sur Entrée.
-
Entrez un point-virgule à la fin, n'importe où après Basic, mais avant d'appuyer sur Entrée. (Le point-virgule n'est pas une exigence MDX, mais requis par le client MaxL pour indiquer la fin d'une instruction).
-
Appuyez sur Entrée pour envoyer la requête à Essbase.
Les résultats doivent être similaires aux suivants :
Jan 8024
Présentation de requête MDX avec axes et spécification de cube
Un axe MDX est une instruction qui met en forme la présentation de grille des résultats de requête à partir d'un cube Essbase. ON COLUMNS et ON ROWS sont des mots-clés d'axe qui décrivent où les résultats doivent apparaître. Une spécification de cube inclut le mot-clé FROM et indique à Essbase le cube à interroger.
Axe MDX
Les axes s'adaptent aux requêtes MDX après la sélection :
SELECT <axis> [, <axis>...]
FROM <database> Dans la requête suivante, la spécification d'axe est {Jan} ON COLUMNS :
SELECT
{Jan} ON COLUMNS
FROM Sample.BasicAu moins un axe doit être spécifié dans une requête MDX.
Jusqu'à 64 axes peuvent être indiqués, en commençant par AXIS(0) et en continuant avec AXIS(1)... AXE(63). L'utilisation de plus de trois axes est rare. L'ordre des axes n'est pas important. Toutefois, lorsqu'un ensemble d'axes 0 à n est spécifié, aucun axe compris entre 0 et n ne doit être ignoré. En outre, une dimension ne peut pas apparaître sur plusieurs axes.
Les cinq premiers axes ont des alias de mot-clé, comme indiqué dans le tableau suivant :
Tableau 28-1 Alias de mot-clé Axes
| Alias de mot-clé Axes | Axes |
|---|---|
|
SUR LES COLONNES |
Peut être utilisé à la place d'AXIS(0) |
|
SUR LES LIGNES |
Peut remplacer AXIS(1) |
|
SUR LES PAGES |
Peut remplacer AXIS(2) |
|
SUR LES CHAPITRES |
Peut remplacer AXIS(3) |
|
SUR LES SECTIONS |
Peut remplacer AXIS(4) |
Spécification du cube MDX
Une spécification de cube est la partie de la requête qui détermine quelle base de données Essbase est interrogée. La spécification de cube s'intègre dans une requête MDX comme suit :
SELECT <axis> [, <axis>...]
FROM <cube> La section <cube> suit le mot-clé FROM et doit être composée d'identificateurs délimités ou non qui spécifient d'abord un nom d'application, puis un nom de base de données. Par exemple, les spécifications suivantes sont valides :
-
FROM Sample.Basic -
FROM [Sample.Basic] -
FROM [Sample].[Basic] -
FROM'Sample'.'Basic'
Exercice 3 : Exécuter une requête à deux axes
Pour exécuter une requête à deux axes :
-
Ouvrez
qry_blank.txt, modèle de requête que vous avez créé dans Créer un modèle de requête MDX. -
Ajoutez une virgule après
ON COLUMNS, puis ajoutez un espace réservé pour un deuxième axe en ajoutantON ROWS:SELECT {} ON COLUMNS, {} ON ROWS FROM Sample.Basic -
Enregistrez le nouveau modèle de requête sous le nom
qry_blank_2ax.txt. -
En tant que spécification définie pour l'axe de colonne, entrez les membres Product 100-10 et 100-20. Exemple :
SELECT {[100-10],[100-20]} ON COLUMNS, {} ON ROWS FROM Sample.BasicEtant donné que ces noms de membre contiennent des caractères spéciaux, vous devez utiliser des crochets. La convention utilisée ici, pour placer tous les noms de membre entre crochets même s'ils ne contiennent pas de caractères spéciaux, est recommandée.
-
En tant que spécification définie pour l'axe de ligne, entrez les membres Year Qtr1 à Qtr4.
SELECT {[100-10],[100-20]} ON COLUMNS, {[Qtr1],[Qtr2],[Qtr3],[Qtr4]} ON ROWS FROM Sample.Basic -
Enregistrez la requête sous le nom
qry_2ax.txt. -
Collez la requête dans le client MaxL et exécutez-la, comme décrit dans le premier exercice (dans la section MDX Sets and Tuples).
Les résultats de l'interrogation doivent se présenter comme suit :
Tableau 28-2 Résultats : Exécution d'une requête à deux axes
| 100-10 | 20/100 | |
|---|---|---|
|
Qtr1 |
5 096 |
1 359 |
|
Trim 2 |
5 892 |
1 534 |
|
Trimestre3 |
6 583 |
1 528 |
|
Trim4 |
5 206 |
1 287 |
Exercice 4 : Interroger plusieurs dimensions sur un même axe
Pour interroger plusieurs dimensions sur un même axe :
-
Ouvrez
qry_blank_2ax.txt, le modèle de requête que vous avez créé dans l'exercice précédent. -
Sur l'axe des colonnes, spécifiez deux tuples, chacun étant une combinaison de membres plutôt qu'un seul membre. Placez chaque tuple entre parenthèses car plusieurs membres sont représentés dans chaque tuple.
SELECT {([100-10],[East]), ([100-20],[East])} ON COLUMNS, {} ON ROWS FROM Sample.Basic -
Sur l'axe des lignes, indiquez quatre tuples à deux membres, imbriqués chaque trimestre avec profit :
SELECT {([100-10],[East]), ([100-20],[East])} ON COLUMNS, { ([Qtr1],[Profit]), ([Qtr2],[Profit]), ([Qtr3],[Profit]), ([Qtr4],[Profit]) } ON ROWS FROM Sample.Basic -
Enregistrez la requête sous le nom
qry_1ax.txt. -
Collez la requête dans le client MaxL et exécutez-la, comme décrit dans le premier exercice (dans la section MDX Sets and Tuples).
Les résultats doivent être similaires aux suivants :
Tableau 28-3 Résultats : Interrogation de plusieurs dimensions sur un seul axe


100-10 20/100 

East
East
Qtr1
Profit
2 461
212
Trim 2
Profit
2 490
303
Trimestre3
Profit
3 298
312
Trim4
Profit
2 430
287
Utiliser les fonctions MDX pour créer des ensembles
Apprenez à utiliser les fonctions MemberRange et CrossJoin en effectuant les exercices.
Cette introduction aux fonctions MDX se concentre sur quelques fonctions qui génèrent des ensembles. Plutôt que d'entrer manuellement des ensembles membre par membre ou tuple par tuple dans une requête MDX, vous pouvez remplacer ces énumérations par une expression de fonction simple. Les fonctions MDX peuvent renvoyer des jeux, ainsi que d'autres valeurs.
Par exemple, Children est une fonction définie. Elle renvoie l'ensemble des membres enfant du membre d'entrée. Par conséquent, Children(Qtr1) renvoie {Jan, Feb, Mar}.
Les exercices qui suivent peuvent vous aider à apprendre à utiliser les fonctions MDX dans des requêtes simples. Une référence complète des fonctions MDX prises en charge par Essbase est répertoriée dans la liste des fonctions MDX.
Exercice 5 : Utiliser la fonction MemberRange
La fonction MDX de MemberRange renvoie une plage de membres incluant et entre deux membres spécifiés de la même génération. Sa syntaxe est la suivante :
MemberRange (<member1>, <member2>, [,<layertype>])où le premier argument que vous fournissez est le membre qui commence la plage, et le deuxième argument est le membre qui termine la plage. L'argument layertype est facultatif.
Remarques :
Une autre syntaxe pour MemberRange consiste à utiliser le signe deux-points entre les deux membres, au lieu d'utiliser le nom de fonction : member1 : member2.
Pour utiliser la fonction MemberRange :
-
Ouvrez
qry_blank.txt, modèle de requête que vous avez créé dans Créer un modèle de requête MDX. -
Supprimez les accolades
{}, qui ne sont pas nécessaires lorsque vous utilisez une fonction pour renvoyer l'ensemble. -
Utilisez l'opérateur deux-points pour sélectionner une plage de membres de Qtr1 à Qtr4 :
SELECT [Qtr1]:[Qtr4] ON COLUMNS FROM Sample.Basic -
Collez la requête dans le client MaxL et exécutez-la, comme décrit dans le premier exercice (dans la section MDX Sets and Tuples).
Les valeurs Qtr1, Qtr2, Qtr3 et Qtr4 sont renvoyées.
-
Utilisez la fonction MemberRange pour sélectionner la même plage de membres, Qtr1 à Qtr4.
SELECT MemberRange([Qtr1],[Qtr4]) ON COLUMNS FROM Sample.Basic -
Collez la requête dans le client MaxL et exécutez-la.
-
Enregistrez la requête sous le nom
gry_member_range_func.txt.
Exercice 6 : Utiliser la fonction CrossJoin
La fonction CrossJoin renvoie le produit croisé de deux ensembles provenant de dimensions Essbase différentes. Sa syntaxe est la suivante :
CrossJoin(set,set)Cette fonction prend deux ensembles de dimensions différentes en entrée, et crée un ensemble qui est un produit croisé de ceux-ci. Cela est utile pour créer des rapports symétriques.
Pour utiliser la fonction CrossJoin :
-
Ouvrez
qry_blank.txt, modèle de requête que vous avez créé dans Créer un modèle de requête MDX. -
Remplacez les accolades
{}de l'axe des colonnes parCrossJoin().SELECT CrossJoin () ON COLUMNS, {} ON ROWS FROM Sample.Basic -
Ajoutez deux paires d'accolades séparées par des virgules en tant qu'espaces réservés pour les deux arguments que vous fournirez à la fonction CrossJoin :
SELECT CrossJoin ({}, {}) ON COLUMNS, {} ON ROWS FROM Sample.Basic -
Dans le premier ensemble, indiquez le membre Product
[100-10]. Dans le second ensemble, indiquez les membres du marché[East],[West],[South]et[Central].SELECT CrossJoin ({[100-10]}, {[East],[West],[South],[Central]}) ON COLUMNS, {} ON ROWS FROM Sample.Basic -
Sur l'axe de ligne, utilisez CrossJoin pour croiser un ensemble de membres Measures avec un ensemble contenant
Qtr1:SELECT CrossJoin ({[100-10]}, {[East],[West],[South],[Central]}) ON COLUMNS, CrossJoin ( {[Sales],[COGS],[Margin %],[Profit %]}, {[Qtr1]} ) ON ROWS FROM Sample.Basic -
Enregistrez la requête sous le nom
qry_crossjoin_func.txt. -
Collez la requête dans le client MaxL et exécutez-la.
Lorsque vous testez l'utilisation de CrossJoin, notez que l'ordre des arguments affecte l'ordre des tuples dans la sortie.
Les résultats de la requête sont présentés ci-dessous :
Tableau 28-4 Résultats : Utilisation de la fonction CrossJoin
| 100-10 | 100-10 | 100-10 | 100-10 | ||
|---|---|---|---|---|---|
|
East |
Région de l'Ouest |
Sud |
Centre |
||
|
Sales |
Qtr1 |
5 731 |
3 493 |
2 296 |
3 425 |
|
COGS |
Qtr1 |
1 783 |
1 428 |
1 010 |
1 460 |
|
% de marge |
Qtr1 |
66,803 |
59,118 |
56,01 |
57,372 |
|
% profit |
Qtr1 |
45,82 |
29,974 |
32,448 |
24,613 |
Remarques :
Envisagez d'utiliser CrossJoinAttribute si les jeux d'entrées sont une dimension de base et sa dimension d'attribut.
Exercice 7 - Utilisation de la fonction children
La fonction Children renvoie un ensemble de tous les membres enfant du membre donné. Utilisez la syntaxe suivante :
Children (member)Remarques :
Une autre syntaxe pour les enfants consiste à l'utiliser comme opérateur sur le membre d'entrée, comme suit : member.Children. Nous allons utiliser la syntaxe de l'opérateur dans cet exercice.
Pour utiliser la fonction Enfants pour introduire un raccourci dans la spécification du premier axe :
-
Ouvrez
qry_crossjoin_func.txt, la requête que vous avez créée dans l'exercice précédent. -
Dans le deuxième ensemble de la spécification d'axe de colonne, remplacez
[East],[West],[South],[Central]par[Market].Children.SELECT CrossJoin ({[100-10]}, {[Market].Children}) ON COLUMNS, CrossJoin ( {[Sales],[COGS],[Margin %],[Profit %]}, {[Qtr1]} ) ON ROWS FROM Sample.Basic -
Enregistrez la requête sous le nom
gry_children_func.txt. -
Collez la requête dans le client MaxL et exécutez-la.
Vous devriez voir les mêmes résultats que ceux renvoyés pour l'exercice CrossJoin précédent.
Niveaux de référence et générations avec MDX
Certaines fonctions MDX effectuent des opérations ensemblistes basées sur un argument de couche d'entrée. La couche représente une génération ou un niveau d'une dimension Essbase. Apprenez à référencer un ensemble à l'aide de la fonction Membres.
Dans MDX, le concept de couche fait référence aux générations et aux niveaux d'une hiérarchie Essbase.
Dans Essbase, les numéros de génération commencent par 1 dans le nom de la dimension. Les numéros de génération supérieurs sont ceux qui sont les plus proches des membres feuille d'une hiérarchie.
Les numéros de niveau commencent par 0 dans la partie la plus folle de la hiérarchie, et le numéro de niveau le plus élevé est un nom de dimension.
Vous pouvez spécifier un argument de couche de l'une des manières suivantes :
-
Nom de génération ou de niveau ; par exemple,
StatesouRegions. -
Nom de la dimension et nom de la génération ou du niveau (par exemple,
Market.Regionset[Market].[States]). -
Les niveaux fonctionnent avec une dimension et un numéro de niveau en entrée. Par exemple,
[Year].Levels(0). -
Fonction Level avec un membre en entrée. Par exemple,
[Qtr1].Levelrenvoie le niveau des trimestres dans Sample.Basic, qui est le niveau 1 de la dimension Market. -
Les générations fonctionnent avec une dimension et un numéro de génération en entrée. Par exemple,
[Year].Generations(3). -
Fonction de génération avec un membre en entrée. Par exemple,
[Qtr1].Generationrenvoie la génération des trimestres dans Sample.Basic, qui est la génération 2 de la dimension Market.
Remarques :
Dans la base de données Sample.Basic, Qtr1 et Qtr4 se trouvent dans la même couche. Cela signifie que Qtr1 et Qtr4 sont également dans la même génération. Cependant, dans une base de données différente avec une hiérarchie irrégulière, Qtr1 et Qtr4 peuvent ne pas nécessairement être dans le même niveau, bien qu'ils soient dans la même génération. Par exemple, si la hiérarchie de Qtr1 descend en semaines et que la hiérarchie de Qtr4 s'arrête en mois, Qtr1 est un niveau supérieur à Qtr4, mais ils sont toujours dans la même couche.
Exercice 8 : Utiliser la fonction Members
Utilisez la fonction Members pour renvoyer tous les membres d'une génération ou d'un niveau donné. Lorsqu'elle est utilisée avec un argument de couche, la syntaxe est la suivante :
Members (layer)
où l'argument layer indique la génération ou le niveau de membres à renvoyer.
Remarques :
Une autre syntaxe pour les membres est layer.Members.
Pour utiliser la fonction Members :
-
Ouvrez
qry_blank.txt, modèle de requête que vous avez créé dans Créer un modèle de requête MDX. -
Supprimez les accolades
{}, qui ne sont pas nécessaires lorsque vous utilisez une fonction pour renvoyer un ensemble. -
Utilisez les fonctions Membres et Niveaux pour sélectionner tous les membres de niveau 0 dans la dimension Marché de Sample.Basic :
SELECT Members(Market.levels(0)) ON COLUMNS FROM Sample.Basic -
Enregistrez la requête sous le nom
qry_members_func.txt. -
Collez la requête dans le client MaxL et exécutez-la, comme décrit dans le premier exercice (dans la section MDX Sets and Tuples).
Résultats : tous les états de la dimension Marché sont renvoyés.
Utiliser un axe de trancheur pour définir le point de vue de requête MDX
Un axe slicer est un moyen de limiter une requête MDX pour ne prendre en compte qu'une zone spécifique du cube Essbase. Apprenez à utiliser la trancheuse dans la clause WHERE en essayant l'exemple d'exercice.
La tranche, si elle est utilisée, doit se trouver dans la section WHERE d'une requête MDX. En outre, la section WHERE doit être le dernier composant de la requête, suivant la spécification du cube (la section FROM) :
SELECT {set}
ON axes
FROM cube
WHERE slicerUtilisez l'axe de tranche pour définir le contexte de la requête. Il s'agit généralement du contexte par défaut pour tous les autres axes.
Pour sélectionner uniquement les ventes réelles dans le cube Sample.Basic, à l'exception des ventes budgétées, la clause WHERE peut se présenter comme suit :
WHERE ([Actual], [Sales])Etant donné que (Actual, Sales) est spécifié dans l'axe de tranche, vous n'avez pas besoin de les inclure dans les spécifications ON AXIS(n) définies.
Remarques :
La même dimension ne peut pas apparaître sur d'autres axes et sur l'axe de la tranche. Pour filtrer un axe à l'aide de critères de sa propre dimension, vous pouvez utiliser une sous-sélection.
Exercice 9 : Limiter les résultats avec un axe de trancheur
Pour utiliser l'axe de la tranche pour limiter les résultats :
-
Ouvrez
gry_crossjoin_func.txt, la requête que vous avez créée dans l'exercice 6 de Utilisation des fonctions MDX pour créer des ensembles. -
Collez la requête dans le client MaxL et exécutez-la, comme décrit dans le premier exercice (dans la section MDX Sets and Tuples).
Notez les résultats dans l'une des cellules de données. Par exemple, notez que le premier tuple,
([Cola],[East],[Sales],[Qtr1]), a une valeur de 5731. -
Ajoutez un axe de tranche pour limiter les données renvoyées aux valeurs budgétées uniquement.
SELECT CrossJoin ({[100-10]}, {[East],[West],[South],[Central]}) ON COLUMNS, CrossJoin ( {[Sales],[COGS],[Margin %],[Profit %]}, {[Qtr1]} ) ON ROWS FROM Sample.Basic WHERE (Budget) -
Collez la requête dans le client MaxL et exécutez-la.
-
La valeur du tuple
([Cola],[East],[Sales],[Qtr1])est désormais 5020. -
Enregistrez la requête sous le nom
qry_slicer_axis.txt.
Fonctions de relation MDX courantes
Les fonctions de relation MDX renvoient des ensembles ou des membres en fonction des relations hiérarchiques des membres dans l'outline du cube Essbase.
Les fonctions de relation MDX suivantes renvoient des jeux.
Tableau 28-5 Liste des fonctions de relation MDX renvoyant des jeux
| Fonction de relation | Description |
|---|---|
|
Renvoie les enfants du membre d'entrée. |
|
|
Renvoie les semblables du membre d'entrée. |
|
|
Renvoie les descendants d'un membre, avec des options variables. |
Les fonctions de relation MDX suivantes renvoient un seul membre plutôt qu'un ensemble :
Tableau 28-6 Liste des fonctions de relation MDX renvoyant un seul membre
| Fonction de relation | Description |
|---|---|
|
Renvoie un ancêtre au niveau de la couche indiquée. |
|
|
Renvoie un membre enfant à la même position qu'un membre d'un autre ancêtre. |
|
|
Renvoie le parent du membre d'entrée. |
|
|
Renvoie le premier enfant du membre d'entrée. |
|
|
Renvoie le dernier enfant du membre d'entrée. |
|
|
Renvoie le premier enfant du parent du membre d'entrée. |
|
|
Renvoie le dernier enfant du parent du membre d'entrée. |
Exercice 10 : Essayez quelques exemples de fonctions relationnelles à partir de la documentation
Pour savoir comment fonctionnent les fonctions relationnelles :
-
Cliquez sur un lien vers une fonction dans l'une des tables ci-dessus ou cliquez sur Enfants.
-
Lisez l'exemple et copiez la requête SELECT dans le presse-papiers.
-
Collez la requête dans le client MaxL, ajoutez un point-virgule fermant et exécutez la requête, comme décrit dans le premier exercice (dans la section MDX Sets and Tuples).
Fonctions MDX pour les opérations définies
Essayez les exercices pour faire la différence entre les fonctions Intersect et Union.
Les fonctions de jeu suivantes fonctionnent sur des jeux d'entrées sans dériver d'informations supplémentaires à partir d'un cube :
Tableau 28-7 Liste des fonctions d'ensemble pur
| Fonction Pure Set | Description |
|---|---|
|
Renvoie une section transversale de deux ensembles de différentes dimensions. |
|
|
Supprime les tuples en double d'un ensemble. |
|
|
Renvoie un sous-ensemble contenant les différences entre deux ensembles. |
|
|
Une fonction itérative. Pour chaque tuple dans set1, renvoie set2. |
|
|
Renvoie les premiers membres ou tuples n présents dans un ensemble. |
|
|
Renvoie l'intersection de deux ensembles d'entrée. |
|
|
Renvoie un sous-ensemble d'un ensemble, dans lequel le sous-ensemble est une plage de tuples indiquée numériquement. |
|
|
Renvoie les derniers membres ou tuples n présents dans un ensemble. |
|
|
Renvoie l'union de deux ensembles d'entrée. |
Exercice 11 - Utilisation de la fonction Intersect
La fonction MDX Intersect renvoie le croisement de deux ensembles d'entrées, en conservant éventuellement les doublons. Utilisez-le pour comparer des ensembles en recherchant les tuples présents dans les deux ensembles.
Voici la syntaxe à suivre :
Intersect (set, set [,ALL])-
Ouvrez
qry_blank.txt, modèle de requête que vous avez créé dans Créer un modèle de requête MDX. -
Supprimez les accolades vides
{}de l'axe et remplacez-les parIntersect(). Laissez de la place à l'intérieur des accolades pour ajouter plus de code. Exemple :SELECT Intersect ( ) ON COLUMNS FROM Sample.Basic -
Ajoutez deux paires d'accolades séparées par des virgules à utiliser comme espaces réservés pour les deux arguments définis que vous fournirez à la fonction Intersect. Exemple :
SELECT Intersect ( { }, { } ) ON COLUMNS FROM Sample.Basic -
Indiquez les enfants de East comme premier argument set. Exemple :
SELECT Intersect ( { [East].children }, { } ) ON COLUMNS FROM Sample.Basic -
Pour le deuxième argument set, spécifiez tous les membres de la dimension Market qui ont un UDA de "Major Market". Exemple :
SELECT Intersect ( { [East].children }, { UDA([Market], "Major Market") } ) ON COLUMNS FROM Sample.Basic -
Collez la requête dans le client MaxL et exécutez-la, comme décrit dans le premier exercice (dans la section MDX Sets and Tuples).
Tous les enfants East dont l'attribut défini par l'utilisateur est Major Market sont renvoyés. Exemple :
New York Massachusetts Florida 8202 6172 5029 -
Enregistrez la requête sous le nom
qry_intersect_func.txt.
Exercice 12 - Utilisation de la fonction Union
La fonction MDX Union joint deux ensembles d'entrées, en conservant éventuellement les doublons. Utilisez-le pour combiner deux ensembles en un seul ensemble.
Voici la syntaxe à suivre :
Union (set, set [,ALL])-
Ouvrez
qry_intersect_func.txt, la requête que vous avez créée dans l'exercice précédent. -
Remplacez Intersect par Union.
-
Enregistrez la requête sous le nom
qry_union_func.txt. -
Collez la requête dans le client MaxL et exécutez-la.
Alors qu'Intersect a retourné un ensemble contenant uniquement les enfants de l'Est qui ont un UDA de Major Market, Union retourne un ensemble plus grand. Il comprend tous les enfants d'Est, ET tous les membres du marché qui ont un UDA de marché majeur.
(New York) (Massachusetts) (Florida) (Connecticut) (New Hampshire) (East) (California) (Texas) (Central) (Illinois) (Ohio) (Colorado) +---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+--------------- 8202 6712 5029 3093 1125 24161 12964 6425 38262 12577 4384 7227
Ensembles et membres réutilisables : MDX AVEC section
La définition de membres et d'ensembles dans la section WITH de la requête MDX vous aide à filtrer les données sans affecter le cube. Un membre calculé est un membre logique qui n'existe que dans l'interrogation. Un ensemble nommé est un ensemble logique qui n'existe que dans l'interrogation. Essayez un exemple d'exercice.
Les membres calculés et les ensembles nommés sont des entités logiques de la requête qui peuvent être utilisées plusieurs fois au cours de sa durée de vie. Les membres calculés et les ensembles nommés peuvent gagner du temps dans les lignes de code écrites ainsi que dans le temps d'exécution. La section WITH facultative au début d'une requête MDX permet de définir les membres calculés et/ou les ensembles nommés.
L'interrogation suivante utilise un membre calculé :
WITH
MEMBER [Measures].[Max Qtr2 Sales] AS
'Max (
{[Year].[Qtr2]},
[Measures].[Sales]
)'
SELECT
{ [Measures].[Max Qtr2 Sales] } on columns,
{ [Product].children } on rows
FROM Sample.BasicL'interrogation suivante utilise un ensemble nommé :
WITH SET [NewSet]
AS 'CrossJoin([Product].Children, [Market].Children)'
SELECT
Filter([NewSet], NOT IsEmpty([NewSet].CurrentTuple))
ON COLUMNS
FROM Sample.Basic
WHERE
{[Sales]}Membres calculés
Un membre calculé est un membre hypothétique qui existe pendant toute la durée de l'exécution de l'interrogation. Les membres calculés permettent une analyse complexe sans qu'il soit nécessaire d'ajouter des membres physiques à l'outline du cube. Les membres calculés stockent les résultats des calculs effectués sur les membres physiques.
Utilisez les instructions suivantes pour les noms de membre calculés :
-
Associez le membre calculé à une dimension. Par exemple, pour associer le membre MyCalc à la dimension Mesures, nommez-le
[Measures].[MyCalc]. -
N'utilisez pas de noms de membre réels pour nommer les membres calculés. Par exemple, ne nommez pas un membre calculé
[Measures].[Sales], car Sales existe déjà dans la dimension Mesures.
Il est recommandé de définir l'ordre de résolution pour chaque membre calculé lorsque vous utilisez plusieurs membres calculés pour créer des ratios ou des totaux personnalisés.
Ensembles nommés
Vous définissez des ensembles nommés à l'aide des mots-clés WITH SET, avant la partie SELECT de l'interrogation. Cela est utile car vous pouvez référencer l'ensemble par son nom lors de la création de la partie SELECT de l'interrogation.
Par exemple, l'ensemble nommé Best5Prods identifie un ensemble des cinq produits les plus vendus en décembre :
WITH
SET [Best5Prods]
AS
'Topcount (
[Product].members,
5,
([Measures].[Sales], [Scenario].[Actual], [Year].[Dec])
)'
SELECT [Best5Prods] ON AXIS(0),
{[Year].[Dec]} ON AXIS(1)
FROM Sample.BasicExercice 13 : Créer un membre calculé
Cet exercice utilise la fonction Max, une fonction MDX commune pour les calculs. Elle renvoie le nombre maximal de valeurs trouvées dans les tuples d'un ensemble.
Voici la syntaxe à suivre :
Max (set, numeric_value)-
Ouvrez
qry_blank_2ax.txt, le modèle de requête que vous avez créé dans l'exercice 3 de Disposition de requête MDX avec axes et spécification de cube.SELECT {} ON COLUMNS, {} ON ROWS FROM Sample.Basic -
Dans l'ensemble d'axes de ligne, indiquez les enfants de Product. Exemple :
SELECT {} ON COLUMNS, {[Product].children} ON ROWS FROM Sample.Basic -
Au début de l'interrogation, ajoutez un espace réservé pour la spécification de membre calculée. Exemple :
WITH MEMBER [].[] AS '' SELECT {} ON COLUMNS, {[Product].children} ON ROWS FROM Sample.Basic -
Pour associer le membre calculé à la dimension Mesures et lui attribuer le nom Max Qtr2 Sales, ajoutez ces informations à la spécification de membre calculé. Exemple :
WITH MEMBER [Measures].[Max Qtr2 Sales] AS '' SELECT {} ON COLUMNS, {[Product].children} ON ROWS FROM Sample.Basic -
Après le mot-clé AS et entre apostrophes, définissez la logique du membre calculé nommé Max Qtr2 Sales.
Utilisez la fonction Max avec l'ensemble à évaluer (Qtr2) comme premier argument et la mesure à évaluer (Sales) comme deuxième argument. Exemple :
WITH MEMBER [Measures].[Max Qtr2 Sales] AS ' Max ( {[Year].[Qtr2]}, [Measures].[Sales] )' SELECT {} ON COLUMNS, {[Product].children} ON ROWS FROM Sample.Basic -
Le membre calculé Max Qtr2 Sales est défini dans la section WITH. Pour l'utiliser dans une requête, référencez-la sur l'un des axes de la partie SELECT de la requête. Exemple :
WITH MEMBER [Measures].[Max Qtr2 Sales] AS ' Max ( {[Year].[Qtr2]}, [Measures].[Sales] )' SELECT {[Measures].[Max Qtr2 Sales]} ON COLUMNS, {[Product].children} ON ROWS FROM Sample.Basic -
Enregistrez la requête sous le nom
gry_calc_member.txt. -
Collez la requête dans le client MaxL et exécutez-la, comme décrit dans le premier exercice (dans la section MDX Sets and Tuples).
Les résultats de la requête sont présentés ci-dessous :
Tableau 28-8 Résultats : Créer un membre calculé

Ventes maximum du trimestre 2 100
27 187
200
27 401
300
25 736
400
21 355
Régime alimentaire
26 787
Remarques :
De nombreux autres exemples sont disponibles dans la documentation de référence MDX. Voir MDX With Section.
Fonctions itératives MDX
Les fonctions MDX itératives effectuent une boucle sur des ensembles de données dans le cube Essbase, en exécutant les conditions de recherche que vous indiquez pour personnaliser les résultats. Voir un exemple qui filtre les données en fonction d'un test booléen.
Tableau 28-9 Liste des fonctions itératives de MDX
| Fonction | Description |
|---|---|
|
Renvoie le sous-ensemble de tuples dans set pour lesquels la valeur de la condition de recherche est TRUE. |
|
|
Effectue un test conditionnel et renvoie une expression numérique appropriée ou définie selon que le résultat du test est TRUE ou FALSE. |
|
|
Effectue des tests conditionnels et renvoie les résultats que vous indiquez. |
|
|
Pour chaque tuple dans set1, renvoie set2. |
Exemple de fonction de filtre
La requête suivante utilise la fonction Filtre MDX pour renvoyer tous les membres de la dimension Marché pour lesquels l'expression IsChild([Market].CurrentMember,[East]) renvoie TRUE. La requête renvoie tous les enfants de East.
SELECT
Filter([Market].Members,
IsChild([Market].CurrentMember,[East])
)
ON COLUMNS
FROM Sample.BasicLa fonction Filter dans MDX est comparable à la commande RESTRICT dans Report Writer.
Gérer les données manquantes avec MDX
Lorsque vous interrogez un cube Essbase à l'aide de MDX, vous pouvez utiliser les mots-clés NON EMPTY sur les axes pour supprimer les cellules ne contenant aucune valeur. Les fonctions MDX qui gèrent les valeurs manquantes incluent Moyenne, CoalesceEmpty, IsEmpty, NonEmptyCount et NonEmptySubset. Les propriétés NONEMPTYMEMBER et NONEMPTYTUPLE permettent de filtrer les valeurs vides des jeux de données volumineux.
L'inclusion des mots-clés facultatifs NON EMPTY avant la spécification définie dans un axe entraîne la suppression des tranches de cet axe qui contiennent entièrement des valeurs #MISSING.
Voici la syntaxe de spécification d'axe avec NON EMPTY :
<axis_specification> ::=
[NON EMPTY] <set> ON
COLUMNS | ROWS | PAGES | CHAPTERS |
SECTIONS | AXIS (<unsigned_integer>)Pour un tuple donné sur un axe (tel que (Qtr1, Actual)), une tranche est constituée des cellules issues de la combinaison de ce tuple avec tous les tuples de tous les autres axes. Si toutes ces valeurs de cellule sont #MISSING, le mot clé NON EMPTY entraîne l'élimination du tuple.
Par exemple, si une seule valeur d'une ligne n'est pas vide, la ligne entière est renvoyée. Si vous incluez NON EMPTY au début de la spécification de l'axe de ligne, la tranche de ligne suivante sera éliminée de l'ensemble renvoyé par une requête :

En plus de supprimer les valeurs manquantes avec NON EMPTY, vous pouvez utiliser les fonctions MDX suivantes pour gérer les résultats #MISSING :
-
CoalesceEmpty, qui recherche les expressions de valeur numérique pour les valeurs non #MISSING
-
IsEmpty, qui renvoie TRUE si la valeur d'une expression de valeurs numériques d'entrée est #MISSING.
-
Moyenne, qui omet les valeurs manquantes dans les moyennes, sauf si vous utilisez l'indicateur facultatif Inclure vide
La fonction MDX NonEmptyCount renvoie le nombre de tuples dans un ensemble qui correspondent à des valeurs non manquantes. Chaque tuple est évalué et inclus dans le nombre renvoyé par cette fonction. Si l'expression de valeur numérique est spécifiée, elle est évaluée dans le contexte de chaque tuple et le nombre de valeurs non manquantes est renvoyé.
Sur les cubes en mode "aggregate storage" uniquement, la fonction NonEmptyCount est optimisée afin que le calcul du nombre distinct pour toutes les cellules puisse être effectué en analysant le cube une seule fois. Sans cette optimisation, la base de données est analysée autant de fois que le nombre de cellules correspondant au nombre distinct. L'optimisation NonEmptyCount est déclenchée lorsqu'une formule de membre d'outline présente la syntaxe suivante :
NONEMPTYCOUNT(set, measure, exclude_missing)Le paramètre exclude_missing prend en charge l'optimisation NonEmptyCount sur les bases de données agrégées en améliorant les performances d'une requête qui interroge les mesures qui effectuent un calcul de nombre distinct.
Les propriétés d'optimisation NONEMPTYMEMBER et NONEMPTYTUPLE permettent à MDX d'interroger des ensembles volumineux de membres ou de tuples tout en ignorant l'exécution de la formule sur des valeurs non contributives qui contiennent uniquement des données #MISSING.
-
Utilisez une seule clause de propriété NONEMPTYMEMBER au début d'un membre calculé ou d'une expression de formule pour indiquer à Essbase que la valeur de la formule ou du membre calculé est vide lorsque l'un des membres spécifiés dans nonempty_member_list est vide.
-
Utilisez une seule clause de propriété NONEMPTYTUPLE au début d'un membre calculé ou d'une expression de formule pour indiquer à Essbase que la valeur de la formule ou du membre calculé est vide lorsque la valeur de cellule au niveau du tuple indiqué dans nonempty_member_list est vide.
En fonction d'un ensemble d'entrées, la fonction MDX NonEmptySubset renvoie un sous-ensemble de cet ensemble d'entrées dans lequel tous les tuples sont évalués comme non vides. Une expression de valeur facultative peut être spécifiée pour la vérification non vide. Cette fonction permet d'optimiser les requêtes qui sont basées sur un ensemble volumineux pour lequel l'ensemble de combinaisons non vides est connu pour être petit. NonEmptySubset réduit la taille de l'ensemble en présence d'une métrique. Par exemple, vous pouvez demander le sous-ensemble non vide de descendants pour des unités spécifiques.
Variables des requêtes MDX
Vous pouvez utiliser des variables de substitution Essbase prédéfinies dans MDX pour référencer des informations fréquemment modifiées sans modifier vos requêtes. Pour référencer une variable dans une requête ou une expression MDX, entrez le nom de la variable précédé d'une esperluette (&).
Les variables de substitution dans Essbase servent d'espaces réservés pour les informations qui changent régulièrement. Vous définissez les variables de substitution au niveau du cube, de l'application ou du niveau global Essbase et affectez une valeur à chaque variable. Vous pouvez modifier la valeur à tout moment. Vous devez avoir au moins le rôle Database Manager pour définir des variables de substitution. Reportez-vous à Implémentation de variables pour la modification des informations.
Pour utiliser une variable de substitution dans une expression MDX, tenez compte des éléments suivants :
-
La variable de substitution doit être accessible à partir de l'application et du cube que vous interrogez.
-
Une variable de substitution comporte deux composants : le nom et la valeur.
-
Le nom de variable peut être une combinaison alphanumérique dont la taille maximale est indiquée dans Limites de nom et d'artefact associées. N'utilisez pas d'espaces, de ponctuation ou de crochets ([ ]) dans les noms de variables de substitution utilisés dans MDX.
-
A l'endroit où vous souhaitez utiliser la variable, entrez le nom de la variable précédé d'une esperluette (&) ;, par exemple, où
CurMonthest le nom de la variable de substitution définie sur le serveur, incluez&CurMonthdans l'expression MDX. -
Lorsque vous effectuez l'extraction, Essbase remplace le nom de la variable par la valeur de substitution et cette valeur est utilisée par l'expression MDX.
Par exemple, l'expression est écrite avec le nom de variable CurQtr précédé du signe & :
SELECT
{[&CurQtr]}
ON COLUMNS
FROM Sample.BasicLorsque l'expression est évaluée, la valeur en cours (Qtr1) est remplacée par le nom de la variable, de sorte que l'expression exécutée soit efficace :
SELECT
{[Qtr1]}
ON COLUMNS
FROM Sample.BasicRequête de propriétés dans MDX
Les propriétés décrivent certaines caractéristiques des métadonnées et des données Essbase. MDX vous permet d'écrire des requêtes qui extraient et analysent des données en fonction de propriétés Essbase, qui peuvent être intrinsèques ou personnalisées. Vous pouvez appeler des propriétés sur les axes de requête MDX ou dans une expression de valeur.
Propriétés intrinsèques et personnalisées
Dans MDX, properties décrit certaines caractéristiques des données et des métadonnées. MDX vous permet d'écrire des requêtes qui utilisent des propriétés pour extraire et analyser des données. Les propriétés peuvent être intrinsèques ou personnalisées.
Propriétés intrinsèques
Les propriétés intrinsèques sont définies pour les membres de toutes les dimensions. Les propriétés de membre intrinsèques définies pour tous les membres d'une outline de base de données Essbase sont MEMBER_NAME, MEMBER_ALIAS, LEVEL_NUMBER, GEN_NUMBER, IS_EXPENSE, COMMENTS et MEMBER_UNIQUE_NAME.
Reportez-vous à la section MDX Intrinsic Properties pour une description de chacun d'entre eux.
Propriétés personnalisées
Dans Essbase, MDX prend en charge deux types de propriétés personnalisées : les propriétés d'attribut et les propriétés UDA. Les propriétés d'attribut sont définies par les dimensions d'attribut dans une outline. Dans la base de données Sample.Basic, la dimension d'attribut Pkg Type décrit les caractéristiques de packaging des membres de la dimension Product. Ces informations peuvent être interrogées dans MDX à l'aide du nom de propriété [Type de package].
Les propriétés d'attribut sont définies uniquement pour des dimensions spécifiques et uniquement pour un niveau spécifique dans chaque dimension. Par exemple, dans l'outline Sample.Basic, [Ounces] est une propriété d'attribut définie uniquement pour les membres de la dimension Product, et cette propriété a des valeurs valides uniquement pour les membres de niveau 0 de la dimension Product. La propriété [Ounces] n'existe pas pour d'autres dimensions, telles que Market. La propriété [Ounces] d'un membre autre que de niveau 0 dans la dimension Product est une valeur NULL. Les propriétés d'attribut d'une outline sont identifiées par les noms des dimensions d'attribut de cette outline.
Les propriétés personnalisées incluent également des UDA. Par exemple, [Major Market] est une propriété UDA définie sur les membres de la dimension Market. Il renvoie une valeur TRUE si l'attribut défini par l'utilisateur [Major Market] est défini pour un membre, et FALSE dans le cas contraire.
Voir également la section MDX Custom Properties.
Appeler des propriétés dans un axe de requête
Vous pouvez répertorier les combinaisons de dimension et de propriété pour chaque jeu d'axes. Lorsqu'une requête est exécutée, la propriété indiquée est évaluée pour tous les membres de la dimension indiquée et incluse dans l'ensemble de résultats.
Par exemple, sur l'axe de colonne, la requête suivante renvoie les informations GEN_NUMBER pour chaque membre de la dimension Market. Sur l'axe des lignes, l'interrogation renvoie les informations MEMBER_ALIAS pour chaque membre de la dimension Product.
SELECT
[Market].Members
DIMENSION PROPERTIES [Market].[GEN_NUMBER] on columns,
Filter ([Product].Members, Sales > 5000)
DIMENSION PROPERTIES [Product].[MEMBER_ALIAS] on rows
FROM Sample.BasicLors de l'interrogation de propriétés de membre à l'aide de la section DIMENSION PROPERTIES d'un axe, une propriété peut être identifiée par le nom de DIMENSION et le nom de la propriété, ou en utilisant le nom de propriété lui-même. Lorsqu'un nom de propriété est utilisé seul, ces informations sont renvoyées pour tous les membres de toutes les dimensions de cet axe, pour lesquels cette propriété s'applique.
Dans l'interrogation suivante, la propriété MEMBER_ALIAS est évaluée sur l'axe de ligne pour les dimensions Year et Product.
SELECT [Market].Members
DIMENSION PROPERTIES [Market].[GEN_NUMBER] on columns,
CrossJoin([Product].Children, Year.Children)
DIMENSION PROPERTIES [MEMBER_ALIAS] on rows
FROM Sample.BasicAppeler des propriétés dans une expression de valeur
Les propriétés peuvent être utilisées dans des expressions de valeur dans une requête MDX. Par exemple, vous pouvez filtrer un ensemble en fonction d'une expression de valeur qui utilise les propriétés des membres de l'ensemble d'entrée.
La requête suivante renvoie tous les produits contenant de la caféine qui sont emballés dans des boîtes.
SELECT
Filter([Product].levels(0).members,
[Product].CurrentMember.Caffeinated and
[Product].CurrentMember.[Pkg Type] = "Can")
Dimension Properties
[Caffeinated], [Pkg Type] on columns
FROM Sample.BasicLa requête suivante calcule la valeur [BudgetedExpenses] selon que le marché actuel est un marché majeur, à l'aide de l'UDA [Major Market].
WITH
MEMBER [Measures].[BudgetedExpenses] AS
'IIF([Market].CurrentMember.[Major Market],
[Marketing] * 1.2, [Marketing])'
SELECT {[Measures].[BudgetedExpenses]} ON COLUMNS,
[Market].Members ON ROWS
FROM Sample.Basic
WHERE ([Budget])Type valeur des propriétés
La valeur d'une propriété MDX dans Essbase peut être de type numérique, booléen ou chaîne. Les propriétés MEMBER_NAME et MEMBER_ALIAS renvoient des valeurs de chaîne. Les propriétés LEVEL_NUMBER et GEN_NUMBER renvoient des valeurs numériques.
Les propriétés d'attribut renvoient des valeurs numériques, booléennes ou de chaîne en fonction du type de dimension d'attribut. Par exemple, dans Sample.Basic, la propriété d'attribut [Ounces] est une propriété numérique. La propriété d'attribut [Pkg Type] est une propriété de chaîne. La propriété d'attribut [Caffeinated] est une propriété booléenne.
Essbase autorise les dimensions d'attribut avec des types de date. Les propriétés de type de date sont traitées comme des propriétés numériques dans MDX. Lorsque vous comparez ces valeurs de propriété à des dates, utilisez la fonction Todate pour convertir les chaînes de date en valeurs numériques avant la comparaison.
La requête suivante renvoie tous les membres de la dimension Product qui ont été introduits le 25/03/2018. Comme la propriété [Intro Date] est un type de date, la fonction TODATE doit être utilisée pour convertir la chaîne de date "03-25-2018" en nombre avant de la comparer.
SELECT
Filter ([Product].Members,
[Product].CurrentMember.[Intro Date] =
TODATE("mm-dd-yyyy","03-25-2018"))ON COLUMNS
FROM Sample.BasicLorsqu'une propriété est utilisée dans une expression de valeur, vous devez l'utiliser correctement en fonction de son type de valeur : chaîne, numérique ou booléen.
Vous pouvez également interroger des dimensions d'attribut avec des plages numériques.
La requête suivante extrait les données Sales pour les plages de population Small, Medium et Large.
SELECT
{Sales} ON COLUMNS,
{Small, Medium, Large} ON ROWS
FROM Sample.BasicLorsque des attributs sont utilisés comme propriétés dans une expression de valeur, vous pouvez utiliser des membres de plage pour vérifier si la valeur de propriété d'un membre se situe dans une plage donnée, à l'aide de l'opérateur IN.
Par exemple, la requête suivante renvoie tous les membres de la dimension Marché dont la plage de population est Moyenne :
SELECT
Filter(
Market.Members, Market.CurrentMember.Population
IN "Medium"
)
ON AXIS(0)
FROM Sample.BasicValeurs de propriété NULL
Certains membres ne peuvent pas avoir de valeurs valides pour un nom de propriété donné. Par exemple, la propriété MEMBER_ALIAS renvoie un autre nom pour un membre donné tel que défini dans l'outline. Toutefois, des alias peuvent ne pas être définis pour tous les membres. Dans ce cas, une valeur NULL est renvoyée pour les membres qui n'ont pas d'alias.
Dans la requête suivante,
SELECT
[Year].Members
DIMENSION PROPERTIES [MEMBER_ALIAS]
ON COLUMNS
FROM Sample.BasicAucun des membres de la dimension Year n'a d'alias défini pour eux. Par conséquent, l'interrogation renvoie des valeurs NULL pour la propriété MEMBER_ALIAS pour les membres de la dimension Year.
Les propriétés d'attribut sont définies pour les membres d'une dimension spécifique et d'un niveau spécifique de cette dimension. Dans la base de données Sample.Basic, la propriété [Ounces] est définie uniquement pour les membres de niveau 0 de la dimension Product.
Par conséquent, si vous recherchez la propriété [Ounces] d'un membre de la dimension Market, comme indiqué dans la requête suivante, vous obtiendrez une erreur de syntaxe :
SELECT
Filter([Market].members,
[Market].CurrentMember.[Ounces] = 32) ON COLUMNS
FROM Sample.BasicEn outre, si vous recherchez la propriété [Ounces] d'un membre non de niveau 0 de la dimension, vous obtiendrez une valeur NULL.
Lorsque vous utilisez des valeurs de propriété dans des expressions de valeur, vous pouvez utiliser la fonction IsValid() pour rechercher des valeurs NULL. La requête suivante renvoie tous les membres de la dimension Product avec une valeur de propriété [Ounces] de 12, après avoir éliminé les membres avec des valeurs NULL.
SELECT
Filter([Product].Members,
IsValid([Product].CurrentMember.[Ounces]) AND
[Product].CurrentMember.[Ounces] = 12)
ON COLUMNS
FROM Sample.Basic