1. Introducción al lenguaje de consulta MDX

1. Introducción al lenguaje de consulta MDX Meritxell 29 Septiembre, 2014 - 11:40

MDX (Multi-Dimensional expressions) es un lenguaje de consulta usado para sacar datos de una base de datos multidimensional. Más concretamente, MDX se usa para consultar datos de una base de datos OLAP con Analysis Services y otras herramientas que soporten este lenguaje.

MDX ayuda a crear Reports con más facilidad que con SQL, ya que con SQL tenemos que ir especificando todas las relaciones de las tablas para poder sacar un dato en concreto. En cambio, en MDX ya esta todo relacionado a priori.

Comparación entre SQL y MDX:

  • SQL Relacional / MDX Multidimensional

  • SQL Debes especificar las relaciones (Join) / MDX No se especifican las relaciones
    En SQL para poder sacar informacion relacionada entre dos o más tablas tenemos que especificar los campos que las relacionan, en cambio en MDX no es necesario, porque cuando se genera el cubo define cuáles serán los metadatos y por tanto las jerarquías y sus relaciones.

  • SQL No posicional / MDX Posicional
    SQL no es posicional. Esto significa que en SQL no existe el concepto de record anterior y record posterior, sino que tengo un conjunto de datos y basta. Por tanto, no existe ningún dato agregado ni calculado sino que usamos las funciones de agregación Group By, y SUM en el momento que queremos sacar qualquier dato agregado de una manera dinámica.
    En cambio MDX es posicional, ya que las agregaciones ya estan calculadas y solo se tiene que especificar en que posición se encuentra el dato que se quiere sacar.
    Ejemplo:
    Si hacemos una consulta del facturado del mes de enero 2006, con MDX yo puedo sacar la facturación del mes anterior y posterior con el prevmember o el nextmember o los hijos del año 2005 y dará el facturado de todos los meses del 2005. De esta manera podemos ver la tendencia que tiene el facturado desde el 2005 hasta enero del 2006.

  • SQL no Referenciado / MDX Referenciado
    SQL no es referenciado, ya que como hemos dicho antes cada vez que queremos sacar un dato tenemos que hacer todas las JOIN y todos los cálculos necesarios dinámicamente, ya que no hay nada precalculado.
    En cambio MDX tiene referenciados los datos y no le hace falta usar las funciones de agregado ya que cada cálculo esta guardado en una celda y solo se tiene que especificar la referencia a ella.
    Un ejemplo que explicaría este concepto es: si queremos sacar el facturado del año 2005 no tengo que sumar todos los meses sino que pongo la referencia a la celda donde está ya guardado ese dato.

 

Conceptos Básicos

Conceptos Básicos Meritxell 29 Septiembre, 2014 - 10:57

El cubo es el fundador de la base de datos multidimensional. Cada cubo contiene más de dos dimensiones.

Dimensiones, niveles y medidas

Las dimensiones son atributos estructurales del cubo y más especificamente, son jerarquías organizadas en niveles que describen los datos en la tabla de hechos.

Un nivel es un elemento de la jerarquía de una dimensión, que describe la jerarquía de los datos. Estos niveles dentro de una jerarquía van del nivel superior al nivel inferior (detalle). Los niveles solo existen al interno de las dimensiones y nos ayudan a especificar el contenido y la estructura de la jerarquía de las dimensiones.

La medida es un conjunto de valores basados en una columna de la tabla de hechos del cubo. Normalmente es de tipo numérico. Por tanto, son los valores del cubo de los que haremos el analisis.

Las medidas al interno del MDX son tratadas como una dimensión no con jerarquías sino plana.

En la figura siguiente se muestra como se representaría un cubo. Cada celda del cubo tiene unas coordenadas multidimensionales.
 

Cubo dimnsional

 

La nomenclatura para llamar a una celda es:

➢ Poner un miembro de cada dimensión
➢ Las dimensiones se separan por comas (,)
➢ El nombre de la celda va entre ()
➢ El nombre de cada dimensión [] (no obligatorios)
 

Ejemplo:

([Mesures].[OrderCount], [Date]. [CalendarYear].&[2004])

El símbolo & se pone para referirnos a un miembro clave (Key Member) si no lo ponemos nos referimos al nombre del miembro (MemberName).

NOTA: Si no se especifica ninguna dimensión usará el miembro corriente y si no existe ningun miembro seleccionado usará el miembro por defecto.

Miembros

Miembros Meritxell 2 Octubre, 2014 - 12:14

Cada jerarquía de una dimensión contiene uno o más items que son denominados Miembros. Cada miembro corresponde a un valor dentro de la tabla dimensión.

En esta imagen podemos ver unas cuantas dimensiones con sus correspondientes miembros organizados por jerarquías.

 

Dimensiones y jerarquías en MDX

 

Usando la nomenclatura adecuada se puedes acceder a cualquier miembro de cualquier dimensión, especificando:

➢ El nombre de la dimensión
➢ El nombre de la jerarquía
➢ El nombre del nivel

 

Por ejemplo, si se quiere acceder al miembro Q1 CY 2004 en de la jerarquía Calendar se representa de la siguiente manera:

[Date].[Calendar].[Calendar Quarter].[Q1 CY 2004]

Como podemos ver los corchetes [] se usan para delimitar los nombres de las dimensiones, las jerarquía, los niveles y los miembros. Los corchetes no son obligatorios, pero si el nombre de la dimensión, jerarquía nivel o miembro tienen algún espacio si que serán obligatorios.

Las siguientes tres represantaciones para acceder al miembro Q1 CY 2004, son válidas:

[Date].[Calendar].[Q1 CY 2004] (1)
[Date].[Calendar].[CY 2004].[H1 CY 2004].[Q1 CY 2004] (2)
[Date].[Calendar].[Calendar Quarter].&[2004]&[1] (3)

La primera representación del miembro está representada en el formato:

Dimension.Jerarquía.MemberName

En la segunda representación hace un recorrido por todos los miembros hasta llegar al que se quiere.
La última representación hace un recorrido usando las llaves de los miembros.

Como hemos dicho antes el símbolo & nos indica que nos estamos refiriendo a la llave del miembro.
 

Ejemplo:

Si nosotros queremos el miembro con nombre Ramon y con clave &1 me dará exactamente ese miembro, si por el contrario solo ponemos el nombre del miembro, Ramon, me sacará todos los miembros que se llaman Ramon, ya que Ramon no es una clave primaria.

Ejemplo con cubo Analysis DW: queremos coger de la dimension cliente, el cliente Ramon Sanchez Perez.

[Dim Cliente].[Nombre Cliente].[Ramon Sanchez Perez]
[Dim Cliente].[Zonas Clientes].[Barcelones].[Ramon Sanchez Perez]
[Dim Cliente].[Zonas Clientes].[Nombre Cliente].&[1]

 

En resumen, para poder acceder a un miembro debes usar el siguiente formato:

[DimensionName].[HierarchyName].[LevelName].[MemberName]