MDX membre Calculé filtre par attribut de dimension
je veux créer un membre calculé et filtrer par dimension. Ce TRAVAIL est par exemple:
(
[Policy].[Policy Status].&[Void],
[Policy].[Tran Type].&[Renewal],
[Measures].[FK Policy Distinct Count]
)
Mais si je veux filtre comme ceci
(
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy],
[Measures].[FK Policy Distinct Count]
)
que ça ne marche pas. Il dit que la même hiérarchie apparaît plusieurs fois dans le tuple.
une autre chose est, comment exclure les lignes? Voici l'idée...
(
![Policy].[Policy Status].&[Void],
![Policy].[Policy Status].&[Policy],
[Measures].[FK Policy Distinct Count]
)
2 réponses
tout d'abord, il est important de comprendre la syntaxe MDX, et comment elle est reliée aux concepts de des tuples, des membres et des ensembles.
Tuples
utiliser des parenthèses dénote un tuple:
(
[Policy].[Policy Status].&[Void],
[Policy].[Tran Type].&[Renewal],
[Measures].[FK Policy Distinct Count]
)
Un tuple ne peut contenir qu'un seul membre de la hiérarchie.
Configure
pour récupérer les résultats de plusieurs membres dans la même hiérarchie, vous devez rechercher un ensemble. Un ensemble MDX est désigné par croisillons:
{
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy]
}
Un jeu est-à -par définition,
une collection ordonnée de zéro, un ou plusieurs tuples.
Donc, si vous souhaitez requête pour [FK Policy Distinct Count]
mesure à l'encontre de deux de ces membres, l'ensemble de n-uplets, chacun doit inclure la mesure:
{
( [Policy].[Policy Status].&[Void], [Measures].[FK Policy Distinct Count] ),
( [Policy].[Policy Status].&[Policy], [Measures].[FK Policy Distinct Count] )
}
Pour simplifier cette expression, il est possible de crossjoin deux ensembles de différents dimension:
{
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy],
[Policy].[Policy Status].&[Something],
[Policy].[Policy Status].&[Something else],
[Policy].[Policy Status].&[Yet another member]
}
*
{
[Measures].[FK Policy Distinct Count]
}
à L'exclusion des lignes
maintenant que nous pouvons définir des ensembles, il est temps de supprimer certains membres d'un. Dans votre exemple, on dirait que vous voulez commencer par un niveau (qui, pour le moteur MDX, est juste un ensemble prédéfini dans le cube qui inclut chaque membre à ce niveau de la hiérarchie), et exclure certains membres. MDX a beaucoup de fonctions qui fonctionnent sur les ensembles, et nous allons utiliser EXCEPT
.
EXCEPT
fonction prend deux paramètres, le premier étant l'ensemble à supprimer, et le second étant l'ensemble qui doit être supprimé du premier. Il renvoie à un ensemble.
Dans cet exemple, je vais supposer [Policy].[Policy Status]
est une hiérarchie d'attributs, et que son seul niveau a le nom Unique de [Policy].[Policy Status].[Policy Status]
.
EXCEPT(
[Policy].[Policy Status].[Policy Status],
{
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy]
}
)
cela ramènera chaque membre de la [Policy].[Policy Status].[Policy Status]
niveau, sauf pour [Policy].[Policy Status].&[Void]
et [Policy].[Policy Status].&[Policy]
.
Pour obtenir des résultats utiles, nous pouvons croix-rejoindre le résultat d'une mesure:
EXCEPT(
[Policy].[Policy Status].[Policy Status],
{
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy]
}
)
*
{
[Measures].[FK Policy Distinct Count]
}
utiliser un ensemble comme un seul membre
décors sont beaux, mais parfois, tout ce que nous voulons d'eux est de les traiter comme un seul membre, comme dans votre membre calculé exigence. Pour ce faire, nous devons utiliser une fonction d'agrégation. Les fonctions d'agrégation prennent un ensemble et renvoient un membre qui représente l'ensemble.
il y en a plusieurs, et la bonne à utiliser dépend des données stockées dans votre cube: MIN
,MAX
,COUNT
et SUM
en sont quelques-unes (voir "fonctions numériques" dans la référence de la fonction MDX pour une liste plus complète). Dans cet exemple, je supposerai vos agrégats de dimension en utilisant SUM:
SUM(
EXCEPT(
[Policy].[Policy Status].[Policy Status],
{
[Policy].[Policy Status].&[Void],
[Policy].[Policy Status].&[Policy]
}
),
[Measures].[FK Policy Distinct Count]
)
ici, j'ai passé la mesure à agréger comme deuxième paramètre à additionner.
MDX est un langage complexe qui prend en charge de nombreuses opérations courantes et inhabituelles. Si vous ne l'avez pas déjà, je vous conseille prendre le temps de relire la documentation disponible en ligne, ou vous procurer un bon livre MDX. Il y a beaucoup de choses à savoir :)
<3
Essayez cette syntaxe:
SUM({[Policy].[Policy Status].&[Void], [Policy].[Policy Status].&[Policy]}, [Measures].[FK Policy Distinct Count])