sas olap mdx

sas - Definir un miembro calculado en MDX-filtrando el valor de una medida



olap (3)

Para empezar, puede definir una nueva medida calculada en su MDX y decirle que use el valor de otra medida, pero con un filtro aplicado:

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

Cada vez que muestre la nueva medida en un informe, se comportará como si tuviera un filtro de ''Dirección> In'' en ella, independientemente de si la dimensión Dirección se usa en absoluto.

Pero en tu caso, QUIERES que la dimensión dirección tome precendencia cuando se usa ... para que las cosas se vuelvan un poco complicadas. Deberá detectar si esta dimensión está en uso y actuar en consecuencia:

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

Para ver si la dimensión está en uso, verificamos si la celda actual está usando OUT. De ser así, podemos devolver Total Traffic tal como está. Si no, podemos decirle que use IN en nuestra tupla.

Necesito definir un miembro calculado en MDX (esto es SAS OLAP, pero agradecería las respuestas de las personas que trabajan con diferentes implementaciones OLAP de todos modos).

El valor de la nueva medida debe calcularse a partir de una medida existente aplicando una condición de filtro adicional. Supongo que será más claro con un ejemplo:

  • Medida existente: "Tráfico total"
  • Dimensión existente: "Dirección" ("En" o "Fuera")
  • Necesito crear un miembro calculado "Tráfico entrante", que equivale a "Tráfico total" con un filtro adicional (Dirección = "En")

El problema es que no conozco MDX y estoy en un horario muy apretado (lo siento mucho por una pregunta de novato). Lo mejor que pude llegar es:

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

Lo cual casi funciona, a excepción de las celdas con dirección específica:

Por lo tanto, parece que el filtro "intrínseco" en Dirección se anula con mi propio filtro). Necesito una intersección del filtro "intrínseco" y el mío. Mi intuición fue que tiene que ver con Intersección [Direction].[(All)].[In] con los coords intrínsecos de la celda que se evalúa, pero es difícil saber lo que necesito sin leer primero sobre el tema: )

[editar] Terminé con

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

... pero al menos en SAS OLAP esto hace que se realicen consultas adicionales (para calcular el valor de [in]) al conjunto de datos subyacente, por lo que no lo usé al final.


Creo que deberías poner una columna en tu tabla de datos de Total Traffic para la indicación IN / OUT y crear una tabla Dim para los valores IN & Out. A continuación, puede analizar sus datos según IN & Out.


También eche un vistazo a esta pregunta , describe el mismo problema y hay una respuesta diferente publicada allí.