Tutorial de MDX


Estos son mis apuntes del MDX (Multidimensional Expressions). Es el lenguaje multidimensional usado para consultar a cubos multidimensionales.

Estoy usando SQL Server 2008, pero las sentencias son válidas para SQL Server 2005.

Para este tutorial estoy usando la base de datos AdventureWorks de 2008 que usted la puede bajar del siguiente enlace:

Decidí escribir esto porque la primera vez que visite el tutorial de MDX de la página de Microsoft (http://msdn.microsoft.com/es-es/library/ms145595.aspx)

no entendí absolutamente nada y no sabía por dónde comenzar.

Vi una consulta parecida a esta:


DRILLTHROUGH

SELECT

([Date].[Calendar].[Month].[July 2003])

ON 0

FROM [Adventure Works]

WHERE [Geography].[Country].[Australia]

RETURN

[$Date].[Date]

,KEY([$Product].[Model Name])

,NAME([$Employee].[Employee])

,[Reseller Sales].[Reseller Sales Amount]

,[Reseller Sales].[Reseller Tax Amount]

,[Reseller Sales].[Reseller Standard Product Cost]



Y más o menos lo entendía así:


到底是什 没有


没有在


里写的是什




Es por eso que decidí crear un breve tutorial.

Mi primera consulta MDX.


Voy a asumir que usted ya sabe crear cubos visualmente usando Business Intelligence Development Studio. Si no sabe esto, muy difícilmente va a entender MDX.


Mi cubo se ve así:


Figura 1.

Mi primer ejemplo es el siguiente:
select Freight
 on columns
 from [Adventure Works DW2008]




La consulta muestra el costo total de transporte en mi cubo Adventure Works DW2008. La sintaxis es


select nombreDelMeasure
on columns

from nombredelcubo

SELECT NON EMPTY { [Freight] }
 ON COLUMNS, NON EMPTY
 { ([Dim Geography].[Hierarchy].ALLMEMBERS ) }
ON ROWS
 FROM [Adventure Works DW2008]
Muestra Los costos de transporte según la situación geográfica. Dim Geography contiene países con sus ciudades.

 SELECT NON EMPTY { [Measures].[Freight] } ON COLUMNS,
 NON EMPTY { ([Dim Geography].[City].[City].ALLMEMBERS *
 [Dim Customer].[Total Children].[Total Children].ALLMEMBERS ) }
 ON ROWS
 FROM [Adventure Works DW2008]

En este ejemplo se muestra el costo de transporte según la ciudad y el total de niños que tiene los clientes. Estamos trabajando con 2 dimensiones dentro del MDX.
SELECT
[Measures].[Tax Amt] ON 0,
ORDER(
[Dim Geography].[City].Members
,[Measures].[Tax Amt], DESC)
ON 1
 FROM [Adventure Works DW2008]



Este ejemplo muestra cómo ordenar los datos usando MDX. Se utiliza la sentencia ORDER en paréntesis y luego le decimos que queremos mostrar la tasa de impuestos en orden descendente. ON 0 es lo mismo que ON Columns y ON 1, lo mismo que ON ROWS.

// Filtro de ventas menores a 10000
 SELECT
     {[Measures].[Sales Amount]} ON COLUMNS,
     {Filter (
         [Dim Geography].[City].MEMBERS,
             ([Measures].[Sales Amount]) < 10000)
                  } ON ROWS
FROM
    [Adventure Works DW2008]

Este ejemplo MDX muestra como mostrar datos usando comparadores. Estamos mostrando las ventas menores a 10000.

//La ventas de los paises que empiecen con u
Select non empty Filter([Dim Geography].[English Country Region Name].members,


Left([Dim Geography].[English Country Region Name].currentmember.Properties("Caption"),1) = "U") ON Rows,

[Measures].[Sales Amount] On Columns

From [Adventure Works DW2008]


El famoso comando like. MDX no tiene un like. Pero se puede hacer algo similar. En este caso muestra el total de ventas de paises que empiezan con U.


--Ver los miembros de una dimension
select [Measures].[Freight]
on columns,
[Dim Sales Territory].[Hierarchy].members
on rows
from [Adventure Works DW2008]

--children, ver los hijos de la dimension
select [Measures].[Freight]
on columns,
[Dim Sales Territory].[Hierarchy].children
on rows
from [Adventure Works DW2008]

--parent, ver el padre de la dimensión
select [Measures].[Freight]
on columns,
[Dim Sales Territory].[Hierarchy].[Sales Territory Group].&[Europe].&[Germany].parent
on rows
from [Adventure Works DW2008]


--cousin,ver primos de dimensiones
select [Measures].[Freight]
on 0,
Cousin
(
[Dim Sales Territory].[Hierarchy].[Sales Territory Group].&[Europe].&[Germany],
[Dim Sales Territory].[Hierarchy].[Sales Territory Group].&[North America]
)
on 1
from [Adventure Works DW2008]

Comentarios

  1. Me sentí igual que tú al buscar información sobre MDX, creo que debemos hacer un esfuerzo para que exista información clara y en ESPAÑOL, te felicito por tu esfuerzo

    ResponderEliminar
  2. Si, la clave del éxito es saber hacer un cubo a partir de la base de datos AdventureworksDW. Una vez que procesa el cubo, el resto es simplemente entener el ejemplo básico de consulta.

    ResponderEliminar
  3. Para mostrar el mayor valor de una dimensión se usa Tail en MDX:

    SELECT { [Measures].[Cantidad] }
    ON 0,
    Tail(NONEMPTY ([Date Dim].[Date].ALLMEMBERS ),1)
    ON 1
    FROM [Cubo]

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

The Deep Sea: una web interactiva para explorar las profundidades el mar y descubrir las extrañas criaturas que viven en él

Detectar el usuario de Windows utilizando C#

Lo nuevo de SQL Server 2008 respecto a SQL Server 2005