mdx-2 sintaxis mdx [recordatorios]

13
Sintaxis MDX Como hemos dicho en la la introducción a MDX la sintaxis es parecida a SQL. Aunque al añadir los conceptos de Dimensión y Jerarquía la cosa se complica un poco mas. Vamos a recordar la sintaxis básica: Sintaxis MDX se parece a SQL. El esquema de la consulta es parecido. Si mediante un select SQL obtienes una tabla unidimensional con datos que se extienden a lo largo. Mediante MDX obtenemos una tabla bidimensional con datos que se extienden a lo largo y ancho. La consulta básica de MDX es el select. SELECT algo ON ROWS algo ON COLUMNS FROM cubo WHERE condicion Un ejemplo de una consulta básica es el siguiente:

Upload: yzywolfyzy

Post on 27-Dec-2015

65 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: MDX-2 Sintaxis MDX [Recordatorios]

Sintaxis MDX

Como hemos dicho en la la introducción a MDX la sintaxis es parecida a SQL. Aunque al añadir los conceptos de Dimensión y Jerarquíala cosa se complica un poco mas.

Vamos a recordar la sintaxis básica:

Sintaxis

MDX se parece a SQL. El esquema de la consulta es parecido. Si mediante un select SQL obtienes una tabla unidimensional con datosque se extienden a lo largo. Mediante MDX obtenemos una tabla bidimensional con datos que se extienden a lo largo y ancho.

La consulta básica de MDX es el select.

SELECT

algo ON ROWS

algo ON COLUMNS

FROM

cubo

WHERE

condicion

Un ejemplo de una consulta básica es el siguiente:

Page 2: MDX-2 Sintaxis MDX [Recordatorios]

¡¡¡ Que puedes probar tu mismo aqui [http://juantxu.net:8080/jjmondrian/testpage.jsp?query=mondrian] (apretando al botón de MDX)!!!!.

Recuerda que la estructura de nuestro cubo es:

Cubo: cubo_hipotecas

Dimensiones

Dimensión : tiempo

Jerarquía:

Nivel : anyo

Nivel : trimestre

Nivel : mes

Dimensión : tipo_finca

Jerarquía:

Nivel : super tipo

Nivel : tipo

Medida : cantidad

Medida : importe

La primera gran diferencia son los filtros.

Page 3: MDX-2 Sintaxis MDX [Recordatorios]

Filtros

En MDX hay 2 formas de interpretar los filtros. Al igual que en SQL los datos se filtran a través de WHEREs. MDX contempla:

SLICER

Subset de la información. Subset del cubo. Defines unos WHERE en función de algunas de las dimensiones y te quedas con un área delcubo.

select {[Measures].[cantidad], [Measures].[importe]} ON COLUMNS,

[tiempo.tiempo].[todo].Children ON ROWS

from [cubo_hipotecas]

where [tipo_finca.tipo_finca].[todo].[RUSTICAS].[RUSTICAS]

Page 4: MDX-2 Sintaxis MDX [Recordatorios]

Puedes jugar con esta consulta aqui [http://www.juantxu.net:8080/jjmondrian/testpage.jsp?query=mondrian] si queres comprobar sufuncionamiento

FILTERS

Los filtros te permiten hacer una selección de los miembros a mostrar en función de una condición que tu estableces. Por ejemplo siquieres mostrar sólo los importes mayores que 1000.

A diferencia del SLICER (implementado mediante la clausula where) los filtros (implementados mediante la condición FILTER) nodevuelven todo un area del cubo sinó los miembros que satisfacen la condición.

Page 5: MDX-2 Sintaxis MDX [Recordatorios]

select {[Measures].[cantidad], [Measures].[importe]} ON COLUMNS,

Filter(

[tiempo.tiempo].[todo].Children,

([Measures].[cantidad] > 20000.0)

) ON ROWS

from [cubo_hipotecas]

Page 6: MDX-2 Sintaxis MDX [Recordatorios]

Puedes jugar con esta consulta aqui [http://www.juantxu.net:8080/jjmondrian/testpage.jsp?query=mondrian] si queres comprobar sufuncionamiento

La sintaxis es:

Filter( Dimensión , condición )

ORDER

Otra de las clausulas mas utilizadas y requeridas es la que nos permite ordenar los resultados. Los resultados, por defecto, sonprovistos tal y como están dispuestos o bien ordenados alfabéticamente por alguna de las dimensiones. Pero, la mayoría de las veces,ese no es el orden que queremos. Queremos poder ordenar según el valor de alguna de las medidas.

Para ordenar los resultados en función se una medida se utiliza la función ORDER. La función ORDER espera 3 parámetros. Elset(dimensión/jerarquía) que va a ordenar, la expresión en función de la que va a ordenar (la medida,miembro calculado, etc) y el tipode ordenación que deba hacer.

Page 7: MDX-2 Sintaxis MDX [Recordatorios]

ASC : Orden ascendente respetando las jerarquías.

DESC : Orden descendente respetando las jerarquías.

BASC : Orden ascendente absoluto rompiendo (Breaking) las jerarquías.

BDESC : Orden descendente absoluto rompiendo (Breaking) las jerarquías.

ORDER ( set, factor de ordenación, sentido de la ordenación)

select {[Measures].[cantidad], [Measures].[importe]} ON COLUMNS,

Order(

[tiempo.tiempo].[todo].Children,

[Measures].[cantidad]

, BDESC)

ON ROWS

from [cubo_hipotecas]

Puedes jugar con esta consulta aqui [http://www.juantxu.net:8080/jjmondrian/testpage.jsp?query=mondrian] si queres comprobar sufuncionamiento

TOPCOUNT y BOTTOMCOUNT

Despues de ordenar los resultados, también podemos quedarnos directamente con los X primeros o últimos.

Esta función nos permite coger los X primeros o últimos miembros de un set y su sintaxis es:

TOPCOUNT(

SET ,

LIMITE ,

MEDIDAD DE ORDENACIÓN

)

Por ejemplo:

select {[Measures].[cantidad], [Measures].[importe]} ON COLUMNS,

TopCount([tiempo.tiempo].[todo].Children,

5.0,

[Measures].[cantidad]

) ON ROWS

from [cubo_hipotecas]

Lo mismo funciona con BOTTONCOUNT

Puedes jugar con esta consulta aqui [http://www.juantxu.net:8080/jjmondrian/testpage.jsp?query=mondrian] si queres comprobar su

Page 8: MDX-2 Sintaxis MDX [Recordatorios]

funcionamiento.

CROSSJOIN

La gracia de las vistas OLAP y de MDX es poder combinar mas de una dimensión por eje. Eso se hace mediante la función CROSSJOIN.No deja de ser una función similar al join del SQL.

La sintaxis es:

CROSSJOIN(

{SET},

{SET}

)

por ejemplo:

select

{[Measures].[cantidad], [Measures].[importe]}

ON COLUMNS,

Crossjoin(

{[tiempo.tiempo].[todo].Children},

{ [tipo_finca].Children}

) ON ROWS

from [cubo_hipotecas]

Page 9: MDX-2 Sintaxis MDX [Recordatorios]

Aunque es mas fácil usar el operador *

La sintaxis es:

{SET}

*

{SET}

por ejemplo:

select {[Measures].[cantidad], [Measures].[importe]} ON COLUMNS,

{[tiempo.tiempo].[todo].Children}

*

Page 10: MDX-2 Sintaxis MDX [Recordatorios]

{[tipo_finca].Children} ON ROWS

from [cubo_hipotecas]

Una vez mas puedes probar la consulta aqui [http://www.juantxu.net:8080/jjmondrian/testpage.jsp?query=mondrian].

Funciones MDX de tiempo

Cuando tenemos una dimensión temporal podemos utilizar las utilísimas funciones de tiempo que nos ofrece MDX.

Estas pueden ser utilizadas de diversas formas, bien mediante un miembro calculado definido en el schema mondrian que nos permita

Page 11: MDX-2 Sintaxis MDX [Recordatorios]

tenerlas disponibles siempre o bien invocandolas directamente en nuestra sentencia MDX.

ParallelPeriod

Devuelve un miembro de un periodo anterior en la misma posición relativa. Es decir, podemos decir, “dame el mismo mes del añopasado”, “dame el mismo primer mes del trimestre pasado”, “o de hace 2 años, o de hace 2 trimestres”

Sintaxis:

<Member> ParallelPeriod()

<Member> ParallelPeriod(<Level>)

<Member> ParallelPeriod(<Level>, <Numeric Expression>)

<Member> ParallelPeriod(<Level>, <Numeric Expression>, <Member>)

Por ejemplo para tener el valor del año pasado pondríamos:

with member [Measures].[anyo pasado] as 'ParallelPeriod([tiempo].[anyo], 1.0) '

select {[Measures].[cantidad],[Measures].[anyo pasado] }ON COLUMNS,

{[tiempo.tiempo].[todo].Children} ON ROWS

from [cubo_hipotecas]

Page 12: MDX-2 Sintaxis MDX [Recordatorios]

Puedes jugar con esta consulta aqui [http://en.juantxu.net:8080/jjmondrian/testpage.jsp?query=mondrian] si quieres comprobar sufuncionamiento.

Si quisieramos tenerlo siempre disponible lo podríamos definir como un miembro calculado en el schema MDX y lo tendríamos disponiblecomo una medida mas.

<CalculatedMember name="Anyo Pasado" dimension="Measures" formula="ParallelPeriod([tiempo].[anyo], 1.0)">

</CalculatedMember>

Esto te permite tenerlo como una medida mas:

Page 13: MDX-2 Sintaxis MDX [Recordatorios]

Volver al índice de MDX

olap/s intaxismdx.txt · Ú ltima modificac ión: 2014/01/18 14:03 (editor externo)

Excepto donde se indique lo contrario, el contenido de esta wiki se autoriza bajo la siguiente licencia:CC Attribution-Noncommercial-Share Alike 3.0 Unported [http://creativecommons.org/licenses/by-nc-sa/3.0/]