Tutorial de MDX
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í:
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í:
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]
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.
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]
//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]
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
ResponderEliminarSi, 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.
ResponderEliminarPara mostrar el mayor valor de una dimensión se usa Tail en MDX:
ResponderEliminarSELECT { [Measures].[Cantidad] }
ON 0,
Tail(NONEMPTY ([Date Dim].[Date].ALLMEMBERS ),1)
ON 1
FROM [Cubo]