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.

La primera gran diferencia son los filtros.

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 del cubo.

select {[Measures].[cantidad], [Measures].[importe]} ON COLUMNS,
  [tiempo.tiempo].[todo].Children ON ROWS
from [cubo_hipotecas]
where [tipo_finca.tipo_finca].[todo].[RUSTICAS].[RUSTICAS]

Puedes jugar con esta consulta aqui si queres comprobar su funcionamiento

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 si quieres 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) no devuelven todo un area del cubo sinó los miembros que satisfacen la condición.

  select {[Measures].[cantidad], [Measures].[importe]} ON COLUMNS,
     Filter(
            [tiempo.tiempo].[todo].Children, 
            ([Measures].[cantidad] > 20000.0)
           ) ON ROWS
from [cubo_hipotecas]

Puedes jugar con esta consulta aqui si queres comprobar su funcionamiento

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, son provistos 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. El set(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 tipo de ordenación que deba hacer.

  • 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 si queres comprobar su funcionamiento

TOPCOUNT y BOTTOMPCOUNT

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 si queres comprobar su 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]
 
olap/sintaxismdx.txt · Última modificación: 2010/01/24 17:24 por juantxu
 
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
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki