Que es DAX?
Es un lenguaje funcional.
Lo encontramos dentro de Analysis Services, Power Pivot (Excel) y Power BI.
Sus siglas significa Expresiones de Análisis de Datos.
Surge con PowerPivot for Excel 2010.
Para que sirve DAX?
DAX sirve para enriquecer los modelos de datos pues es el lenguaje para definir
- Columnas calculadas
- Medidas
- Tablas calculadas
Tambien es un lenguaje de consulta sobre los modelos de datos.
DAX es complejo?
DAX es un lenguaje muy poderoso, sencillo para el 75% de las necesidades habituales y se torna un poco complejo para ese otro 25%…
La principal dificultad que encuentro en aquellos que dan sus primeros pasos no es en DAX sino en el concepto «Medidas», para aquellos no que vienen del mundo de las herramientas de BI, es un concepto un poco duro de digerir al principio.
Para usuarios Excel, DAX es relativamente cercano pues nace «inspirado» en las formulas Excel, o mejor dicho, Microsoft busco que fuese familiar para los usuarios Excel… Ahora a los que vienen de Excel, quizás donde cuesta es que las funciones trabajan sobre «Tablas», y no en rangos o celdas.
Para los que vienen del lado IT, de bases de datos o programación OO, estructurada puede que un lenguaje funcional sea un poco «interesante», pero lo que mas cuesta es el concepto de «Medidas»…
Un tema a tener presente es que la dificultad de DAX es lineal a la complejidad de nuestro modelo de datos, es decir, cuando DAX deba cubrir falencias de como armamos nuestro modelo es muy posible nuestras sentencias DAX requieran cierta necesidad. Cuando mas cerca estemos de un modelo estrella, la mayoría de nuestros cálculos DAX saldrán muy fácil.
Lenguaje funcional
Al ser un lenguaje funcional todo lo que escribimos son funciones anidadas, y eventualmente la definición de variables que almacenan el resultado de funciones y pasan a ser parámetros de funciones.
Al ser un lenguaje funcional todo puede ser escrito en una sola línea, aunque siempre se sugiere se realice el esfuerzo de darle un poco de formato.
Evitar lo siguiente:
AVERAGEX( SUMMARIZE ( FILTER( 'Date', 'Date'[Year] IN { 2017, 2018 } ), 'Date'[Month], 'Date'[Year]), VAR vDiasHabiles = COUNTROWS ( FILTER ( 'Date', 'Date'[WeekDay] < 6 ) ) VAR vImporte = SUM ( Sales[SalesAmount] ) RETURN DIVIDE ( vImporte, vDiasHabiles))
es mucho mas legible lo siguiente
AVERAGEX ( SUMMARIZE ( FILTER ( 'Date', 'Date'[Year] IN { 2017, 2018 } ), 'Date'[Month], 'Date'[Year] ), VAR vDiasHabiles = COUNTROWS ( FILTER ( 'Date', 'Date'[WeekDay] < 6 ) ) VAR vImporte = SUM ( Sales[SalesAmount] ) RETURN DIVIDE ( vImporte, vDiasHabiles ) )
Las funciones pueden retornar un valor escalar o una tabla.
Las funciones pueden aceptar como parámetros valores escalares, tablas, o expresiones.
Tipos de Datos
Los tipos de datos de DAX se agrupan en dos tipos
- Numéricos: enteros (int), decimales (float), moneda (currency), fecha (datetime), booleano (true/false)
- Otros: texto
DAX permite realizar operaciones combinando tipos de datos, realizando conversiones automáticas.
Se recomienda evitar dejar en manos de DAX la conversión, pues a veces puede la misma no sea la esperada.
Tipos de Operadores
Símbolo | Uso | Ejemplo |
( ) {} |
Agrupación Listas |
( 5+2) * 3 IN { “A”, “B” } |
+ – * / |
Adición Sustracción Multiplicación División |
4+1 5-2 2*3 3/4 |
= <> > >= < <= |
Igual Distinto Mayor Mayor o igual Menor Menor o igual |
[Pais]=“AR” [Pais]<>”AR” [Cantidad]>0 [Cantidad]>=5 [Importe]<0 [Importe]<= 20 |
& | Concatenado | “A” & “B” |
&& || |
AND OR |
[Pais]=“AR” && [Cantidad]> 0 [Pais]=“AR” || [Pais] =“UY” |
Sintaxis
La sintaxis de DAX es bastante sencilla lo único a tener en cuenta es como se referencias a las columnas, tablas y medidas.
'NombreDeTabla'[NombreDeColumna]
[NombreMedida]
- Tablas: solo requieren comillas simples cuando su nombre posee caracteres especiales como espacios o «ñ».
- Columnas: las columnas siempre van entre corchetes.
- Medidas: van entre corchetes cuando se las referencia.
Se recomienda anteponer el nombre de la tabla cuando referenciamos una columna, pues si bien es opcional o solo requerido en ciertas condiciones, facilita diferenciarlas de las medidas.