POWER BI: LENGUAJE DAX Y APLICACIONES Semana 3 POWER BI: Lenguaje DAX y aplicaciones 1 Principales elementos de DAX En este módulo aprenderá a definir la lógica de negocios mediante la incorporación de cálculos de expresiones de análisis de datos (DAX). Aprenderá con DAX a crear tablas calculadas, columnas calculadas y medidas, que son diferentes tipos de cálculos de modelos. Además, aprenderá a escribir fórmulas de DAX y a darles formato; estas fórmulas constan de expresiones que usan funciones, operadores, referencias a objetos de modelo, constantes y variables. Todos los ejemplos adjuntos en esta lectura son construidos utilizando la base de datos Adventure Works (Microsoft, 2016), la cual fue utilizada en el video tutorial y viene adjunta en los recursos del módulo. Introducción Data Analysis Expressions (DAX) es una librería de Power BI que permite realizar principalmente tres tipos de cálculos al modelo de datos: 1. Tabla calculada: Tabla que se añade al modelo de datos que provienen a partir de una fórmula de DAX. 2. Columna calculada: Columna creada a partir de una fórmula en DAX y que se añade a una tabla del modelo de datos. 3. Medidas: Las medidas son similares a las columnas calculadas con la excepción de que se evalúan en el momento que los datos son consultados y su resultado no se almacena en el modelo de datos. POWER BI: Lenguaje DAX y aplicaciones 2 En esta lectura se explica con mayor detalle cómo llevar cada una de estas acciones con DAX. El documento está separado en dos capítulos. En el primer capítulo se introduce los elementos principales de DAX, como fórmulas, tipos de datos, funciones, operadores y variables. En el segundo capítulo se introduce su uso para calcular tablas, columnas y medidas. Principales elementos de DAX En este capítulo se describen los principales elementos de DAX, como los tipos de datos, funciones, operadores, formulas y variables. Tipos de datos En el modelo de datos cada columna tiene asignado un tipo de dato, el cual tiene por función que todos los valores de la columna se ajusten a ese tipo de dato. Los tipos de datos de DAX son diferentes a los del modelo de datos, su relación es mostrada en la Tabla 1. Un tipo de dato especial en DAX es el BLANK, el cual se usa para los valores NULL como las celdas en blanco de una base de datos. Dos funciones de DAX que se relacionan con el tipo de dato BLANK: la función BLANK que devuelve BLANK y la función ISBLANK que prueba su una expresión es BLACK y devuelve un Boolean. Tipos de datos Tipos de datos de del modelo DAX Descripción Número entero Entero de 64 bits 263 a 263-1 Número decimal Real de 64 bits Negativo: -1,79 x 10308 a -2,23 x 10-308 Cero Positivo: 2,23 x 10-308 a 1,79 x 10308 Limitado a 17 dígitos decimales POWER BI: Lenguaje DAX y aplicaciones 3 Boolean Boolean TRUE o FALSE Texto String Cadena de caracteres Unicode Fecha Fecha y hora Las fechas válidas son todas las fechas posteriores al 1 de marzo de 1900 Moneda Moneda -9,22 x 1014 a 9,22 x 1014 Limitado a cuatro dígitos decimales de precisión fija No procede BLANCK Ausencia de valor Tabla 1: Relación entre los tipos de datos del modelo de datos y DAX Fórmulas Cada tipo de cálculo se define por su nombre, seguido del símbolo igual (=), que va seguido de una fórmula de DAX. La sintaxis general es la siguiente: <Calculation name> = <DAX formula> Por ejemplo, la definición de la tabla calculada Ship Date que duplica los datos de la tabla Date es: Ship Date = 'Dim Date' Las fórmulas de DAX son un conjunto de expresiones que devuelven un resultado, así las fórmulas de tabla calculada deben devolver un objeto tabla, en cambio, las fórmulas de medida y columna deben devolver un valor escalar o único. Las fórmulas se ensamblan mediante: funciones, operadores, referencias a objetos de modelo (tabla, columna o medida), valores constantes, variables y espacios en blanco. POWER BI: Lenguaje DAX y aplicaciones 4 Funciones DAX posee cientos de funciones de las cuales más de 80 se encuentran disponibles en Excel. Las funciones de DAX se pueden agrupar en 5 principales grupos: resumen, matemáticas, texto, fechas y lógicas. A continuación, se describen algunas de estas. Funciones de resumen DAX cuenta con múltiples funciones que permiten resumir los datos, como SUM, AVERAGE, MIN, MAX, COUNT y DISTINCTCOUNT, las cuales son descritas en la Tabla 2. Función Descripción SUM Suma todos los valores en una columna AVERAGE Retorna el promedio MIN Retorna el valor más pequeño MAX Retorna el valor más largo COUNT Cuenta el total de ocurrencias DISTINCTCOUNT Cuenta el total de ocurrencias únicas Tabla 2: Muestra de funciones de resumen POWER BI: Lenguaje DAX y aplicaciones 5 Funciones matemáticas Algunas de las funciones matemáticas de DAX más usadas son ABS, ROUND, DIVIDE, POWER, EXP y LOG, las cuales son descritas en la Tabla 3. Función Descripción ABS Devuelve el valor absoluto de un número. ROUND Redondea N dígitos de un número. DIVIDE Realiza la división y devuelve un resultado alternativo o BLANCK si ocurre división por 0. POWER Devuelve un número elevado a una potencia. EXP Devuelve el exponencial de un número. LOG Devuelve el logaritmo de un número de la base ingresada. Tabla 3: Muestra de funciones matemáticas POWER BI: Lenguaje DAX y aplicaciones 6 Funciones de texto Las funciones de texto son aquellas que manipulan cadenas de caracteres (String), siendo las funciones más comunes COMBINEVALUES, CONCATENATE, LEN, FIND, SEARCH y REPLACE, las cuales se encuentra descritas en la Tabla 4. Función Descripción COMBINEVALUES Combina dos o más cadenas de texto en una sola. CONCATENATE Combina dos cadenas de texto en una sola. LEN Devuelve el número de caracteres de un String. FIND Devuelve la primera posición de una cadena de texto en otra. SEARCH Devuelve el número del carácter en el que se encuentra por primera vez un carácter o una cadena de texto específicos, de izquierda a derecha. REPLACE Reemplaza la parte de una cadena de texto, según el número de caracteres que se especifique, por otra cadena de texto. Tabla 4: Muestra de funciones de texto POWER BI: Lenguaje DAX y aplicaciones 7 Funciones de fecha En la Tabla 5 se describen algunas funciones de fechas que son comúnmente utilizadas. Función Descripción CALENDAR Devuelve una tabla con una sola columna denominada "Date" que contiene un conjunto contiguo de fechas entre el rango definido. CALENDARAUTO Devuelve una tabla con una sola columna denominada "Date" que contiene un conjunto contiguo de fechas entre un rango que se obtiene automáticamente a partir del modelo. DATE Devuelve la fecha especificada en formato de fecha y hora. DATEDFIFF Devuelve el recuento del intervalo entre dos fechas. YEAR Devuelve el año entre 1900-9999. MONTH Devuelve el mes entre 1-12. DAY Devuelve el día del mes entre 1-31. NOW Devuelve la fecha y la hora actuales. Tabla 5: Muestra de funciones de fecha POWER BI: Lenguaje DAX y aplicaciones 8 Funciones lógicas Las funciones lógicas se utilizan para evaluar expresiones. Algunas funciones lógicas comunes son TRUE, FALSE, AND, OR, NOT, IF y IFERROR. En la Tabla 6 se describe cada una de estas funciones. Función Descripción TRUE Devuelve el valor lógico TRUE. FALSE Devuelve el valor lógico FALSE. AND Devuelve TRUE si los dos argumentos son TRUE. OR Devuelve TRUE si uno de los dos argumentos es TRUE. NOT Cambia FALSE por TRUE o TRUE por FALSE. IF Devuelve un valor si la expresión a evaluar es TRUE, en caso contrario, devuelve otro valor. IFERROR Evalúa una expresión y devuelve un valor especificado si la expresión devuelve un error. Tabla 6: Muestra de funciones lógicas POWER BI: Lenguaje DAX y aplicaciones 9 Operadores de DAX Las fórmulas de DAX pueden usar operadores de DAX para crear expresiones que puedan realizar cálculos aritméticos, comparaciones o probar condiciones. En primer lugar, están los operadores aritméticos que son mostrados en Tabla 7. Una función relevante que vale la pena destacar es la función DIVIDE la cual reemplaza al operador de división (/), la cual puede devolver un valor predeterminado o BLANK cuando ocurre una división por cero. En segundo lugar, están los operadores de comparación se utilizan para comparar dos valores, siendo el resultado de dicha comparación TRUE si es verdadero o FALSE si es falsa. En la Tabla 8 se enumeran los operadores de comparación. Es importante destacar que todos los operadores de comparación, excepto == consideran BLANK como igual al número cero, una cadena vacía (““), la fecha 30 de diciembre o FALSE. Esto significa que la expresión [Sales Amount] = 0 será TRUE cuando el valor de [Sales Amount] sea cero o BLANK. En cambio, [Sales Amount] == 0] es TRUE solo cuando el valor de [Sales Amount] es cero. En la Tabla 9 los operadores lógicos que permiten combinar expresiones para producir un único resultado. Operador Descripción + Suma - Resta * Multiplicación / División ^ Exponenciación Tabla 7: Operadores aritméticos POWER BI: Lenguaje DAX y aplicaciones 10 Operador Descripción = Igual a == Estrictamente igual a > Mayor que < Menor que >= Mayor o igual que <= Menor o igual que <> No igual a Tabla 8: Operadores de comparación Operador Descripción && (doble ampersand) Crea una condición AND entre dos expresiones || (doble pipe) Crea una condición OR entre dos expresiones IN Crea una condición OR entre cada fila a ser compara con la tabla Tabla 9: Operadores lógicos POWER BI: Lenguaje DAX y aplicaciones 11 Variables En DAX se pueden declarar variables dentro de una fórmula por múltiples motivos. En primer lugar, mejora la legibilidad y el mantenimiento de las fórmulas, debido a que se evita la repetición de código. En segundo lugar, mejora el rendimiento ya que las variables se evalúan una vez. Por último, permite realizar pruebas sencillas de una fórmula compleja en el momento del su diseño. Por ejemplo, para calcular la rentabilidad año a año se puede usar la siguiente medida sin usar variables. Profit YoY % = DIVIDE( [Profit] - CALCULATE( [Profit], SAMEPERIODLASTYEAR('Fact Internet Sales'[OrderDate]) ), CALCULATE( [Profit], SAMEPERIODLASTYEAR('Fact Internet Sales'[OrderDate]) ) ) POWER BI: Lenguaje DAX y aplicaciones 12 La definición de la medida Profit YoY% se puede reescribir con el uso de una variable que guarde la utilidad del año anterior. Profit Year % = VAR ProfitPriorYear = CALCULATE( [Profit], SAMEPERIODLASTYEAR('Fact Internet Sales'[OrderDate]) ) RETURN DIVIDE( [Profit]-ProfitPriorYear, ProfitPriorYear ) Añadir cálculos al modelo de datos con DAX En este capítulo se explica cómo añadir a través de ejemplos como añadir nuevos cálculos al modelo de datos, como crear tablas calculadas, columnas y medidas. Tablas calculadas Con DAX se pueden escribir fórmulas para agregar una tabla calculada al modelo de datos. La fórmula puede duplicar o transformar los datos del modelo existente, o crear una serie de datos para crear una tabla. Los datos de las tablas calculadas siempre se importan en el modelo, por lo que aumenta el tamaño de almacenamiento del modelo y puede prolongar la duración de la actualización de los datos. Las tablas calculadas pueden ser útiles en diversos escenarios, como para crear tablas de fechas, dimensiones realizadoras de roles o análisis de hipótesis. POWER BI: Lenguaje DAX y aplicaciones 13 Tablas de fechas Las tablas de fechas son necesarias para aplicar filtros de hora especiales conocidos como inteligencia de tiempo. Una familia de funciones de DAX, conocida como funciones de inteligencia de tiempo, solo funciona correctamente cuando se configura una tabla de fechas. Cuando los datos originales no incluyen una tabla de fechas esta se puede crear como una tabla calculada a través de las funciones CALEANDAR o CALEANDARAUTO de DAX. Para crear una nueva tabla se debe ir a Herramientas de tablas en el modelo de datos y dar clic Nueva tabla, tras esto se habilita un cuadro de texto dentro del cual se pueden escribir fórmulas en DAX para generar una nueva tabla. Por ejemplo, en la Figura 1 se muestra como generar una tabla calculada con la función CALENDARAUTO, la cual devuelve una tabla con una sola columna denominada "Date" que contiene un conjunto contiguo de fechas entre la fecha mínima y máxima de los datos. Figura 1: Crear tabla calculada con la función CALENDARAUTO POWER BI: Lenguaje DAX y aplicaciones 14 Dimensiones realizadoras de roles Cuando dos tablas de modelos tienen varias relaciones, podría deberse a que el modelo tiene una dimensión realizadora de roles. Por ejemplo, se tiene la tabla Fact Internet Sales que incluye dos columnas de fecha, OrderDateKey y ShipDateKey, ambas columnas están relacionadas con la columna DateKey de la tabla Dim Date. Esto es ilustrado en la Figura 2. En este caso, la tabla Dim Date se describe como una dimensión realizadora de roles, ya que podría desempeñar el rol de fecha de pedido o fecha de envío. Figura 2: Relación activa e inactiva entre la tabla Fact Internet Sales y Dim Date. La relación activa relaciona el campo OrderDateKey de la primera tabla con el campo DateKey de la segunda. La relación inactiva (relación discontinua) relaciona el campo ShipDateKey de la primera tabla con el campo DateKey de la segunda. Los modelos de datos solo permiten una relación activa entre las tablas, lo que es indicado a través de una línea sólida. De forma predeterminada, Power BI utiliza la relación activa para POWER BI: Lenguaje DAX y aplicaciones 15 propagar los filtros, en este caso, la relación entre DateKey y OrderDateKey. En este caso, un mejor diseño del modelo podría ser tener dos tablas de fecha, cada una con una relación activa con la tabla Fact Internet Sales. En la Figura 3 se muestra cómo crear esta tabla y en la Figura 4 el modelo de datos resultante. Figura 3: Duplicar tabla Dim Date bajo el nombre Ship Date POWER BI: Lenguaje DAX y aplicaciones 16 Figura 4: La tabla Fact Internet Sales está relacionada a través de sus campos OrderDateKey y ShipDateKey con el campo DateKey de la tabla Dim Date y Ship Date respectivamente. Análisis de hipótesis Power BI Desktop admite una característica llamada parámetros de hipótesis o parámetro what-if. Un parámetro what-if permite segmentar los datos y agregarlos a una tabla calculada al modelo. Por ejemplo, podría crear un informe que permita al personal de ventas ver sus compensaciones si satisfacen determinados objetivos o porcentajes de venta, o ver la influencia que tiene el incremento en las ventas sobre unos mayores descuentos. En particular, estas tablas calculadas no están relacionadas con otras tablas de modelos porque no se usan para propagar los filtros. POWER BI: Lenguaje DAX y aplicaciones 17 Para crear una tabla what-if se debe estar en la vista Informe, en el menú Modelado y dar click a Parámetro nuevo, tras esto se abrirá una ventana en la que se puede definir el patrón de la columna que tendrá la tabla. En la Figura 5 se muestra cómo crear el parámetro de hipótesis Discount como una columna que toma valores en el intervalo [0, 0.5] con saltos de 0.01. En la Figura 6 se muestra la tabla creada en el modelo de datos a partir del parámetro de hipótesis Discount. Figura 5: Menú de creación de un parámetro de hipótesis POWER BI: Lenguaje DAX y aplicaciones 18 Figura 6: Tabla calculada a partir de un parámetro de hipótesis POWER BI: Lenguaje DAX y aplicaciones 19 Columnas calculadas En Power BI se puede escribir fórmulas en DAX para agregar una columna calculada a cualquier tabla del modelo de datos. La fórmula se evalúa para cada fila de la tabla y devuelve un valor único. Por ejemplo, en la tabla Fact Internet Sales usando los campos OrderDate y ShipDate se puede obtener la cantidad de horas en que el pedido tarda en llegar al cliente. DeliveryTime = DATEDIFF('Fact Internet Sales'[OrderDate], 'Fact Internet Sales'[ShipDate], HOUR) Para crear la columna en Power BI desde Herramientas de tablas se debe dar click a Nueva Columna, tras esto se abre el menú Herramientas de columnas en el cual aparece un cuadro de texto blanco en donde se pueden escribir las fórmulas. En la Figura 7 se muestra cómo crear la columna DeliveryTime. Figura 7: Crear columna DeliveryTime en la tabla Fact Internet Sales a partir de los campos OrderDate y ShipDate POWER BI: Lenguaje DAX y aplicaciones 20 En el panel Campos, las columnas calculadas se mejoran con un icono especial. En la Figura 8 se muestra una sola columna calculada en la tabla Fact Internet Sales. Figura 8: Columnas calculadas en el panel de campos. En la tabla Fact Internet Sales el campo calculado DeliveryTime se muestra con un símbolo especial Medidas Puede escribir una fórmula de DAX para agregar una medida a cualquier tabla del modelo. La fórmula está relacionada con la obtención del resumen sobre los datos del modelo. De forma similar a una columna calculada, la fórmula debe devolver un valor único. A diferencia de las columnas calculadas, que se evalúan en el momento de la actualización de datos, las medidas se evalúan en el momento de la consulta y sus resultados nunca se almacenan en el modelo. A continuación, se muestra como calcular tres medidas a partir de la tabla Fact Internet Sales: el ingreso total (Revenue), el costo total (Cost) y la utilidad total (Profit). Revenue = Sum('Fact Internet Sales'[SalesAmount]) Cost = Sum('Fact Internet Sales'[TotalProductCost]) Profit = [Revenue] – [Cost] POWER BI: Lenguaje DAX y aplicaciones 21 Para crear una medida en Power BI se debe en Herramientas de tablas dar click a Nueva medida, tras esto se abre el menú Herramientas de medición en el cual aparece un cuadro de texto blanco en donde se pueden escribir las fórmulas. En la Figura 9 se muestra cómo crear la medida Revenue. Figura 9: Crear medida Revenue como la suma del campo SalesAmount de la tabla Fact Internet Sales En el panel Campos, las medidas se muestran con el icono de la calculadora. En la Figura 10 se muestra la medida Revenue calculada en el punto anterior en el panel de campos. Figura 10: Medidas en el panel Campos. Las medidas explícitas son mostradas con el símbolo de calculadora y las medidas implícitas con el símbolo de sigma (∑) En ocasiones, las medidas se pueden describir como medidas explícitas a los que se suele hacer referencia simplemente como medidas. Sin embargo, también existe el concepto de medidas implícitas. Las medidas implícitas son columnas que se pueden resumir mediante objetos visuales de formas sencillas, como recuento, suma, mínimo, máximo, etc. Estas medidas están identificadas en el panel Campos por el símbolo sigma (∑). POWER BI: Lenguaje DAX y aplicaciones 22 Referencias Microsoft (2016). Adventure Works. https://github.com/Microsoft/sql-server- samples/releases/download/adventureworks/ Microsoft (2020). Referencia de expresiones de análisis de datos (DAX). https://docs.microsoft.com/es-es/dax/ POWER BI: Lenguaje DAX y aplicaciones 23