Tutorial Introducción al MDX: Capítulo 2

Aquí tenemos una nueva entrega del manual de MDX. Siguiendo el hilo del capítulo introductorio y del primer capítulo seguimos avanzando y hoy vemos el capítulo 2.

2.- Principales aspectos de la sintaxis de MDX

El lenguaje MDX permite realizar consultas con una sintaxis parecida al lenguaje natural. Para ejemplificar las consultas y la sintaxis trabajaremos con un ejemplo de un cubo.
Imaginamos un cubo de ventas con las siguientes dimensiones:

  • Dimensión temporal de las ventas con niveles de año y mes.
  • Dimensión productos vendidos con niveles de familia de productos y productos.
  • Dimensión de medidas con importe de las ventas y unidades vendidas

2.1.- Mi primera consulta

Si queremos obtener por ejemplo el importe de las ventas para el año 2008 para la familia de productos lácteos la consulta seria la siguiente:

SELECT
{ [Medidas].[importe ventas]}
on columns,
{ [Tiempo].[2008] }
on rows
FROM [cubo ventas]
WHERE ([Familia].[lacteos])

2.2.- Analogía con SQL

Analizando la consulta de ejemplo podemos establecer una analogía con el sql para explicar mejor la estructura del lenguaje. En primer lugar tenemos la estructura idéntica general de la consulta con las cláusulas SELECTFROMWHERE que en MDX se usa identicamente al sql especificando en el select un conjunto de elementos que queremos visualizar, en el from indicamos el cubo del que queremos sacar la información y en el where las condiciones de filtrado.
Una de las particularidades del MDX es que la información la devuelve en forma tabular normalmente y debe ser procesada. Si os fijáis en la cláusula select se usa la clausula on columns. Esta cláusula sirve para separar los elementos que queremos visualizar en las filas de los que queremos en las columnas. En la consulta de ejemplo veremos el importe en las columnas y el tiempo en las filas. Los { } son para permitir listas de elementos en las selecciones y los [] encapsulan elementos de las dimensiones y niveles.

2.3.- Principales funciones,opciones y elementos MDX

A nivel de funcionalidades y potencia a la hora de realizar consultas el MDX es potente como el SQL aunque su objetivo está orientado a temas de comparaciones, relaciones jerárquicas entre elementos,etc…
Una de las funcionalidades que distinguen al MDX es el acceder a los elementos utilizando estructura de árbol. Así para un Determinado nivel de una dimensión tenemos comandos como:

[Familia].[lácteos].CurrentMember : Permite acceder al miembro actual
[Familia].[lácteos].Children : Permite acceder a los hijos de la familia de los lácteos
[Familia].[lácteos].prevMember: Permite acceder al miembro anterior de la dimensión

Por otro lado existen diferentes funciones que permiten realizar cálculos y complementar las consultas como por ejemplo:

CrossJoin(conjunto_a,conjunto_b): Obtiene el producto cartesiano de dos conjuntos de datos.

BottomCount
(conjunto_datos,N): Obtener un número determinado de elementos de un conjunto, empezando por abajo, opcionalmente ordenado.

BottomSum(conjunto_datos,N,S): Obtener de un conjunto ordenado los N elementos cuyo total es como mínimo el especificado( S).

Except
(conjunto_a,conjunto_b): Obtener la diferencia entre dos conjuntos.

Finalmente comentar que en MDX también están implementadas muchas funciones matemáticas y estadísticas que permiten enriquezer los análisis. Encontramos entre muchas otras funciones como:
AVG
COUNT
VARIANCE
VARIANCEn
y todas las funciones trigonométricas (Seno,Coseno,tangente,etc…)

Este capítulo quedo algo largo no? Espero que sea útil

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)
, ,

4 Comments

  • Diego Arenas C. escrigué:

    Enric me parece genial los tutoriales que estás publicando de MDX, sólo un comentario… para no confundir la analogía a SQL no es completa si bien se parecen no son comparables, cuando escribes una sentencia MDX estás consultando por un conjunto de datos, es decir, el where se aplica al conjunto completo, no así con SQL en donde la sentencia es por registros.

    Alguna vez leí por ahí que debía quitarme el SQL para aprender MDX… creo que me sirvió :) Para mi son distintos.

    Saludos!

  • enricbiosca escrigué:

    Hola Diego,

    Celebro que te gusten los tutoriales. Es cierto que MDX no tienen mucho que ver en cuanto a como tratan los datos sin embargo la análogia la utilizo a modo pedágogico pues la mayoria de los que leen el tutorial estarán familiarizados con SQL y puede servir de ayuda.

    Saludos!

  • Icaro escrigué:

    Me parecio muy interesante el tema de MDX, pero (perdonen la ignorancia) MDX esta disponible en Oracle BI?? tengo poco tiempo trabajando con esta herramienta y de momento busco evitar usar una UNION y en internet encontre un articulo donde indica que se puede usar MDX pero no entiendo bien de que se trata. Si alguien me puede dar una mano le agradeceria mucho

  • enricbiosca escrigué:

    Hola Icaro,

    Efectivamente Oracle BI permite usar MDX contra los cubos OLAP. También la herramienta de públicación de informes de la suite de BI se permite que el datasource del informe sea una consulta MDX.

    Saludos

Deixa un comentari

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>