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á:
-
un editor de texto, para escribir las consultas MDX.
-
Acceso a una instancia de Essbase con Sample Basic.
Si necesita obtener Sample Basic, siga los pasos de Creación de un cubo de muestra para explorar propiedades de esquema (simplemente realice la importación y omita la configuración de las propiedades de esquema).
-
Cliente MaxL, para emitir las consultas a Essbase.
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.BasicSELECT 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:
-
Cree una carpeta para almacenar consultas de ejemplo que se puedan ejecutar en el cubo Sample.Basic.
-
Mediante un editor de texto, escriba el siguiente código en un archivo en blanco:
SELECT {} ON COLUMNS FROM Sample.Basic -
Guarde el archivo como
qry_blank.txt.
Conjuntos MDX y tuplas
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 comoStrToMbr("&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:
-
Abra
qry_blank.txt, la plantilla de consulta que ha creado a partir de Creación de una plantilla de consulta MDX. -
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 -
Guarde la consulta como
qry_first.txt. -
Asegúrese de que Essbase se está ejecutando.
-
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"; -
Copie y pegue toda la consulta SELECT en el cliente MaxL, pero aún no pulse Intro.
-
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).
-
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.BasicSe 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:
-
Abra
qry_blank.txt, la plantilla de consulta que ha creado en Creación de una plantilla de consulta MDX. -
Agregue una coma después de
ON COLUMNSy, a continuación, agregue un marcador de posición para un segundo eje agregandoON ROWS:SELECT {} ON COLUMNS, {} ON ROWS FROM Sample.Basic -
Guarde la nueva plantilla de consulta como
qry_blank_2ax.txt. -
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.BasicPuesto 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.
-
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 -
Guarde la consulta como
qry_2ax.txt. -
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
| 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:
-
Abra
qry_blank_2ax.txt, la plantilla de consulta que creó en el ejercicio anterior. -
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 -
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 -
Guarde la consulta como
qry_1ax.txt. -
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


100-10 100-20 

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
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:
-
Abra
qry_blank.txt, la plantilla de consulta que ha creado en Creación de una plantilla de consulta MDX. -
Suprima las llaves
{}, que son innecesarias cuando utiliza una función para devolver el juego. -
Utilice el operador de dos puntos para seleccionar un rango de miembros de Qtr1 a Qtr4:
SELECT [Qtr1]:[Qtr4] ON COLUMNS FROM Sample.Basic -
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.
-
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 -
Pegue la consulta en el cliente MaxL y ejecútela.
-
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:
-
Abra
qry_blank.txt, la plantilla de consulta que ha creado en Creación de una plantilla de consulta MDX. -
Sustituya las llaves
{}del eje de columnas porCrossJoin().SELECT CrossJoin () ON COLUMNS, {} ON ROWS FROM Sample.Basic -
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 -
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 -
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 -
Guarde la consulta como
qry_crossjoin_func.txt. -
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
| 100-10 | 100-10 | 100-10 | 100-10 | ||
|---|---|---|---|---|---|
|
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:
-
Abra
qry_crossjoin_func.txt, la consulta que ha creado en el ejercicio anterior. -
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 -
Guarde la consulta como
gry_children_func.txt. -
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,
StatesoRegions. -
Nombre de dimensión junto con el nombre de generación o nivel; por ejemplo,
Market.Regionsy[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].Leveldevuelve 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].Generationdevuelve 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:
-
Abra
qry_blank.txt, la plantilla de consulta que ha creado en Creación de una plantilla de consulta MDX. -
Suprima las llaves
{}, que son innecesarias cuando utiliza una función para devolver un juego. -
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 -
Guarde la consulta como
qry_members_func.txt. -
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 slicerUtilice 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:
-
Abra
gry_crossjoin_func.txt, la consulta creada en el ejercicio 6 de Uso de funciones MDX para juegos de compilación. -
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. -
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) -
Pegue la consulta en el cliente MaxL y ejecútela.
-
Observe que el valor de la tupla
([Cola],[East],[Sales],[Qtr1])ahora es 5020. -
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 |
|---|---|
|
Devuelve los hijos del miembro de entrada. |
|
|
Devuelve los hermanos del miembro de entrada. |
|
|
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 |
|---|---|
|
Devuelve un ascendiente en la capa especificada. |
|
|
Devuelve un miembro hijo en la misma posición que un miembro de otro antecesor. |
|
|
Devuelve el padre del miembro de entrada. |
|
|
Devuelve el primer hijo del miembro de entrada. |
|
|
Devuelve el último hijo del miembro de entrada. |
|
|
Devuelve el primer hijo del padre del miembro de entrada. |
|
|
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:
-
Haga clic en un enlace a una función de una de las tablas anteriores o haga clic en Secundarios.
-
Lea el ejemplo y copie la consulta SELECT en el portapapeles.
-
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
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 |
|---|---|
|
Devuelve una sección cruzada de dos conjuntos de dimensiones diferentes. |
|
|
Elimina las tuplas duplicadas de un conjunto. |
|
|
Devuelve un subconjunto que contiene las diferencias entre dos conjuntos. |
|
|
Función iterativa. Para cada tupla en set1, devuelve set2. |
|
|
Devuelve los primeros miembros n o tuplas presentes en un conjunto. |
|
|
Devuelve la intersección de dos conjuntos de entrada. |
|
|
Devuelve un subconjunto de un conjunto donde el subconjunto es un rango de tuplas especificado numéricamente. |
|
|
Devuelve los últimos n miembros o tuplas presentes en un conjunto. |
|
|
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])-
Abra
qry_blank.txt, la plantilla de consulta que ha creado en Creación de una plantilla de consulta MDX. -
Suprima las llaves de juego vacías
{}del eje y sustitúyalas porIntersect(). Deje algo de espacio dentro de las llaves Intersect para agregar más código. Por ejemplo:SELECT Intersect ( ) ON COLUMNS FROM Sample.Basic -
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 -
Especifique los secundarios de East como el primer argumento definido. Por ejemplo:
SELECT Intersect ( { [East].children }, { } ) ON COLUMNS FROM Sample.Basic -
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 -
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 -
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])-
Abra
qry_intersect_func.txt, la consulta creada en el ejercicio anterior. -
Sustituya Intersect por Union.
-
Guarde la consulta como
qry_union_func.txt. -
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.BasicLa 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.BasicEjercicio 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)-
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 -
En el juego de ejes de fila, especifique los secundarios de Product. Por ejemplo:
SELECT {} ON COLUMNS, {[Product].children} ON ROWS FROM Sample.Basic -
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 -
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 -
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 -
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 -
Guarde la consulta como
gry_calc_member.txt. -
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

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 |
|---|---|
|
Devuelve el subjuego de tuplas en set para el que el valor de la condición de búsqueda es TRUE. |
|
|
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. |
|
|
Realiza pruebas condicionales y devuelve los resultados especificados. |
|
|
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.BasicLa 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:

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
CurMonthes el nombre de la variable de sustitución definida en el servidor, incluya&CurMonthen 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.BasicCuando 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.BasicConsulta 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.BasicAl 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.BasicLlamada 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.BasicLa 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.BasicCuando 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.BasicCuando 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.BasicValores 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.BasicNinguno 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.BasicAdemá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