Domanda

Devo definire un membro calcolato in MDX (questo è SAS OLAP, ma apprezzerei le risposte delle persone che lavorano comunque con diverse implementazioni OLAP).

Il valore della nuova misura deve essere calcolato da una misura esistente applicando una condizione di filtro aggiuntiva. Suppongo che sarà più chiaro con un esempio:

  • Misura esistente: " Traffico totale "
  • Dimensione esistente: " Direzione " (" In " o " Out ")
  • Devo creare un membro calcolato " Traffico in entrata " ;, che equivale a " Traffico totale " con un filtro aggiuntivo (Direzione = " In ")

Il problema è che non conosco MDX e ho un programma molto stretto (mi dispiace per una domanda da principiante). Il meglio che ho potuto inventare è:

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

Che funziona quasi, tranne per le celle con una direzione specifica:

example

Quindi sembra che il "intrinseco" filtro su La direzione viene sovrascritta dal mio filtro). Ho bisogno di un'intersezione del "intrinseco" filtro e il mio. La mia sensazione era che avesse a che fare con Intersecting [Direction]. [(All)]. [In] con le coordinate intrinseche della cellula in fase di valutazione, ma è difficile sapere di cosa ho bisogno senza prima lettura sull'argomento :)

[modifica] Ho finito con

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

..ma almeno in OLAP SAS ciò causa l'esecuzione di query extra (per calcolare il valore di [in]) al set di dati sottostante, quindi alla fine non l'ho usato.

È stato utile?

Soluzione

Per cominciare, puoi definire una nuova misura calcolata nel tuo MDX e dirgli di usare il valore di un'altra misura, ma con un filtro applicato:

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

Ogni volta che mostri la nuova misura in un rapporto, si comporterà come se avesse un filtro di 'Direzione > In "su di esso, indipendentemente dal fatto che la dimensione Direzione sia utilizzata affatto.

Ma nel tuo caso, VUOI che la dimensione Direzione prenda la precedenza quando viene usata ... quindi le cose diventano un po 'confuse. Dovrai rilevare se questa dimensione è in uso e agire di conseguenza:

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

Per vedere se la dimensione è in uso, controlliamo se la cella corrente sta usando OUT. In tal caso, possiamo restituire il traffico totale così com'è. Altrimenti, possiamo dire che usa IN nella nostra tupla.

Altri suggerimenti

Penso che dovresti inserire una colonna nella tabella dei fatti sul traffico totale per l'indicazione IN / OUT & amp; crea una tabella dim per IN & amp; Valori fuori. Puoi quindi analizzare i tuoi dati in base a IN & amp; Out.

Dai un'occhiata anche a questa domanda , descrive lo stesso problema e c'è una risposta diversa postata lì.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top