# Consulta MDX

{% hint style="info" %}

#### Comprendiendo las consultas MDX

Multidimensional Expressions (MDX) es un lenguaje de consultas diseñado para recuperar datos de bases de datos multidimensionales, a menudo llamadas cubos. Piensa en un cubo como una tabla dinámica de Excel sofisticada—organiza datos empresariales a través de múltiples dimensiones como Tiempo, Geografía, Productos y Medidas.&#x20;

Cuando consultas un cubo con MDX, obtienes un conjunto de celdas, que es esencialmente una cuadrícula de valores de datos organizada por las dimensiones que especificas.
{% endhint %}

<figure><img src="https://content.gitbook.com/content/VLCJbSi5xQoetAvNtGiu/blobs/ucaV6UP86B9r3D9E3jpd/image.png" alt="" width="563"><figcaption><p>Sintaxis MDX</p></figcaption></figure>

{% hint style="info" %}
Al igual que SQL usa SELECT para consultar bases de datos relacionales, MDX usa SELECT para consultar cubos. La estructura básica es sorprendentemente similar, pero adaptada para datos multidimensionales. Esta es la consulta más utilizada en MDX, y entenderla te da una base sólida para trabajar con datos multidimensionales.

Cada consulta SELECT de MDX necesita especificar cuatro cosas clave:

**Ejes (Diseño de la cuadrícula)**

* Define cómo se organizan tus resultados—típicamente COLUMNAS y FILAS
* Puedes usar hasta 128 ejes (aunque la mayoría de las consultas usan solo 2-3)
* Piensa en esto como definir la estructura de tu informe

**Miembros o Tuplas (qué datos mostrar)**

* Especifica qué elementos de cada dimensión aparecen en cada eje
* Ejemplo: ¿Qué años? ¿Qué productos? ¿Qué métricas?

**Nombre del cubo (Fuente de datos)**

* Qué cubo contiene tus datos
* Como especificar una tabla en la cláusula FROM de SQL

**Eje Slicer (Restricción)**

* Cláusula WHERE opcional que filtra todo tu conjunto de resultados
* Piénsalo como "mostrar datos solo para este contexto específico"
  {% endhint %}

***

**Estructura de la sintaxis MDX**

```
SELECT 
    <lo que va en columnas> ON COLUMNS,
    <lo que va en filas> ON ROWS
FROM <nombre del cubo>
WHERE <condición de filtro>
```

&#x20;**Ejemplos:**

{% tabs %}
{% tab title="Conceptos clave" %}
{% hint style="info" %}

* **Llaves rizadas `{}`**: Agrupar múltiples miembros juntos
  * `{ [Measures].[Sales], [Measures].[Quantity] }` = "mostrar ambas medidas"
* **Corchetes `[]`**: Identificar nombres de dimensión/miembro
  * `[Years].[2004]` = "el miembro 2004 de la dimensión Years"
* **ON COLUMNS / ON ROWS**: Definir el diseño de tu cuadrícula
  * Columnas = eje horizontal (a lo largo de la parte superior)
  * Filas = eje vertical (a lo largo del lateral)
* **Cláusula WHERE**: Filtra todo el resultado
  * A diferencia de columnas/filas, WHERE no crea un eje—solo filtra
    {% endhint %}
    {% endtab %}

{% tab title="Informe básico de ventas" %}

```mdx
SELECT
    { [Measures].[Sales], [Measures].[Quantity] } ON COLUMNS,
    { [Years].&[2004], [Years].&[2005] } ON ROWS
FROM [SteelWheelsSales]
WHERE ( [Markets].[APAC] )
```

{% hint style="info" %}
**Lo que hace esta consulta:**

* **COLUMNAS**: Muestra dos métricas lado a lado: Ventas y Cantidad
* **FILAS**: Muestra dos años apilados: 2004 y 2005
* **FROM**: Obtiene datos del cubo SteelWheelsSales
* **WHERE**: Filtra para mostrar solo datos del mercado APAC (Asia-Pacífico)
  {% endhint %}

**El conjunto de resultados se vería así:**

|              | Ventas     | Cantidad |
| ------------ | ---------- | -------- |
| 2004         | $1,500,000 | 12,500   |
| 2005         | $1,750,000 | 14,200   |
| {% endtab %} |            |          |

{% tab title="Consulta simplificada" %}

```mdx
SELECT 
    Measures.ALLMEMBERS ON COLUMNS 
FROM [SteelWheelsSales]
WHERE ([Years].[2004])
```

{% hint style="info" %}

**Lo que esto hace:**

* **COLUMNAS**: Muestra TODAS las medidas disponibles (Ventas, Cantidad, Beneficio, etc.)
* **FROM**: Cubo SteelWheelsSales
* **WHERE**: Filtra para mostrar solo datos de 2004
* **FILAS**: Ninguno especificado—resulta en una visualización de una sola fila
  {% endhint %}

**El resultado podría verse así:**

| Ventas       | Cantidad | Beneficio | Costo  |
| ------------ | -------- | --------- | ------ |
| $3M          | 25,000   | $450k     | $2.55M |
| {% endtab %} |          |           |        |

{% tab title="Rendimiento del producto por trimestre" %}

```mdx
SELECT
    { [Time].[Q1], [Time].[Q2], [Time].[Q3], [Time].[Q4] } ON COLUMNS,
    { [Product].[Classic Cars], [Product].[Motorcycles], [Product].[Planes] } ON ROWS
FROM [SteelWheelsSales]
WHERE ( [Measures].[Sales], [Years].[2005] )
```

{% hint style="info" %}
**Lo que esto muestra:**

* **COLUMNAS**: Cuatro trimestres a lo largo de la parte superior
* **FILAS**: Tres líneas de productos a lo largo del lateral
* **WHERE**: Filtrando únicamente la medida Ventas, para el año 2005
  {% endhint %}

**Cuadrícula de resultados:**

|                | T1    | T2    | T3    | T4    |
| -------------- | ----- | ----- | ----- | ----- |
| Autos clásicos | $500K | $525K | $475K | $600K |
| Motocicletas   | $200K | $225K | $210K | $240K |
| Aviones        | $150K | $160K | $155K | $175K |
| {% endtab %}   |       |       |       |       |
| {% endtabs %}  |       |       |       |       |

***

**Piensa en MDX así ..**

Imagina que estás construyendo una tabla dinámica:

* **SELECT ... ON COLUMNS** = arrastrar campos al área de columnas
* **SELECT ... ON ROWS** = arrastrar campos al área de filas
* **FROM** = elegir tu fuente de datos
* **WHERE** = usar filtros de informe en la parte superior

¡El resultado es siempre una cuadrícula (conjunto de celdas) con tus datos organizados exactamente como especificaste!

***
