Dax 1
Dax 1
Dax 1
Este artículo sirve de introducción básica a los conceptos más importantes de DAX.
En él se describe DAX y es aplicable a todos los productos que lo usan. Puede que
algunas funciones no sean válidas en determinados productos o casos de uso.
Consulte la documentación del producto en la que se especifique su
implementación de DAX específica.
Tipos de Datos
Tipos de datos DAX: Numéricos
Número Decimal Fijo (Fixed Decimal Number): el separador decimal tiene una
ubicación fija. Puede almacenar valores de hasta 19 dígitos, almacenando
«siempre» 4 decimales
Está claro que en el caso de no tener que almacenar decimales utilizaremos el tipo
Entero (Whole Number). Ahora, donde debemos evaluar con detalle el tipo de
datos a utilizar es cuando tenemos que almacenar decimales y no dejarnos llevar
por los asistentes y los valores que se asignan por defecto al importar datos desde
el origen porque nos pueden causar problemas. Siempre debemos realizar una
revisión exhaustiva del tipo de datos asignado a cada columna de todas las tablas
de nuestro modelo de datos (data model).
Y ¿Por qué esta decisión? Porque al trabajar datos almacenados con punto flotante,
se pueden producir pequeñas variaciones en los cálculos debido a la precisión, que
si bien para unas decenas de filas las consecuencias son inapreciables, lo habitual
es que tengamos miles o millones de filas, con lo que cuando utilizamos funciones
de agregación (algo que ocurre en la práctica totalidad de nuestros modelos de
datos), se van produciendo esas variaciones, esos descuadres que no nos podemos
permitir a la hora de presentar resultados y que, en este caso, no son debidos al
error en las fórmulas DAX, sino al error cometido por no asignar el tipo de datos
adecuado a las columnas que intervienen en los cálculos.
Finalmente os dejo este enlace a un artículo en inglés que aborda este tema en
más profundidad: Choosing Numeric Data Types in DAX.
Fecha (Date): almacena sólo la parte de la fecha, siendo siempre ceros los valores
de la hora (parte decimal)
Hora (Time): almacena sólo la parte de la hora, siendo siempre ceros la pare de la
fecha (parte entera, que por tanto equivale a 1/1/1900)
Si por el contrario, ponemos un formato con menos decimales de los que almacena
ese tipo de datos ocurrirá que sólo se mostrarán esos, realizando un redondeo
implícito. Por ejemplo, si tenemos una columna que tiene números enteros fijos y
un formato de dos decimales, hará un redondeo implícito. Aunque en este caso es
recomendable hacer en el momento de la carga un redondeo explícito mediante
las funciones de cálculo de Query y almacenarlo ya redondeado a dos decimales.
Cálculos
Las fórmulas DAX se usan en medidas, columnas calculadas, tablas calculadas y
seguridad de nivel de fila.
Columnas Calculadas
Con las columnas calculadas, se pueden agregar nuevos datos a una tabla ya
existente en el modelo. Pero en lugar de consultar y cargar los valores en la nueva
columna desde un origen de datos, se crea una fórmula de expresiones de análisis
de datos (DAX) que define los valores de columna. En Power BI Desktop, las
columnas calculadas se crean mediante la característica nueva columna en la
vista Informes.
Las fórmulas DAX son muy similares a las fórmulas de Excel. De hecho, DAX tiene
muchas de las mismas funciones que Excel. Las funciones de DAX, sin embargo,
están diseñadas para trabajar con datos segmentados de forma interactiva o
filtrados en un informe, como en Power BI Desktop. En Excel, puede tener una
fórmula diferente para cada fila de una tabla. En Power BI, al crear una fórmula DAX
para una nueva columna, calculará un resultado para cada fila de la tabla. Los
valores de columna se calculan varias veces, según sea necesario, como cuando se
actualizan los datos subyacentes y los valores cambian.
Pero con una columna calculada, Juan puede reunir las ciudades de la
columna City con los estados de la columna State.
Juan hace clic con el botón derecho en la tabla Geography y, después,
selecciona Nueva columna. Después, Juan especifica la siguiente fórmula DAX en
la barra de fórmulas:
Las medidas son fórmulas de cálculo dinámico en las que los resultados cambian
en función del contexto. Las medidas se usan en informes en los que se pueden
combinar y filtrar datos del modelo mediante varios atributos, como un informe de
Power BI o una tabla dinámica o un gráfico dinámico de Excel. Las medidas se
crean con la barra de fórmulas DAX del diseñador de modelos.
Una fórmula en una medida puede usar las funciones de agregación estándar
creadas automáticamente con la característica de Autosuma (como COUNT o
SUM), aunque también podemos definir nuestra propia fórmula con la barra de
fórmulas DAX. Las medidas con nombre se pueden pasar como argumento a otras
medidas.
Al definir una fórmula para una medida en la barra de fórmulas, una característica
de información sobre herramientas muestra una vista previa de cuáles serían los
resultados para total en el contexto actual, pero de lo contrario no se generan los
resultados inmediatamente en ninguna parte. La razón por la que no se pueden ver
los resultados (filtrados) del cálculo inmediatamente es que el resultado de una
medida no se puede determinar sin el contexto. Evaluar una medida requiere una
aplicación cliente de informes que pueda proporcionar el contexto necesario para
recuperar los datos pertinentes de cada celda y, a continuación, evaluar la
expresión para cada celda. Ese cliente podría ser una tabla dinámica o un gráfico
dinámico de Excel, un informe de Power BI o una expresión de tabla en una
consulta DAX en SQL Server Management Studio (SSMS).
Independientemente del cliente, se ejecuta una consulta distinta por cada celda de
los resultados. Es decir, cada combinación de encabezados de fila y de columna de
una tabla dinámica, o cada selección de segmentación de datos y filtros de un
informe de Power BI, genera un subconjunto de datos diferente sobre el que se
calcula la medida. Por ejemplo, con esta fórmula de medida muy sencilla:
DAX
Total Sales = SUM([Sales Amount])
Funciones de Agregación
Las agregaciones son una forma de contraer, resumir o agrupar datos. Las
agregaciones más comunes, como las que usan PROMEDIO, DISTINCTCOUNT,
MAX, MIN, SUM, pueden crearse automáticamente en una medida mediante
autosuma.
Funciones de Conteo
COUNT, COUNTX, COUNTROWS, COUNTBLANK
Funciones Lógicas
Las funciones lógicas actúan sobre una expresión para devolver información sobre
los valores o los conjuntos de la expresión. Por ejemplo, puede usar la función IF
para comprobar el resultado de una expresión y crear resultados condicionales.
Función Descripción
AND Comprueba si los dos argumentos son TRUE y devuelve TRUE si todos
lo son.
SWITCH Evalúa una expresión en una lista de valores y devuelve una de varias
expresiones de resultado posibles.
o
o
Como modelador de datos, escribir y depurar algunos cálculos DAX puede ser
complejo. Es habitual que los requisitos de cálculos complejos impliquen a menudo
la escritura de expresiones compuestas o complejas. Las expresiones compuestas
pueden implicar el uso de muchas funciones anidadas y, posiblemente, la
reutilización de la lógica de expresión.
Mejorar el rendimiento
Mejorar la legibilidad
Simplificar la depuración
Reducir la complejidad
En este artículo se mostrarán las tres primeras ventajas con una medida de ejemplo
para el crecimiento de ventas de año a año (YoY). La fórmula del crecimiento de
ventas YoY es la siguiente: ventas por período _menos ventas para el mismo
período del año pasado, dividido por las ventas del mismo período del año pasado.
Mejorar el rendimiento
Observe que la fórmula repite la expresión que calcula "el mismo período del año
pasado". Esta fórmula es ineficaz, ya que fuerza a Power BI a evaluar la misma
expresión dos veces. La definición de la medida se puede hacer más eficaz usando
una variable.
La siguiente definición de medida representa una mejora. Usa una expresión para
asignar el resultado "del mismo período del año pasado" a una variable
denominada SalesPriorYear. Entonces, la variable se usa dos veces en la expresión
RETURN.
DAXCopiar
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
Mejorar la legibilidad
En la definición de medida anterior, observe cómo la elección del nombre de la
variable hace que la expresión RETURN sea más fácil de entender. La expresión es
breve y autodescriptiva.
Simplificar la depuración
Las variables también pueden ayudarle a depurar una fórmula. Para probar una
expresión asignada a una variable, debe reescribir temporalmente la expresión
RETURN para generar la variable.
La siguiente definición de medida solo devuelve la variable SalesPriorYear.
Observe cómo quita la marca de comentario de la expresión RETURN deseada. Con
esta técnica puede revertirla fácilmente una vez concluida la depuración.
DAXCopiar
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
--DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
SalesPriorYear
Reducir la complejidad
En versiones anteriores de DAX, las variables aún no eran compatibles. Las
expresiones complejas que incorporaban nuevos contextos de filtro eran necesarias
para usar las funciones DAX EARLIER o EARLIEST para hacer referencia a contextos
de filtro externos. Desafortunadamente, para los modeladores de datos estas
funciones eran difíciles de comprender y de usar.
Las variables siempre se evalúan fuera de los filtros a los que se aplica la expresión
RETURN. Por este motivo, a la hora de usar una variable dentro de un contexto de
filtro modificado, se obtiene el mismo resultado que con la función EARLIEST. Por
lo tanto, se puede evitar el uso de las funciones EARLIER o EARLIEST. Es decir, ahora
puede escribir fórmulas menos complejas y más fáciles de entender.
DAXCopiar
Subcategory Sales Rank =
COUNTROWS(
FILTER(
Subcategory,
EARLIER(Subcategory[Subcategory Sales]) < Subcategory[Subcategory Sales]
)
) + 1
DAXCopiar
Subcategory Sales Rank =
VAR CurrentSubcategorySales = Subcategory[Subcategory Sales]
RETURN
COUNTROWS(
FILTER(
Subcategory,
CurrentSubcategorySales < Subcategory[Subcategory Sales]
)
) + 1
Funciones matemáticas y
trigonométricas
Las funciones matemáticas de las expresiones de análisis de datos (DAX) son muy
similares a las funciones matemáticas y trigonométricas de Excel. En esta sección se
enumeran las funciones matemáticas que proporciona DAX.