28 Escritura en consultas MDX

MDX es un lenguaje similar a SQL que puede utilizar para emitir consultas que recuperan datos de Essbase. MDX también se utiliza para definir fórmulas en cubos ASO, consultar metadatos, calificar nombres de miembros y delinear subjuegos de datos o metadatos. La mejor manera de aprender MDX es escribir consultas.

Esta sección le ayudará a aprender MDX escribiendo consultas en el cubo Sample Basic en una serie de ejercicios.

Requisitos para escribir consultas MDX

Para completar los ejercicios, necesitará:

Creación de una plantilla de consulta MDX

Conozca el formato básico de una consulta MDX, para que pueda empezar a utilizar MDX con Essbase. Al igual que las sentencias SQL, las consultas MDX suelen empezar por SELECT.

En esta sección, creará una plantilla para utilizarla como base para desarrollar consultas MDX simples.

La mayoría de las consultas se pueden construir sobre el siguiente marco gramatical:

SELECT
  {}
ON COLUMNS
FROM Sample.Basic

SELECT en la línea 1 es la palabra clave que inicia el cuerpo principal de las sentencias MDX.

Las llaves { } de la línea 2 son un marcador de posición para un set. En la consulta anterior, el juego está vacío, pero las llaves permanecen como marcador de posición.

Ejercicio 1: Creación de una plantilla de consulta MDX

Para crear una plantilla de consulta:

  1. Cree una carpeta para almacenar consultas de ejemplo que se puedan ejecutar en el cubo Sample.Basic.

  2. Mediante un editor de texto, escriba el siguiente código en un archivo en blanco:

    SELECT
      {}
    ON COLUMNS
    FROM Sample.Basic
  3. Guarde el archivo como qry_blank.txt.

Conjuntos MDX y tuplas

Los sets de MDX contienen tuples y las tuplas de MDX contienen nombres de miembros. Descubra la diferencia entre conjuntos, tuplas y nombres de miembros y cómo encajan en las consultas MDX de Essbase.

Escriba la primera consulta y ejecútela en el cliente MaxL para recuperar algunos datos del cubo básico de ejemplo.

Juegos

Un juego de MDX puede estar vacío, ser una recopilación de tuplas o una recopilación de juegos.

Por ejemplo, el siguiente es un conjunto vacío.

{ }

Un conjunto debe estar entre llaves {}, excepto en los casos en que el conjunto esté representado por una función MDX que devuelva un conjunto (más información sobre las funciones más adelante).

El siguiente es un conjunto que consta de una tupla.


  {[Cola]}

En la siguiente consulta, {([Cola], [Actual])} también es un juego que consta de una tupla, aunque en este caso, la tupla tiene más de un nombre de miembro.

SELECT
  {([Cola], [Actual])}
ON COLUMNS
FROM Sample.Basic

{([Cola], [Actual])} es una tupla formada por dos miembros (Cola y Real) de dos dimensiones (Producto y Escenario).

Regla de dimensionalidad

Cuando un conjunto tiene varias tuplas, los miembros de cada tupla deben representar las mismas dimensiones de Essbase, en el mismo orden. Es decir, todas las tuplas deben tener la misma dimensionalidad que las demás.

  • OK: El siguiente conjunto consta de dos tuplas de la misma dimensionalidad:

    {(West, Feb), (East, Mar)}
  • No está bien: el siguiente juego rompe la regla de dimensionalidad, porque Feb y Sales son de diferentes dimensiones:

    {(West, Feb), (East, Sales)}
  • No está bien: el siguiente conjunto rompe la regla de dimensionalidad, porque aunque las dos tuplas contienen las mismas dimensiones, el orden de las dimensiones se invierte en la segunda tupla:

    {(West, Feb), (Mar, East)}

Tuplas y nombres de miembros

Una tupla es una forma de hacer referencia a un miembro o una combinación de miembros desde cualquier número de dimensiones. Por ejemplo, en el cubo Sample.Basic, todas estas son tuplas válidas:

  • Jan
  • (Jan, Sales)
  • ([Jan],[Sales],[Cola],[Utah],[Actual])

Los nombres de miembros se pueden especificar de las siguientes formas:

  • Especificando el nombre real o el alias; por ejemplo:

    • Cola

    • Actual

    • COGS

    • [100]

    Si el nombre del miembro empieza por un número o contiene espacios, debe estar entre corchetes; por ejemplo, [100] o [New York]. Sin embargo, los corchetes de nombre de miembro se recomiendan para todos los nombres de miembro, para mayor claridad y legibilidad de código.

    Si el nombre del miembro empieza por un ampersand (&), debe estar entre comillas; por ejemplo, ["&xyz"]. Esto se debe a que el ampersand principal está reservado para variables de sustitución (consulte Variables en consultas MDX). También puede especificarlo como StrToMbr("&100").

    Para los miembros de atributo, se debe utilizar el nombre largo (calificado para identificar de forma única al miembro); por ejemplo, [Ounces_12] en lugar de [12].

  • Especificando el nombre de dimensión o cualquiera de los nombres de miembros ascendientes como prefijo para el nombre de miembro; por ejemplo, [Product].[100-10] y [Diet].[100-10]. Esta práctica se recomienda para todos los nombres de miembros, ya que elimina la ambigüedad y permite hacer referencia con precisión a los miembros compartidos. Consulte: "Miembros calificados por ascendiente diferenciador" en Nombres de miembros duplicados en esquemas.

    Note:

    No utilice varios ascendientes en la calificación de nombre de miembro. Essbase devuelve un error si se incluyen varios ascendientes. Por ejemplo, [Market].[New York] y [East].[New York] son nombres válidos para Nueva York; sin embargo, [Market].[East].[New York] devuelve un error.

  • Especificando el nombre de un miembro calculado definido en la Sección CON.

Ejercicio 2: Ejecución de la primera consulta

Recuerde que las llaves {} de la línea 2 de la plantilla de consulta son un marcador de posición para un juego. En este ejercicio, agregaremos un juego a la consulta y la ejecutaremos.

Para ejecución de la consulta:

  1. Abra qry_blank.txt, la plantilla de consulta que ha creado a partir de Creación de una plantilla de consulta MDX.

  2. Debido a que un conjunto puede ser tan simple como una tupla, agregue la tupla dentro de las llaves { } que sostienen el conjunto.

    Escriba [Jan] dentro de las llaves { } en la línea 2:

    SELECT 
      {[Jan]}
    ON COLUMNS
    FROM Sample.Basic
  3. Guarde la consulta como qry_first.txt.

  4. Asegúrese de que Essbase se está ejecutando.

  5. Inicie el cliente MaxL y conéctese con un nombre de usuario y una contraseña válidos. Por ejemplo:

    login admin1 my_Pa55w0rD on "https://myserver.example.com:9001/essbase/agent";
  6. Copie y pegue toda la consulta SELECT en el cliente MaxL, pero aún no pulse Intro.

  7. Introduzca un punto y coma al final, en cualquier lugar después de Básico, pero antes de pulsar Intro. (El punto y coma no es un requisito de MDX, pero es necesario para que el cliente MaxL indique el final de una sentencia).

  8. Pulse Intro para enviar la consulta a Essbase.

    Los resultados deben ser similares a los siguientes:

    Jan
      8024

Diseño de consulta MDX con ejes y especificación de cubo

Un eje MDX es una instrucción que da forma al diseño de cuadrícula de los resultados de consulta de un cubo de Essbase. ON COLUMNS y ON ROWS son palabras clave de eje que describen dónde deben aparecer los resultados. Una especificación de cubo incluye la palabra clave FROM e indica a Essbase qué cubo consultar.

Eje MDX

Los ejes caben en las consultas MDX después de seleccionar:

SELECT <axis> [, <axis>...]
FROM <database> 

En la siguiente consulta, la especificación del eje es {Jan} ON COLUMNS:

SELECT
  {Jan} ON COLUMNS
FROM Sample.Basic

Se debe especificar al menos un eje en cualquier consulta MDX.

Se pueden indicar hasta 64 ejes, comenzando con AXIS(0) y continuando con AXIS(1)... AXIS(63). El uso de más de tres ejes es poco común. El orden de los ejes no es importante; sin embargo, cuando se especifica un conjunto de ejes del 0 al n, no se debe omitir ningún eje entre 0 y n. Además, una dimensión no puede aparecer en varios ejes.

Los cinco primeros ejes tienen alias de palabra clave, como se muestra en la siguiente tabla:

Tabla 28-1 Alias de palabras clave de ejes

Alias de palabra clave de ejes Ejes

EN COLUMNAS

Se puede utilizar en lugar de AXIS(0)

EN FILAS

Puede sustituir AXIS(1)

EN PÁGINAS

Puede sustituir AXIS(2)

EN CAPÍTULOS

Puede sustituir AXIS(3)

EN SECCIONES

Puede sustituir AXIS(4)

Especificación de Cubo MDX

Una especificación de cubo es la parte de la consulta que determina qué base de datos de Essbase se está consultando. La especificación del cubo se ajusta a una consulta MDX de la siguiente forma:

SELECT <axis> [, <axis>...]
FROM <cube> 

La sección <cube> sigue la palabra clave FROM y debe constar de identificadores delimitados o no delimitados que especifican primero un nombre de aplicación y, a continuación, un nombre de base de datos; por ejemplo, las siguientes especificaciones son válidas:

  • FROM Sample.Basic

  • FROM [Sample.Basic]

  • FROM [Sample].[Basic]

  • FROM'Sample'.'Basic'

Ejercicio 3: Ejecución de una Consulta de Dos Ejes

Para ejecutar una consulta de dos ejes:

  1. Abra qry_blank.txt, la plantilla de consulta que ha creado en Creación de una plantilla de consulta MDX.

  2. Agregue una coma después de ON COLUMNS y, a continuación, agregue un marcador de posición para un segundo eje agregando ON ROWS:

    SELECT
      {}
    ON COLUMNS,
      {}
    ON ROWS
    FROM Sample.Basic
  3. Guarde la nueva plantilla de consulta como qry_blank_2ax.txt.

  4. Como especificación de juego para el eje de columna, introduzca los miembros de producto 100-10 y 100-20. Por ejemplo:

    SELECT
      {[100-10],[100-20]}
    ON COLUMNS, 
      {}
    ON ROWS
    FROM Sample.Basic

    Puesto que estos nombres de miembros contienen caracteres especiales, debe utilizar corchetes. Se recomienda la convención que se utiliza aquí para delimitar todos los nombres de miembros entre paréntesis, incluso si no contienen caracteres especiales.

  5. Como especificación de juego para el eje de fila, introduzca los miembros Year de Qtr1 a Qtr4.

    SELECT
      {[100-10],[100-20]}
    ON COLUMNS,
      {[Qtr1],[Qtr2],[Qtr3],[Qtr4]}
    ON ROWS
    FROM Sample.Basic
  6. Guarde la consulta como qry_2ax.txt.

  7. Pegue la consulta en el cliente MaxL y ejecútela, como se describe en el primer ejercicio (en Juegos MDX y Tuples).

Los resultados de la consulta deben ser similares a los siguientes:

Tabla 28-2 Resultados: Ejecución de una consulta de dos ejes

La imagen de un espacio se utiliza para las celdas de thead vacías 100-10 100-20

Trim1

5.096

1.359

Trim 2

5.892

1.534

Trim 3

6.583

1.528

Trim 4

5.206

1.287

Ejercicio 4: Consulta de varias dimensiones en un solo eje

Para consultar varias dimensiones en un solo eje:

  1. Abra qry_blank_2ax.txt, la plantilla de consulta que creó en el ejercicio anterior.

  2. En el eje de columna, especifique dos tuplas, cada una de las cuales es una combinación de miembros en lugar de un solo miembro. Incluya cada tupla entre paréntesis, ya que hay varios miembros representados en cada tupla.

    SELECT
      {([100-10],[East]), ([100-20],[East])}
    ON COLUMNS,
      {}
    ON ROWS
    FROM Sample.Basic
  3. En el eje de fila, especifique cuatro tuplas de dos miembros, anidando cada trimestre con ganancias:

    SELECT
      {([100-10],[East]), ([100-20],[East])}
    ON COLUMNS,
      {
      ([Qtr1],[Profit]), ([Qtr2],[Profit]),
      ([Qtr3],[Profit]), ([Qtr4],[Profit])
      }
    ON ROWS
    FROM Sample.Basic
  4. Guarde la consulta como qry_1ax.txt.

  5. Pegue la consulta en el cliente MaxL y ejecútela, como se describe en el primer ejercicio (en Juegos MDX y Tuples).

    Los resultados deben ser similares a los siguientes:

    Tabla 28-3 Resultados: Consulta de varias dimensiones en un solo eje

    La imagen de un espacio se utiliza para las celdas de thead vacías La imagen de un espacio se utiliza para las celdas de thead vacías 100-10 100-20
    La imagen de un espacio se utiliza para las celdas de thead vacías La imagen de un espacio se utiliza para las celdas de thead vacías

    Este

    Este

    Trim1

    Beneficio

    2.461

    212

    Trim 2

    Beneficio

    2.490

    303

    Trim 3

    Beneficio

    3.298

    312

    Trim 4

    Beneficio

    2.430

    287

Uso de Funciones MDX para Crear Juegos

Puede utilizar las funciones MDX para trabajar con metadatos o datos de Essbase. Las funciones pueden devolver miembros, juegos, valores, tuplas o cadenas. Son útiles tanto si se utiliza MDX para analizar, actualizar o exportar datos.

Aprenda a utilizar las funciones MemberRange y CrossJoin, probando los ejercicios.

Esta introducción a las funciones MDX se centra en algunas funciones que generan conjuntos. En lugar de introducir manualmente conjuntos miembro por miembro o tupla por tupla en una consulta MDX, puede sustituir dichas enumeraciones por una expresión de función simple. Las funciones MDX pueden devolver conjuntos, así como otros valores.

Por ejemplo, Children es una función de conjunto. Devuelve el juego de miembros secundarios del miembro de entrada. Por lo tanto, Children(Qtr1) devuelve {Jan, Feb, Mar}.

Los ejercicios que siguen pueden ayudarle a aprender a utilizar las funciones MDX en consultas simples. En Lista de funciones de MDX se muestra una referencia completa de las funciones de MDX admitidas por Essbase.

Ejercicio 5: Uso de la Función MemberRange

La función MDX de MemberRange devuelve un rango de miembros que incluye y entre dos miembros especificados de la misma generación. Su sintaxis es la siguiente:

MemberRange (<member1>, <member2>, [,<layertype>])

donde el primer argumento que proporcione es el miembro que inicia el rango y el segundo argumento es el miembro que finaliza el rango. El argumento layertype es opcional.

Note:

Una sintaxis alternativa para MemberRange es utilizar dos puntos entre los dos miembros, en lugar de utilizar el nombre de la función: member1 : member2.

Para utilizar la función MemberRange:

  1. Abra qry_blank.txt, la plantilla de consulta que ha creado en Creación de una plantilla de consulta MDX.

  2. Suprima las llaves {}, que son innecesarias cuando utiliza una función para devolver el juego.

  3. Utilice el operador de dos puntos para seleccionar un rango de miembros de Qtr1 a Qtr4:

    SELECT 
      [Qtr1]:[Qtr4]
    ON COLUMNS 
    FROM Sample.Basic
  4. Pegue la consulta en el cliente MaxL y ejecútela, como se describe en el primer ejercicio (en Juegos MDX y Tuples).

    Se devuelven Qtr1, Qtr2, Qtr3 y Qtr4.

  5. Utilice la función MemberRange para seleccionar el mismo rango de miembros, de Qtr1 a Qtr4.

    SELECT
      MemberRange([Qtr1],[Qtr4])
    ON COLUMNS
    FROM Sample.Basic
  6. Pegue la consulta en el cliente MaxL y ejecútela.

  7. Guarde la consulta como gry_member_range_func.txt.

Ejercicio 6: Uso de la Función CrossJoin

La función CrossJoin devuelve el producto cruzado de dos conjuntos de diferentes dimensiones de Essbase. Su sintaxis es la siguiente:

CrossJoin(set,set)

Esta función toma dos conjuntos de diferentes dimensiones como entrada, y crea un conjunto que es un producto cruzado de ellos. Esto resulta útil para crear informes simétricos.

Para utilizar la función CrossJoin:

  1. Abra qry_blank.txt, la plantilla de consulta que ha creado en Creación de una plantilla de consulta MDX.

  2. Sustituya las llaves {} del eje de columnas por CrossJoin().

    SELECT
      CrossJoin () 
    ON COLUMNS, 
      {}
    ON ROWS
    FROM Sample.Basic
  3. Agregue dos pares de llaves separados por comas como marcadores de posición para los dos argumentos definidos que proporcionará a la función CrossJoin:

    SELECT
      CrossJoin ({}, {})
    ON COLUMNS,
      {}
    ON ROWS
    FROM Sample.Basic
  4. En el primer juego, especifique el miembro Product [100-10]. En el segundo juego, especifique los miembros de Market [East], [West], [South] y [Central].

    SELECT
      CrossJoin ({[100-10]}, {[East],[West],[South],[Central]})
    ON COLUMNS,
      {}
    ON ROWS
    FROM Sample.Basic
  5. En el eje de fila, utilice CrossJoin para cruzar un juego de miembros Measures con un juego que contenga Qtr1:

    SELECT
      CrossJoin ({[100-10]}, {[East],[West],[South],[Central]})
    ON COLUMNS,
      CrossJoin ( 
        {[Sales],[COGS],[Margin %],[Profit %]}, {[Qtr1]} 
      ) 
    ON ROWS
    FROM Sample.Basic
  6. Guarde la consulta como qry_crossjoin_func.txt.

  7. Pegue la consulta en el cliente MaxL y ejecútela.

A medida que experimenta con el uso de CrossJoin, observe que el orden de los argumentos afecta al orden de las tuplas en la salida.

Los resultados de la consulta se muestran a continuación:

Tabla 28-4 Resultados: Uso de la Función CrossJoin

La imagen de un espacio se utiliza para las celdas de thead vacías La imagen de un espacio se utiliza para las celdas de thead vacías 100-10 100-10 100-10 100-10
La imagen de un espacio se utiliza para las celdas de thead vacías La imagen de un espacio se utiliza para las celdas de thead vacías

Este

Región del Oeste

Sur

Central

Sales

Trim1

5.731

3.493

2.296

3.425

COGS

Trim1

1.783

1.428

1.010

1.460

% de margen

Trim1

66,803

59,118

56,01

57,372

% de beneficio

Trim1

45,82

29,974

32,448

24,613

Note:

Considere el uso de CrossJoinAttribute si los juegos de entrada son una dimensión base y su dimensión de atributo.

Ejercicio 7: Uso de la función Elementos secundarios

La función Children devuelve un juego de todos los miembros secundarios del miembro determinado. Utilice esta sintaxis:

Children (member)

Note:

Una sintaxis alternativa para Children es utilizarla como operador en el miembro de entrada, de la siguiente manera: member.Children. Utilizaremos la sintaxis del operador en este ejercicio.

Para utilizar la función Niños para introducir un acceso directo en la especificación del primer eje:

  1. Abra qry_crossjoin_func.txt, la consulta que ha creado en el ejercicio anterior.

  2. En el segundo juego de la especificación del eje de columna, sustituya [East],[West],[South],[Central] por [Market].Children.

    SELECT 
      CrossJoin ({[100-10]}, {[Market].Children})
    ON COLUMNS,
      CrossJoin (
        {[Sales],[COGS],[Margin %],[Profit %]}, {[Qtr1]}
      )
    ON ROWS
    FROM Sample.Basic
  3. Guarde la consulta como gry_children_func.txt.

  4. Pegue la consulta en el cliente MaxL y ejecútela.

    Debería ver los mismos resultados que los devueltos para el ejercicio CrossJoin anterior.

Niveles y generaciones de referencia con MDX

Algunas funciones de MDX realizan operaciones de juego basadas en un argumento de capa de entrada. La capa representa una generación o un nivel de una dimensión de Essbase. Aprender a hacer referencia a un conjunto mediante la función Miembros.

En MDX, el concepto de capa hace referencia a generaciones y niveles de una jerarquía de Essbase.

En Essbase, los números de generación comienzan a contar con 1 en el nombre de dimensión; los números de generación superior son los más cercanos a los miembros de hoja de una jerarquía.

Los números de nivel comienzan con 0 en la parte superior de la hoja de la jerarquía y el número de nivel superior es un nombre de dimensión.

Puede especificar un argumento de capa de las siguientes maneras:

  • Nombre de generación o nivel; por ejemplo, States o Regions.

  • Nombre de dimensión junto con el nombre de generación o nivel; por ejemplo, Market.Regions y [Market].[States].

  • La función Niveles tiene una dimensión y un número de nivel como entrada. Por ejemplo, [Year].Levels(0).

  • La función Level con un miembro como entrada. Por ejemplo, [Qtr1].Level devuelve el nivel de trimestres en Sample.Basic, que es el nivel 1 de la dimensión Market.

  • Las Generaciones funcionan con una dimensión y un número de generación como entrada. Por ejemplo, [Year].Generations (3).

  • La función Generation con un miembro como entrada. Por ejemplo, [Qtr1].Generation devuelve la generación de trimestres en Sample.Basic, que es la generación 2 de la dimensión Market.

Note:

En la base de datos Sample.Basic, Qtr1 y Qtr4 están en la misma capa. Esto significa que Qtr1 y Qtr4 también están en la misma generación. Sin embargo, en una base de datos diferente con una jerarquía irregular, Qtr1 y Qtr4 pueden no estar necesariamente en el mismo nivel, aunque estén en la misma generación. Por ejemplo, si la jerarquía del trimestre 1 aumenta a semanas y la jerarquía del trimestre 4 se detiene en meses, el trimestre 1 es un nivel superior al trimestre 4, pero aún se encuentran en la misma capa.

Ejercicio 8: Uso de la Función Members

Utilice la función Miembros para devolver todos los miembros de una generación o nivel especificado. Cuando se utiliza con un argumento de capa, la sintaxis es:

Members (layer)

donde el argumento layer indica la generación o el nivel de miembros que se van a devolver.

Note:

Una sintaxis alternativa para los miembros es layer.Members.

Para utilizar la función Miembros:

  1. Abra qry_blank.txt, la plantilla de consulta que ha creado en Creación de una plantilla de consulta MDX.

  2. Suprima las llaves {}, que son innecesarias cuando utiliza una función para devolver un juego.

  3. Utilice la función Miembros y la función Niveles para seleccionar todos los miembros de nivel 0 en la dimensión Mercado de Sample.Basic:

    SELECT
      Members(Market.levels(0))
    ON COLUMNS
    FROM Sample.Basic
  4. Guarde la consulta como qry_members_func.txt.

  5. Pegue la consulta en el cliente MaxL y ejecútela, como se describe en el primer ejercicio (en Juegos MDX y Tuples).

    Resultados: Se devuelven todos los estados de la dimensión Mercado.

Utilizar un eje de segmentación para definir el punto de vista de consulta MDX

Un eje de segmento es una forma de limitar una consulta MDX para que tenga en cuenta solo un área específica del cubo de Essbase. Aprenda a utilizar la segmentación en la cláusula WHERE probando el ejercicio de ejemplo.

La segmentación, si se utiliza, debe estar en la sección WHERE de una consulta MDX. Además, la sección WHERE debe ser el último componente de la consulta, siguiendo la especificación del cubo (la sección FROM):

SELECT {set}
ON axes
FROM cube
WHERE slicer

Utilice el eje de segmentación para definir el contexto de la consulta; normalmente es el contexto por defecto para todos los demás ejes.

Para seleccionar solo Ventas reales en el cubo Sample.Basic, excluidas las ventas presupuestadas, la cláusula WHERE puede tener el siguiente aspecto:

WHERE ([Actual], [Sales])

Puesto que (Actual, Sales) está especificado en el eje de segmentación, no es necesario incluirlos en las especificaciones del juego ON AXIS(n).

Note:

La misma dimensión no puede aparecer en otros ejes y en el eje divisor. Para filtrar un eje mediante criterios de su propia dimensión, puede utilizar una subselección.

Ejercicio 9: Limitación de los resultados con un eje de segmentación

Para utilizar el eje de segmentación para limitar los resultados:

  1. Abra gry_crossjoin_func.txt, la consulta creada en el ejercicio 6 de Uso de funciones MDX para juegos de compilación.

  2. Pegue la consulta en el cliente MaxL y ejecútela, como se describe en el primer ejercicio (en Juegos MDX y Tuples).

    Observe los resultados en una de las celdas de datos; por ejemplo, observe que la primera tupla, ([Cola],[East],[Sales],[Qtr1]), tiene un valor de 5731.

  3. Agregue un eje de segmentación para limitar los datos devueltos solo a los valores presupuestados.

    SELECT
      CrossJoin ({[100-10]}, {[East],[West],[South],[Central]})
    ON COLUMNS,
      CrossJoin (
        {[Sales],[COGS],[Margin %],[Profit %]}, {[Qtr1]}
      )
    ON ROWS
    FROM Sample.Basic
    WHERE (Budget)
  4. Pegue la consulta en el cliente MaxL y ejecútela.

  5. Observe que el valor de la tupla ([Cola],[East],[Sales],[Qtr1]) ahora es 5020.

  6. Guarde la consulta como qry_slicer_axis.txt.

Funciones de relaciones MDX comunes

Las funciones de relación MDX devuelven conjuntos o miembros basados en relaciones jerárquicas de miembros en el esquema de cubo de Essbase.

Las siguientes funciones de relación MDX devuelven conjuntos.

Tabla 28-5 Lista de funciones de relación MDX que devuelven juegos

Función de relación Descripción

Secundarios

Devuelve los hijos del miembro de entrada.

Hermanos

Devuelve los hermanos del miembro de entrada.

Descendientes

Devuelve los descendientes de un elemento, con diferentes opciones.

Las siguientes funciones de relación MDX devuelven un único miembro en lugar de un conjunto:

Tabla 28-6 Lista de funciones de relación MDX que devuelven un único miembro

Función de relación Descripción

Ascendiente

Devuelve un ascendiente en la capa especificada.

Primo

Devuelve un miembro hijo en la misma posición que un miembro de otro antecesor.

Principal

Devuelve el padre del miembro de entrada.

Primer secundario

Devuelve el primer hijo del miembro de entrada.

Último secundario

Devuelve el último hijo del miembro de entrada.

Primer hermano

Devuelve el primer hijo del padre del miembro de entrada.

Último hermano

Devuelve el último hijo del padre del miembro de entrada.

Ejercicio 10: Prueba algunos ejemplos de funciones de relación de la documentación

Para aprender cómo funcionan las funciones de relación:

  1. Haga clic en un enlace a una función de una de las tablas anteriores o haga clic en Secundarios.

  2. Lea el ejemplo y copie la consulta SELECT en el portapapeles.

  3. Pegue la consulta en el cliente MaxL, agregue un punto y coma de cierre y ejecute la consulta, como se describe en el primer ejercicio (en Juegos MDX y Tuples).

Funciones MDX para Definir Operaciones

Puede utilizar estas funciones de MDX con Essbase para comparar, unir, combinar o reducir conjuntos: CrossJoin, CrossJoinAttribute, Distinct, Except, Generate, Head, Intersect, Subset, Tail y Union.

Aprenda la diferencia entre las funciones Intersect y Union probando los ejercicios.

Las siguientes funciones de juego funcionan en juegos de entrada sin obtener más información de un cubo:

Tabla 28-7 Lista de funciones de conjunto puro

Función Pure Set Descripción

CrossJoin, CrossJoinAttribute

Devuelve una sección cruzada de dos conjuntos de dimensiones diferentes.

Distinto

Elimina las tuplas duplicadas de un conjunto.

Excepto

Devuelve un subconjunto que contiene las diferencias entre dos conjuntos.

Generar

Función iterativa. Para cada tupla en set1, devuelve set2.

Head

Devuelve los primeros miembros n o tuplas presentes en un conjunto.

Intersección

Devuelve la intersección de dos conjuntos de entrada.

Subjuego

Devuelve un subconjunto de un conjunto donde el subconjunto es un rango de tuplas especificado numéricamente.

Cola

Devuelve los últimos n miembros o tuplas presentes en un conjunto.

Unión

Devuelve la unión de dos conjuntos de entrada.

Ejercicio 11: Uso de la Función Intersect

La función MDX Intersect devuelve la intersección de dos juegos de entrada, opcionalmente, retiene los duplicados. Utilícelo para comparar conjuntos mediante la búsqueda de tuplas presentes en ambos conjuntos.

La sintaxis que se debe seguir es:

Intersect (set, set [,ALL])
  1. Abra qry_blank.txt, la plantilla de consulta que ha creado en Creación de una plantilla de consulta MDX.

  2. Suprima las llaves de juego vacías {} del eje y sustitúyalas por Intersect(). Deje algo de espacio dentro de las llaves Intersect para agregar más código. Por ejemplo:

    SELECT
       Intersect (
    
       )
    ON COLUMNS
    FROM Sample.Basic
  3. Agregue dos pares de llaves separados por comas para utilizarlos como marcadores de posición para los dos argumentos definidos que proporcionará a la función Intersect. Por ejemplo:

    SELECT
       Intersect ( 
       { },
       { }
       )
    ON COLUMNS
    FROM Sample.Basic
  4. Especifique los secundarios de East como el primer argumento definido. Por ejemplo:

    SELECT
       Intersect (
       { [East].children },
       { }
       )
    ON COLUMNS
    FROM Sample.Basic
  5. Para el segundo argumento de conjunto, especifique todos los miembros de la dimensión Mercado que tienen un ADU de "Major Market". Por ejemplo:

    SELECT
       Intersect (
       { [East].children },
       { UDA([Market], "Major Market") }
       )
    ON COLUMNS
    FROM Sample.Basic
  6. Pegue la consulta en el cliente MaxL y ejecútela, como se describe en el primer ejercicio (en Juegos MDX y Tuples).

    Todos los hijos de East que tienen un ADU de "Major Market" se devuelven. Por ejemplo:

    New York   Massachusetts   Florida
    
    8202       6172            5029
  7. Guarde la consulta como qry_intersect_func.txt.

Ejercicio 12: Uso de la función Unión

La función Union de MDX une dos conjuntos de entrada, manteniendo opcionalmente duplicados. Utilícelo para combinar dos conjuntos en un solo conjunto.

La sintaxis que se debe seguir es:

Union (set, set [,ALL])
  1. Abra qry_intersect_func.txt, la consulta creada en el ejercicio anterior.

  2. Sustituya Intersect por Union.

  3. Guarde la consulta como qry_union_func.txt.

  4. Pegue la consulta en el cliente MaxL y ejecútela.

    Mientras que Intersect devolvió un conjunto que contenía solo a aquellos niños del Este que tienen un ADU de Mercado Mayor, Union devuelve un conjunto más grande. Incluye a todos los niños del Este, Y todos los miembros del Mercado que tienen un ADU de Mercado Mayor.

     (New York)      (Massachusetts) (Florida)       (Connecticut)   (New Hampshire) (East)          (California)    (Texas)         (Central)       (Illinois)      (Ohio)          (Colorado)
    +---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------
                8202            6712            5029            3093            1125           24161           12964    6425           38262           12577            4384            7227
    

Conjuntos y miembros reutilizables: MDX WITH Section

La definición de miembros y juegos en la sección WITH de la consulta MDX ayuda a filtrar datos sin que esto afecte al cubo. Un miembro calculado es un miembro lógico que sólo existe en la consulta. Un juego con nombre es un juego lógico que solo existe en la consulta. Prueba un ejercicio de muestra.

Los miembros calculados y los juegos con nombre son entidades lógicas en la consulta que se pueden utilizar varias veces durante la vida útil de la consulta. Los miembros calculados y los juegos con nombre pueden ahorrar tiempo en líneas de código escritas y en tiempo de ejecución. La sección WITH opcional al principio de una consulta MDX es donde se definen los miembros calculados y/o los juegos con nombre.

La siguiente consulta utiliza un miembro calculado:

WITH
MEMBER [Measures].[Max Qtr2 Sales] AS
  'Max (
    {[Year].[Qtr2]},
    [Measures].[Sales]
  )'
SELECT
{ [Measures].[Max Qtr2 Sales] } on columns,
{ [Product].children } on rows
FROM Sample.Basic

La siguiente consulta utiliza un juego con nombre:

WITH SET [NewSet] 
AS 'CrossJoin([Product].Children, [Market].Children)'
SELECT
   Filter([NewSet], NOT IsEmpty([NewSet].CurrentTuple)) 
ON COLUMNS
FROM Sample.Basic
WHERE
   {[Sales]}

Miembros Calculados

Un miembro calculado es un miembro hipotético que existe durante la ejecución de la consulta. Los miembros calculados permiten realizar análisis complejos sin necesidad de agregar miembros físicos al esquema del cubo. Los miembros calculados almacenan los resultados de cálculo realizados en los miembros físicos.

Utilice las siguientes directrices para los nombres de miembros calculados:

  • Asocie el miembro calculado a una dimensión; por ejemplo, para asociar el miembro MyCalc a la dimensión Measures, asígnele el nombre [Measures].[MyCalc].

  • No utilice nombres de miembros reales para asignar un nombre a los miembros calculados; por ejemplo, no asigne un nombre a un miembro calculado [Measures].[Sales], ya que Sales ya existe en la dimensión Measures.

Se recomienda definir el orden de resolución para cada miembro calculado cuando se utilizan varios miembros calculados para crear ratios o totales personalizados.

Juegos con nombre

Los juegos de nombres se definen mediante palabras clave WITH SET, antes de la parte SELECT de la consulta. Esto resulta útil porque puede hacer referencia al juego por nombre al crear la parte SELECT de la consulta.

Por ejemplo, el juego denominado Best5Prods identifica un juego de los cinco productos más vendidos en diciembre:

WITH
SET [Best5Prods]
  AS
  'Topcount (
    [Product].members,
    5,
    ([Measures].[Sales], [Scenario].[Actual], [Year].[Dec])
  )'
SELECT [Best5Prods] ON AXIS(0),
  {[Year].[Dec]} ON AXIS(1)
FROM Sample.Basic

Ejercicio 13: Creación de un Miembro Calculado

Este ejercicio utiliza la función Max, una función MDX común para los cálculos. Devuelve el máximo de los valores encontrados en las tuplas de un conjunto.

La sintaxis que se debe seguir es:

Max (set, numeric_value)
  1. Abra qry_blank_2ax.txt, la plantilla de consulta que ha creado en el ejercicio 3 de Diseño de consulta MDX con ejes y especificación de cubo.

    SELECT
      {}
    ON COLUMNS,
      {}
    ON ROWS
    FROM Sample.Basic
  2. En el juego de ejes de fila, especifique los secundarios de Product. Por ejemplo:

    SELECT
      {}
    ON COLUMNS,
      {[Product].children}
    ON ROWS
    FROM Sample.Basic
  3. Al principio de la consulta, agregue un marcador de posición para la especificación de miembro calculada. Por ejemplo:

    WITH MEMBER [].[]
     AS ''
    SELECT
      {}
    ON COLUMNS,
      {[Product].children}
    ON ROWS
    FROM Sample.Basic
  4. Para asociar el miembro calculado a la dimensión Measures y asignarle el nombre Max Qtr2 Sales, agregue esta información a la especificación del miembro calculado. Por ejemplo:

    WITH MEMBER [Measures].[Max Qtr2 Sales]
     AS ''
    SELECT
      {}
    ON COLUMNS,
      {[Product].children}
    ON ROWS
    FROM Sample.Basic
  5. Después de la palabra clave AS y dentro de las comillas simples, defina la lógica para el miembro calculado denominado Max Qtr2 Sales.

    Utilice la función Max con el conjunto para evaluar (Qtr2) como el primer argumento y la medida para evaluar (Sales) como el segundo argumento. Por ejemplo:

    WITH MEMBER [Measures].[Max Qtr2 Sales]
      AS '
      Max (
        {[Year].[Qtr2]},
        [Measures].[Sales]
      )'
    SELECT
      {}
    ON COLUMNS,
      {[Product].children}
    ON ROWS
    FROM Sample.Basic
    
  6. El miembro calculado Max Qtr2 Sales se define en la sección WITH. Para utilizarlo en una consulta, haga referencia a ella en uno de los ejes de la parte SELECT de la consulta. Por ejemplo:

    WITH MEMBER [Measures].[Max Qtr2 Sales]
      AS '
      Max (
        {[Year].[Qtr2]},
        [Measures].[Sales]
      )'
    SELECT
      {[Measures].[Max Qtr2 Sales]}
    ON COLUMNS,
      {[Product].children}
    ON ROWS
    FROM Sample.Basic
    
  7. Guarde la consulta como gry_calc_member.txt.

  8. Pegue la consulta en el cliente MaxL y ejecútela, como se describe en el primer ejercicio (en Juegos MDX y Tuples).

    Los resultados de la consulta se muestran a continuación:

    Tabla 28-8 Resultados: Creación de un Miembro Calculado

    La imagen de un espacio se utiliza para las celdas de thead vacías Ventas máximas de trimestre 2

    100

    27.187

    200

    27.401

    300

    25.736

    400

    21.355

    Dieta

    26.787

Note:

Hay muchos más ejemplos disponibles en la documentación de referencia de MDX. Consulte MDX With Section.

Funciones de MDX iterativas

Las funciones iterativas de MDX realizan un bucle a través de juegos de datos en el cubo de Essbase, realizando cualquier condición de búsqueda que especifique para adaptar los resultados. Vea un ejemplo que filtra datos según una prueba booleana.

Tabla 28-9 Lista de funciones iterativas de MDX

Función Descripción

Filtro

Devuelve el subjuego de tuplas en set para el que el valor de la condición de búsqueda es TRUE.

IIF

Realiza una prueba condicional y devuelve una expresión o conjunto numérico adecuado dependiendo de si la prueba se evalúa como TRUE o FALSE.

Caso

Realiza pruebas condicionales y devuelve los resultados especificados.

Generar

Para cada tupla en set1, devuelve set2.

Ejemplo de función de filtro

La siguiente consulta utiliza la función Filtro de MDX para devolver todos los miembros de dimensión de mercado para los que la expresión IsChild([Market].CurrentMember,[East]) devuelve TRUE. La consulta devuelve todos los secundarios de East.

SELECT
  Filter([Market].Members,
    IsChild([Market].CurrentMember,[East])
  )
ON COLUMNS
FROM Sample.Basic

La función de filtro en MDX es comparable con el comando RESTRICT de Report Writer.

Manejar datos faltantes con MDX

Al consultar un cubo de Essbase mediante MDX, puede utilizar las palabras clave NO EMPTY en los ejes para suprimir las celdas que no contienen ningún valor. Las funciones MDX que manejan los valores faltantes incluyen Promedio, CoalesceEmpty, IsEmpty, NonEmptyCount y NonEmptySubset. Las propiedades NONEMPTYMEMBER y NONEMPTYTUPLE ayudan a filtrar los valores vacíos de los juegos de datos grandes.

La inclusión de las palabras clave opcionales NON EMPTY antes de la especificación de juego en un eje provoca la supresión de segmentos en ese eje que contienen valores #MISSING por completo.

A continuación se muestra la sintaxis de especificación de eje con NO EMPTY:

<axis_specification> ::=
  [NON EMPTY] <set> ON
  COLUMNS | ROWS | PAGES | CHAPTERS |
  SECTIONS | AXIS (<unsigned_integer>)

Para cualquier tupla determinada en un eje (como (Qtr1, Actual)), un segmento consta de las celdas que surgen de la combinación de esta tupla con todas las tuplas de todos los demás ejes. Si todos estos valores de celda son #MISSING, la palabra clave NON EMPTY elimina la tupla.

Por ejemplo, si incluso un valor de una fila no está vacío, se devuelve toda la fila. Si se incluye NON EMPTY al principio de la especificación del eje de fila, se eliminaría el siguiente segmento de fila del juego devuelto por una consulta:

Una fila de valores #MISSING para el trimestre 1, real

Además de suprimir los valores que faltan con NON EMPTY, puede utilizar las siguientes funciones MDX para manejar los resultados #MISSING:

  • CoalesceEmpty, que busca expresiones de valores numéricos para valores que no son #MISSING

  • IsEmpty, que devuelve TRUE si el valor de la expresión de valor numérico de entrada se evalúa como #MISSING

  • Avg (Promedio), que omite los valores que faltan de las medias a menos que utilice el indicador IncludeEmpty opcional

La función MDX NonEmptyCount devuelve el recuento del número de tuplas de un conjunto que evalúa valores que no están vacios. Cada tupla se evalúa e incluye en el recuento devuelto por esta función. Si se especifica la expresión de valor numérico, se evalúa en el contexto de cada tupla y se devuelve el recuento de valores que no son #Missing.

Sólo en cubos de almacenamiento agregado, la función NonEmptyCount se optimiza para que el cálculo del recuento distinto para todas las celdas se pueda realizar explorando el cubo solo una vez. Sin esta optimización, la base de datos se analiza tantas veces como el número de celdas que corresponden al recuento distinto. La optimización NonEmptyCount se dispara cuando una fórmula de miembro de esquema tiene la siguiente sintaxis:

NONEMPTYCOUNT(set, measure, exclude_missing)

El parámetro exclude_missing soporta la optimización NonEmptyCount en bases de datos agregadas al mejorar el rendimiento de una consulta que consulta métricas que realizan un cálculo de recuento distinto.

Las propiedades de optimización NONEMPTYMEMBER y NONEMPTYTUPLE permiten a MDX consultar grandes juegos de miembros o tuplas mientras omite la ejecución de fórmulas en valores que no contribuyen y que solo contienen datos #MISSING.

  • Utilice una sola cláusula de propiedad NONEMPTYMEMBER al principio de un miembro calculado o una expresión de fórmula para indicar a Essbase que el valor de la fórmula o el miembro calculado está vacío cuando alguno de los miembros especificados en nonempty_member_list está vacío.

  • Utilice una sola cláusula de propiedad NONEMPTYTUPLE al principio de un miembro calculado o una expresión de fórmula para indicar a Essbase que el valor de la fórmula o el miembro calculado está vacío cuando el valor de celda en la tupla proporcionada en nonempty_member_list está vacío.

Con un conjunto de entradas, la función MDX NonEmptySubset devuelve un subconjunto de ese conjunto de entradas en el que todas las tuplas se evalúan como no vacías. Se puede especificar una expresión de valor opcional para la comprobación que no está vacía. Esta función puede ayudar a optimizar las consultas que se basan en un conjunto grande para el que se sabe que el conjunto de combinaciones no vacías es pequeño. NonEmptySubset reduce el tamaño del juego en presencia de una métrica; por ejemplo, puede solicitar el subjuego no vacío de descendientes para unidades específicas.

Variables en consultas MDX

Puede utilizar variables de sustitución predefinidas de Essbase en MDX para hacer referencia a información que cambia con frecuencia sin cambiar las consultas. Para hacer referencia a una variable en una consulta o expresión MDX, introduzca el nombre de la variable precedido por un ampersand (&).

Las variables de sustitución de Essbase actúan como marcadores de posición para la información que cambia regularmente. Las variables de sustitución se definen en el nivel global, de aplicación o de cubo de Essbase y se asigna un valor a cada variable. El valor se puede cambiar en cualquier momento. Debe tener el rol de al menos Database Manager para definir las variables de sustitución. Consulte Implantación de variables para cambiar la información.

Para utilizar una variable de sustitución en una expresión MDX, considere:

  • La variable de sustitución debe ser accesible desde la aplicación y el cubo que está consultando.

  • Una variable de sustitución tiene dos componentes: el nombre y el valor.

  • El nombre de variable puede ser una combinación alfanumérica cuyo tamaño máximo se especifica en Límites de nombre y artefacto relacionado. No utilice espacios, puntuación ni corchetes ([ ]) en los nombres de variables de sustitución utilizados en MDX.

  • En el punto de la expresión en el que desea utilizar la variable, introduzca el nombre de la variable precedido por un ampersand (&); por ejemplo, donde CurMonth es el nombre de la variable de sustitución definida en el servidor, incluya &CurMonth en la expresión MDX.

  • Al realizar la recuperación, Essbase sustituye el nombre de variable por el valor de sustitución y ese valor lo utiliza la expresión MDX.

Por ejemplo, la expresión se escribe mostrando el nombre de variable CurQtr precedido por &:

SELECT 
  {[&CurQtr]}
ON COLUMNS
FROM Sample.Basic

Cuando se evalúa la expresión, el valor actual (Qtr1) se sustituye por el nombre de variable, de modo que la expresión que se ejecuta sea eficaz:

SELECT 
  {[Qtr1]}
ON COLUMNS
FROM Sample.Basic

Consulta de propiedades en MDX

Las propiedades describen determinadas características de los datos y metadatos de Essbase. MDX permite escribir consultas que recuperan y analizan datos en función de las propiedades de Essbase, que pueden ser intrínsecas o personalizadas. Puede llamar a las propiedades en los ejes de consulta MDX o en una expresión de valor.

Propiedades intrínsecas y personalizadas

En MDX, properties describe ciertas características de los datos y metadatos. MDX permite escribir consultas que utilizan propiedades para recuperar y analizar datos. Las propiedades pueden ser intrínsecas o personalizadas.

Propiedades intrínsecas

Las propiedades intrínsecas se definen para miembros en todas las dimensiones. Las propiedades de miembro intrínsecas definidas para todos los miembros en un esquema de base de datos de Essbase son MEMBER_NAME, MEMBER_ALIAS, LEVEL_NUMBER, GEN_NUMBER, IS_EXPENSE, COMMENTS y MEMBER_UNIQUE_NAME.

Consulte MDX Intrinsic Properties para obtener una descripción de cada una.

Propiedades personalizadas

MDX en Essbase admite dos tipos de propiedades personalizadas: propiedades de atributo y propiedades de ADU. Las propiedades de atributo se definen mediante las dimensiones de atributo en un esquema. En la base de datos Sample.Basic, la dimensión de atributo Pkg Type describe las características de empaquetado de los miembros en la dimensión Product. Esta información se puede consultar en MDX con el nombre de propiedad [Pkg Type].

Las propiedades de atributo solo se definen para dimensiones específicas y solo para un nivel específico en cada dimensión. Por ejemplo, en el esquema Sample.Basic, [Ounces] es una propiedad de atributo definida solo para miembros de la dimensión Product y esta propiedad tiene valores válidos solo para los miembros de nivel 0 de la dimensión Product. La propiedad [Ounces] no existe para otras dimensiones, como Market. La propiedad [Ounces] para un miembro que no sea de nivel 0 en la dimensión Product es un valor NULL. Las propiedades de atributo de un esquema se identifican por los nombres de las dimensiones de atributo de ese esquema.

Las propiedades personalizadas también incluyen UDA. Por ejemplo, [Major Market] es una propiedad de ADU definida en los miembros de la dimensión Market. Devuelve un valor TRUE si se define un ADU de [Major Market] para un miembro y FALSE de lo contrario.

Consulte también Propiedades personalizadas de MDX.

Llamada a Propiedades en un Eje de Consulta

Puede mostrar las combinaciones de dimensiones y propiedades para cada juego de ejes. Cuando se ejecuta una consulta, la propiedad especificada se evalúa para todos los miembros de la dimensión especificada e se incluye en el juego de resultados.

Por ejemplo, en el eje de columna, la siguiente consulta devuelve la información GEN_NUMBER para cada miembro de dimensión Market. En el eje de filas, la consulta devuelve información MEMBER_ALIAS para cada miembro de dimensión Product.

SELECT
  [Market].Members
    DIMENSION PROPERTIES [Market].[GEN_NUMBER] on columns,
  Filter ([Product].Members, Sales > 5000)
    DIMENSION PROPERTIES [Product].[MEMBER_ALIAS] on rows
FROM Sample.Basic

Al consultar propiedades de miembro mediante la sección DIMENSION PROPERTIES de un eje, una propiedad se puede identificar por el nombre de dimensión y el nombre de la propiedad, o mediante el propio nombre de propiedad. Cuando se utiliza un nombre de propiedad por sí mismo, se devuelve esa información de propiedad para todos los miembros de todas las dimensiones de ese eje, para el que se aplica esa propiedad.

En la siguiente consulta, la propiedad MEMBER_ALIAS se evalúa en el eje de filas para las dimensiones Year y Product.

SELECT [Market].Members
  DIMENSION PROPERTIES [Market].[GEN_NUMBER] on columns,
  CrossJoin([Product].Children, Year.Children)
    DIMENSION PROPERTIES [MEMBER_ALIAS] on rows
FROM Sample.Basic

Llamada a Propiedades en una Expresión de Valor

Las propiedades se pueden utilizar dentro de expresiones de valor en una consulta MDX. Por ejemplo, puede filtrar un juego según una expresión de valor que utilice propiedades de miembros en el juego de entrada.

La siguiente consulta devuelve todos los productos con cafeína que se empaquetan en latas.

SELECT
   Filter([Product].levels(0).members,
    [Product].CurrentMember.Caffeinated and
    [Product].CurrentMember.[Pkg Type] = "Can")
       Dimension Properties
       [Caffeinated], [Pkg Type] on columns
FROM Sample.Basic

La siguiente consulta calcula el valor [BudgetedExpenses] en función de si el mercado actual es un mercado importante, utilizando el UDA [Major Market].

WITH
  MEMBER [Measures].[BudgetedExpenses] AS
    'IIF([Market].CurrentMember.[Major Market],
    [Marketing] * 1.2, [Marketing])'

SELECT  {[Measures].[BudgetedExpenses]} ON COLUMNS,
  [Market].Members ON ROWS
FROM Sample.Basic
WHERE ([Budget])

Tipo de valor de propiedades

El valor de una propiedad MDX en Essbase puede ser un tipo numérico, booleano o de cadena. Las propiedades MEMBER_NAME y MEMBER_ALIAS devuelven valores de cadena. Las propiedades LEVEL_NUMBER y GEN_NUMBER devuelven valores numéricos.

Las propiedades de atributo devuelven valores numéricos, booleanos o de cadena basados en el tipo de dimensión de atributo. Por ejemplo, en Sample.Basic, la propiedad de atributo [Ounces] es una propiedad numérica. La propiedad de atributo [Pkg Type] es una propiedad de cadena. La propiedad de atributo [cafeinado] es una propiedad booleana.

Essbase permite dimensiones de atributos con tipos de fecha. Las propiedades de tipo de fecha se tratan como propiedades numéricas en MDX. Al comparar estos valores de propiedad con fechas, utilice la función Hoy para convertir cadenas de fecha a numéricas antes de la comparación.

La siguiente consulta devuelve todos los miembros de dimensión Product que se han introducido en la fecha 25/03/2018. Debido a que la propiedad [Intro Date] es un tipo de fecha, la función TODATE se debe utilizar para convertir la cadena de fecha "03-25-2018" en un número antes de compararla.

SELECT
  Filter ([Product].Members,
    [Product].CurrentMember.[Intro Date] = 
    TODATE("mm-dd-yyyy","03-25-2018"))ON COLUMNS
FROM Sample.Basic

Cuando se utiliza una propiedad en una expresión de valor, debe utilizarla según el tipo de valor: cadena, numérico o booleano.

También puede consultar dimensiones de atributos con rangos numéricos.

La siguiente consulta recupera datos de ventas para rangos de población pequeños, medianos y grandes.

SELECT
  {Sales} ON COLUMNS,
  {Small, Medium, Large} ON ROWS
FROM Sample.Basic

Cuando los atributos se utilizan como propiedades en una expresión de valor, puede utilizar miembros de rango para comprobar si el valor de propiedad de un miembro está dentro de un rango determinado, mediante el operador IN.

Por ejemplo, la siguiente consulta devuelve todos los miembros de la dimensión Market con el rango de población en Medium:

SELECT
  Filter(
    Market.Members, Market.CurrentMember.Population
    IN "Medium"
  )
ON AXIS(0)
FROM Sample.Basic

Valores de propiedad NULL

No todos los miembros pueden tener valores válidos para un nombre de propiedad determinado. Por ejemplo, la propiedad MEMBER_ALIAS devuelve un nombre alternativo para un miembro determinado como se define en el esquema; sin embargo, no todos los miembros pueden tener alias definidos. En estos casos, se devuelve un valor NULL para aquellos miembros que no tienen alias.

En la siguiente consulta,

SELECT
  [Year].Members
   DIMENSION PROPERTIES [MEMBER_ALIAS]
ON COLUMNS
FROM Sample.Basic

Ninguno de los miembros de la dimensión Year tiene alias definidos para ellos. Por lo tanto, la consulta devuelve valores NULL para la propiedad MEMBER_ALIAS para los miembros de la dimensión Year.

Las propiedades de atributo se definen para los miembros de una dimensión específica y un nivel específico de esa dimensión. En la base de datos Sample.Basic, la propiedad [Ounces] solo se define para los miembros de nivel 0 de la dimensión Product.

Por lo tanto, si consulta la propiedad [Ounces] de un miembro de la dimensión Market, como se muestra en la siguiente consulta, obtendrá un error de sintaxis:

SELECT
  Filter([Market].members,
    [Market].CurrentMember.[Ounces] = 32) ON COLUMNS
FROM Sample.Basic

Además, si consulta la propiedad [Ounces] de un miembro que no sea de nivel 0 de la dimensión, obtendrá un valor NULL.

Al utilizar valores de propiedad en expresiones de valor, puede utilizar la función IsValid() para comprobar los valores NULL. La siguiente consulta devuelve todos los miembros de la dimensión Product con un valor de propiedad [Ounces] de 12, después de eliminar los miembros con valores NULL.

SELECT
  Filter([Product].Members,
    IsValid([Product].CurrentMember.[Ounces]) AND
    [Product].CurrentMember.[Ounces] = 12) 
ON COLUMNS
FROM Sample.Basic