Las expresiones multidimensionales ( MDX ) son un lenguaje de consulta para el procesamiento analítico en línea (OLAP) mediante 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 las hojas 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 se 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 el grupo de ingenieros de SQL Server , entre los que se encontraba Mosha Pasumansky . La especificación fue seguida rápidamente por el lanzamiento comercial de Microsoft OLAP Services 7.0 en 1998 y, posteriormente, por Microsoft Analysis Services . La última versión de la especificación OLE DB para OLAP fue publicada por Microsoft en 1999.
Si bien no era un estándar abierto, sino una especificación propiedad de Microsoft, fue adoptado por una amplia gama de proveedores de OLAP.
La especificación XML for Analysis hizo referencia a la especificación OLE DB for OLAP para obtener detalles sobre el lenguaje de consulta MDX. En Analysis Services 2005, Microsoft agregó algunas extensiones del lenguaje de consulta MDX, como las subselecciones. Productos como Microsoft Excel 2007 comenzaron a utilizar estas nuevas extensiones del lenguaje de consulta MDX. Algunos se refieren a esta variante más nueva de MDX como MDX 2005.
En 2001, el Consejo XMLA publicó el estándar XML for Analysis (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 único, 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. ( La especificación MDX de OLEDB para OLAP no distingue entre tipos de datos de dimensión y jerarquía. Algunas implementaciones, como Microsoft Analysis Services, los tratan de forma diferente ) .[Time].[Fiscal].[Month]
, o puede devolverse mediante una función MDX, por ejemplo .Level
.[Time].[Fiscal].[Month].[August 2006]
, por nombre calificado, p. ej. [Time].[Fiscal].[2006].[Q3].[August 2006]
o puede devolverse mediante una función MDX, p. ej .PrevMember
. .Parent
, , .FirstChild
etc. 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 (consulte a continuación).([Time].[Fiscal].[Month].[August], [Customer].[By Geography].[All Customers].[USA], [Measures].[Sales])
, o se pueden devolver mediante una función MDX, por ejemplo .Item
.{([Measures].[Sales], [Time].[Fiscal].[2006]), ([Measures].[Sales], [Time].[Fiscal].[2007])}
o devolverse mediante una función o un operador MDX, por ejemplo Crossjoin
, Filter
, Order
, Descendants
etc.[Product].CurrentMember.[Sales Price]
) o utilizando 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 utilizar 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 medidas en MeasureGroupMeasures
la función de Microsoft o el nombre del KPI en, por ejemplo, las funciones KPIValue
o de Microsoft 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 de las tiendas de 2002 y 2003 en el estado de California.
SELECCIONAR { [ Medidas ] . [ Ventas en tienda ] } EN COLUMNAS , { [ Fecha ] . [ 2002 ] , [ Fecha ] . [ 2003 ] } EN FILAS DESDE Ventas DÓNDE ( [ 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 columnas y el otro el eje de filas, aunque no importa en qué orden aparezcan dentro de la consulta. Si crea una consulta que solo tiene un eje, debe ser el eje de columnas. 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 otro carácter que no sean letras, números o guiones bajos.
SELECCIONAR [ Medidas ] . [ Ventas en Tienda ] EN COLUMNAS , [ Fecha ] . Miembros EN FILAS DESDE Ventas DÓNDE ( [ Tienda ] . [ EE. UU . ] . [ CA ] )