Définition d'un membre calculé dans MDX - Filtrage de la valeur d'une mesure

StackOverflow https://stackoverflow.com/questions/197407

  •  10-07-2019
  •  | 
  •  

Question

Je dois définir un membre calculé dans MDX (il s'agit de SAS OLAP, mais j'apprécierais les réponses des personnes travaillant avec différentes implémentations OLAP).

La valeur de la nouvelle mesure doit être calculée à partir d'une mesure existante en appliquant une condition de filtre supplémentaire. Je suppose que ce sera plus clair avec un exemple:

  • Mesure existante: "Trafic total"
  • Dimension existante: " Direction " ("In" ou "Out")
  • Je dois créer un membre calculé "Trafic entrant", ce qui correspond à "Trafic total". avec un filtre supplémentaire (Direction = "Dans")

Le problème est que je ne connais pas MDX et que mon calendrier est très serré (désolé pour une question de débutant). Le mieux que je puisse trouver est:

([Measures].[Total traffic], [Direction].[(All)].[In])

Ce qui fonctionne presque, sauf pour les cellules avec une direction spécifique:

exemple

Cela ressemble donc au paramètre "intrinsèque". filter on Direction est remplacé par mon propre filtre). J'ai besoin d'une intersection de la " intrinsèque " filtre et le mien. J'avais l'impression que cela avait un rapport avec l'intersection de [Direction]. [(Tous)]. [In] avec les coordonnées intrinsèques de la cellule en cours d'évaluation, mais il est difficile de savoir ce dont j'ai besoin sans première lecture sur le sujet:)

[edit] J'ai fini avec

IIF([Direction].currentMember = [Direction].[(All)].[Out],
    0,
    ([Measures].[Total traffic], [Direction].[(All)].[In])
)

.. mais au moins dans SAS OLAP, cela entraîne l'exécution de requêtes supplémentaires (pour calculer la valeur de [in]) sur l'ensemble de données sous-jacent, je ne l'ai donc pas utilisé à la fin.

Était-ce utile?

La solution

Pour commencer, vous pouvez définir une nouvelle mesure calculée dans votre MDX et lui indiquer d'utiliser la valeur d'une autre mesure, mais avec un filtre appliqué:

WITH MEMBER [Measures].[Incoming Traffic] AS
'([Measures].[Total traffic], [Direction].[(All)].[In])'

Chaque fois que vous affichez la nouvelle mesure dans un rapport, celle-ci se comportera comme si elle comportait un filtre "Direction". Dans 'dessus, que la dimension Direction soit utilisée ou non.

Mais dans votre cas, vous VOULEZ que la dimension Direction prenne la priorité lorsqu'elle est utilisée ... pour que les choses deviennent un peu brouilleuses. Vous devrez détecter si cette dimension est utilisée et agir en conséquence:

WITH MEMBER [Measures].[Incoming Traffic] AS
'IIF([Direction].currentMember = [Direction].[(All)].[Out],
    ([Measures].[Total traffic]),
    ([Measures].[Total traffic], [Directon].[(All)].[In])
)'

Pour voir si la dimension est utilisée, nous vérifions si la cellule actuelle utilise OUT. Si tel est le cas, nous pouvons renvoyer Total Traffic tel quel. Sinon, nous pouvons lui dire d’utiliser IN dans notre tuple.

Autres conseils

Je pense que vous devriez mettre une colonne dans votre tableau de faits sur le trafic total pour l'indication IN / OUT & amp; créer une table de dimensionnement pour IN & amp; Out valeurs. Vous pouvez ensuite analyser vos données en fonction de IN & amp; Out.

Jetez également un coup d'oeil à cette question , elle décrit le même problème et une réponse différente y est publiée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top