Multidimensional Expressions ( MDX ) es un lenguaje de consulta para procesamiento analítico en línea (OLAP) que utiliza un sistema de gestión de bases de datos . Al igual que SQL , es un lenguaje de consulta para cubos OLAP . [1] También es un lenguaje de cálculo, con una sintaxis similar a las fórmulas de una hoja de cálculo.
El lenguaje MultiDimensional eXpressions (MDX) proporciona una sintaxis especializada para consultar y manipular los datos multidimensionales almacenados en cubos OLAP . [1] Si bien es posible traducir algunos de estos a SQL tradicional, con frecuencia requeriría la síntesis de expresiones SQL torpes incluso para expresiones MDX muy simples. MDX ha sido adoptado por una amplia mayoría de proveedores de OLAP y se ha convertido en el estándar para los sistemas OLAP.
MDX se introdujo por primera vez como parte de la especificación OLE DB para OLAP en 1997 de Microsoft . Fue inventado por un grupo de ingenieros de SQL Server , incluido Mosha Pasumansky . La especificación fue seguida rápidamente por el lanzamiento comercial de Microsoft OLAP Services 7.0 en 1998 y más tarde por Microsoft Analysis Services . La última versión de OLE DB para la especificación OLAP fue publicada por Microsoft en 1999.
Si bien no era un estándar abierto, sino más bien una especificación propiedad de Microsoft, fue adoptado por una amplia gama de proveedores de OLAP.
La especificación XML para análisis remite a la especificación OLE DB para OLAP para obtener detalles sobre el lenguaje de consulta MDX. En Analysis Services 2005, Microsoft agregó algunas extensiones del lenguaje de consulta MDX como subselecciones. Productos como Microsoft Excel 2007 comenzaron a utilizar estas nuevas extensiones de lenguaje de consulta MDX. Algunos se refieren a esta variante más nueva de MDX como MDX 2005.
En 2001, el Consejo XMLA lanzó el estándar XML para Análisis (XMLA), que incluía mdXML como lenguaje de consulta. En la especificación XMLA 1.1, mdXML es esencialmente MDX envuelto en la <Statement>
etiqueta XML.
Hay seis tipos de datos principales en MDX
Aggregate
(número), UniqueName
(cadena), .Value
(número o cadena), etc.[Time]
o puede devolverse mediante una función MDX, por ejemplo .Dimension
. La jerarquía es una jerarquía de dimensiones de un cubo . Puede especificarse por su nombre exclusivo, por ejemplo, [Time].[Fiscal]
o puede devolverse mediante una función MDX, por ejemplo .Hierarchy
. Las jerarquías están contenidas dentro de las dimensiones. ( OLEDB para la especificación OLAP MDX no distingue entre tipos de datos de dimensión y jerarquía. Algunas implementaciones, como Microsoft Analysis Services, los tratan de manera diferente ) .[Time].[Fiscal].[Month]
o puede devolverse mediante una función MDX, por ejemplo .Level
.[Time].[Fiscal].[Month].[August 2006]
, por nombre calificado, por ejemplo, [Time].[Fiscal].[2006].[Q3].[August 2006]
o devuelto por una función MDX, por ejemplo .PrevMember
,, .Parent
etc. .FirstChild
Tenga en cuenta que todos los miembros son específicos de una jerarquía. Si el mismo producto es miembro de dos jerarquías diferentes ( [Product].[ByManufacturer]
y [Product].[ByCategory]
), habrá dos miembros diferentes visibles que pueden necesitar coordinarse en conjuntos y tuplas (ver más abajo).([Time].[Fiscal].[Month].[August], [Customer].[By Geography].[All Customers].[USA], [Measures].[Sales])
o devueltas por una función MDX, por ejemplo .Item
.{([Measures].[Sales], [Time].[Fiscal].[2006]), ([Measures].[Sales], [Time].[Fiscal].[2007])}
devuelto por una función u operador MDX, por ejemplo Crossjoin
, Filter
, Order
etc.Descendants
[Product].CurrentMember.[Sales Price]
) o usando una función de acceso especial (por ejemplo, [Product].CurrentMember.Properties("Sales Price")
). En contextos limitados, MDX también permite otros tipos de datos; por ejemplo, Array se puede usar dentro de la SetToArray
función para especificar una matriz que no es procesada por MDX sino que se pasa a una función definida por el usuario en una biblioteca ActiveX. Los objetos de otros tipos de datos se representan como cadenas escalares que indican los nombres de los objetos, como el nombre del grupo de medida en la función de Microsoft o el nombre del KPI en, por ejemplo, las funciones MeasureGroupMeasures
de Microsoft .KPIValue
KPIGoal
El siguiente ejemplo, adaptado de los Libros en pantalla de SQL Server 2000, muestra una consulta MDX básica que utiliza la instrucción SELECT. Esta consulta devuelve un conjunto de resultados que contiene los importes de ventas en tienda de 2002 y 2003 para las tiendas del estado de California.
SELECCIONAR { [ Medidas ] . [ Ventas de tienda ] } EN COLUMNAS , { [ Fecha ] . [ 2002 ] , [ Fecha ] . [ 2003 ] } EN FILAS DE Ventas DONDE ( [ Tienda ] . [ EE. UU . ] . [ CA ] )
En este ejemplo, la consulta define la siguiente información del conjunto de resultados
Nota: Puede especificar hasta 128 ejes de consulta en una consulta MDX.
Si crea dos ejes, uno debe ser el eje de la columna y el otro debe ser el eje de la fila, aunque no importa en qué orden aparecen dentro de la consulta. Si crea una consulta que tiene un solo eje, debe ser el eje de la columna. Los corchetes alrededor del identificador de objeto en particular son opcionales siempre que el identificador de objeto no sea una de las palabras reservadas y no contenga ningún carácter que no sean letras, números o guiones bajos.
SELECCIONAR [ Medidas ] . [ Ventas de tienda ] EN COLUMNAS , [ Fecha ] . Miembros EN FILAS DE Ventas DONDE ( [ Tienda ] . [ EE. UU . ] . [ CA ] )