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]
)
14
demandé sur Jonathan Leffler 2011-12-21 01:54:20

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

46
répondu Tullo_x86 2015-05-22 15:33:56

Essayez cette syntaxe:

SUM({[Policy].[Policy Status].&[Void], [Policy].[Policy Status].&[Policy]}, [Measures].[FK Policy Distinct Count])
2
répondu Noe Zavala 2011-12-21 18:03:28