MDX

MultiDimensional eXpressions. Es el lenguaje que se usa para hacer consultas a cubos OLAP

No existe ningún estandard todavía. Y ya que lo inventó Microsoft pues se toma como base el trabajo que hicieron ellos. Yo para estos primeros pasos voy a usar el cubo mondrian que tengo a mano.

Para poder trabajar con su contenido aquí tienes el esquema:

	<Cube name="cubo_hipotecas" cache="true" enabled="true">
		<Table name="h_hipotecas"></Table>

		<Dimension type="TimeDimension" foreignKey="tiempo" name="tiempo">
			<Hierarchy name="tiempo" hasAll="true" allMemberName="todo" primaryKey="id_tiempo">
				<Table name="d_tiempo">	</Table>
				<Level name="anyo" column="id_anyo" type="Numeric" uniqueMembers="true" levelType="TimeYears"></Level>
				<Level name="trimestre"  column="id_trimestre" uniqueMembers="true"  nameColumn="des_trimestre" levelType="TimeQuarters"></Level>
				<Level name="mes" table="d_tiempo" column="id_mes" nameColumn="des_tiempo" type="Numeric" uniqueMembers="true" levelType="TimeMonths" ></Level>
			</Hierarchy>
		</Dimension>

		<Dimension foreignKey="id_tipo_finca" name="tipo_finca">
			<Hierarchy name="tipo_finca" hasAll="true" allMemberName="todo" primaryKey="id_tipo" primaryKeyTable="d_tipo_finca">
				<Table name="d_tipo_finca"></Table>
				<Level name="super tipo" table="d_tipo_finca" column="id_super_tipo" nameColumn="des_super_tipo"  type="Numeric" uniqueMembers="false" levelType="Regular" ></Level>
				<Level name="tipo" table="d_tipo_finca" column="id_tipo" nameColumn="des_tipo" type="Numeric" uniqueMembers="true" levelType="Regular"></Level>
			</Hierarchy>
		</Dimension>

		<Measure name="cantidad" column="numero" aggregator="sum" ></Measure>
		<Measure name="importe" column="importe" aggregator="sum" ></Measure>

	</Cube>

… si es una relación de fincas hipotecadas…. ¿y?….

Primeros pasos

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. Es un poco más complicacado ya que lo que en realidad defines son intersecciones:

La consulta básica de MDX es el select.

SELECT
  algo ON ROWS
  algo ON COLUMNS
FROM
  cubo 
WHERE
  condicion

Conceptos Básicos

A continuación un poco de teoría basada en esta página

Dimensión

Una dimensión es una colección de atributos que se relacionan mediante una jerarquía y que se relacionan a su vez con los hechos de la dimensión de medidas.

Atributo o Nivel de dimensión

Un atributo de dimensión está enlazado a una o más columnas de una tabla de dimensiones y contiene miembros. Un atributo de dimensión puede contener nombres de clientes, de meses o de productos.

Miembro

Un miembro es un valor de un atributo de dimensión, incluida la dimensión de medidas. Un miembro de una jerarquía puede ser un nivel hoja, un miembro primario, un miembro de datos o un miembro (All).

Medida

Una medida es un valor de una tabla de hechos; también se denomina hecho. Por lo general, también se hace referencia a un valor de la dimensión de medidas como miembro. Las medidas suelen ser valores numéricos, pero también pueden ser valores de cadena.

Dimensión de medidas

Una dimensión de medidas es la dimensión que contiene todas las medidas de un cubo. Una dimensión de medidas en un tipo especial de dimensión en la que los miembros se suelen agregar (generalmente mediante la suma o el recuento) de acuerdo con el miembro actual de cada atributo de dimensión con el cual existe una medida especificada.

Grupo de medida

Un grupo de medida es una colección de medidas relacionadas de un cubo. Un cubo puede contener varios grupos de medida.

Miembro (All)

El miembro (All) es el valor calculado de todos los miembros de una jerarquía de atributo o una jerarquía definida por el usuario.

Miembro calculado

Un miembro calculado es un miembro de dimensión que se define y calcula en tiempo de consulta. Un miembro calculado puede definirse en una consulta de usuario o en el script de cálculo MDX; se almacena en el servidor. Un miembro calculado corresponde a las filas de la tabla de dimensiones de la dimensión en la que se definen.

Miembro de datos

Un miembro de datos es un miembro secundario asociado a un miembro primario en una jerarquía de elementos primarios y secundarios. Un miembro de datos contiene el valor de datos de su miembro primario, en lugar del valor agregado de los miembros secundarios del elemento primario.

Miembro primario

Un miembro primario es un miembro de una jerarquía de elementos primarios y secundarios que contiene el valor agregado de sus elementos secundarios.

Miembro hoja

Un miembro hoja es un miembro de una jerarquía que no posee miembros secundarios.

Miembro secundario

Un miembro secundario es un miembro de una jerarquía situado por debajo del nivel superior.

Atributo clave

El atributo clave de una dimensión de base de datos es el atributo al cual están vinculados (directa o indirectamente) todos los atributos que no son clave de la dimensión. El atributo clave también suele ser el atributo de granularidad.

Atributo de granularidad

El atributo de una dimensión de cubo que vincula una dimensión con los hechos de un grupo de medida de la dimensión de medidas. Si el atributo de granularidad y el atributo clave son atributos diferentes, los atributos que no son clave deben vincularse, directa o indirectamente, con el atributo de granularidad. Dentro de un cubo, el atributo de granularidad define la granularidad de una dimensión. El nivel mínimo.

Jerarquía de atributo

Una jerarquía de atributo es una jerarquía de miembros de atributo que contiene los siguientes niveles:

  • Un nivel hoja que contiene cada miembro de atributo distintivo; cada miembro del nivel hoja también se conoce como miembro hoja.
  • Niveles intermedios si la jerarquía de atributo es una jerarquía de elementos primarios y secundarios.
  • Un nivel (All) opcional que contiene el valor agregado de los miembros hoja de la jerarquía de atributo; el miembro del nivel (All) también se conoce como miembro (All).

Tuplas

Una tupla identifica de forma exclusiva a una celda según una combinación de miembros. Una tupla puede estar compuesta de uno o mas miembros de la dimensión medidas aunque solo uno de cada una de las demás dimensiones del cubo.

select [Measures].[cantidad] ON COLUMNS,
[tiempo].[mes].members ON ROWS
from  [cubo_hipotecas]

Ejemplos:

Especificacion Regla Sintaxis
Miembro Único / Dimensión Única Listar única dimensión [Dimension].[Member]
Miembros Múltiples / Dimensiónes Múltiples Los miembros se envuelven con parentesis () ([Dim1].[Miembro], [Dim2].[Miembro], [Dim3].[Miembro])

Conjuntos o Sets

Un conjunto o Set es un conjunto ordenado de tuplas con la misma dimensionalidad. Se utilizan llaves {} para designar un conjunto de tuplas.


select 
-- primer conjunto de medidas
  {[Measures].[cantidad], [Measures].[importe]} 
ON COLUMNS,

  { 
   ( -- tupla multi-dimensional 
    [tiempo.tiempo].[todo], [tipo_finca].[todo]
   )
  
 } ON ROWS
from [cubo_hipotecas]

Eje

Un eje (axis) es un grupo, o colección, de miembros de una o más dimensiones, organizado como tuplas.

select {[Measures].[cantidad], [Measures].[importe]} ON COLUMNS,
  -- se puede tambien especificar un miembro concreto
  {[tiempo.tiempo].[2006]} ON ROWS
from [cubo_hipotecas]

Operadores

Los operadores básicos son las llaves {} , las comas , y los dos puntos :

Llaves

Ls llaves sirven para distinguir conjuntos ( sets ) y son necesarias para envolver tuplas siempre que las listemos explícitamente.

MDX usa las llaves para empaquetar un conjunto de componentes como ya hemos visto anteriormente.

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

   -- tupla no necesario 
    [tiempo.tiempo].[2006]
   
   ON ROWS
from [cubo_hipotecas]

fijate que si quitasemos las llaves del conjunto de las columnas la consulta fallaría ya que MDX no sabría reconocer el conjunto.

Comas

Las comas (,) sirve para listar, una tras otra, un conjunto de tuplas. Las comas han sido ampliamente usadas a lo largo de este tutorial.

Dos puntos

Los dos puntos (:) indican a MDX un rango. El caso mas sencillo de ver es el del tiempo:


select {[Measures].[cantidad], [Measures].[importe]} ON COLUMNS,
  -- esto recogerá desde el 2006 hasta el 2008 ambos incluidos
  {[tiempo.tiempo].[todo].[2006] : [tiempo.tiempo].[todo].[2008]} ON ROWS
from [cubo_hipotecas]

Probar las consultas

Todas las consultas estan basadas en este cubo:

  • 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

Todas las consultas se pueden porbar en esta url.

Si picas en el botón de MDX:

Obtendrás un cuadro de texto donde ejecutar todas las consultas de esta página:

Por último pedirte un poco de paciencia. Ya que trabajas con el Súper Ordenador : Apolonia

 
olap/mdx.txt · Última modificación: 2010/01/24 17:25 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