Evolución de Excel en Modelado de Datos
Evolución de Excel en Modelado de Datos
Fuentes de datos
Facturas
Compras Gastos Salarios Histórico
formales informales y otros Precios
Ventas Cancelados Productos
Cambiar
nombre
Entrar al Advanced y tipo
Editor e ingresar
este código M
Guarda en una variable FechaInicial el 1/1/Inicio
let Guarda en una variable FechaFinal el 31/12/Fin
FechaInicial = #date(Inicio,1,1),
Calcula la cantidad de días entre ambas fechas
FechaFinal= #date(Fin,12,31), Agregar
CantidadDeDias = [Link]( FechaFinal - FechaInicial),
Fechas = [Link](FechaInicial, CantidadDeDias+1, #duration(1,0,0,0)) columnas
in deseadas
Fechas
Genera una lista de fechas que inicia en FechaInicial, tiene CantidadDeDias+1 registros y se van
incrementando en 1D,0H,0M,0S
Data Analytics con Power BI
9.
Modelo de Datos:
Parte 2. Modelado Funcional
Power BI: Vista de Datos e Interfaz para Modelado
Ajuste de Relaciones
Ajuste de Datos
DAX: Elementos y lógica de negocios
Columnas Calculadas, Medidas, Tablas Calculadas
Contexto de evaluación
Inteligencia temporal
Preparación de la Vista de Reportes
Modelo de Datos
Capas de diseño
REPORTING
Modelado Funcional
REPOSITORIOS El modelado Funcional debe terminar de ajustar
el Modelo de Datos a las necesidades de
Analítica y Reporting de los Usuarios
QUERYING
Aportar Lógica de Negocio al Modelo de Datos
Identificación de métricas necesarias
Modelado de Relaciones
Ajuste de formatos
Transformación de campos
Creación de Lógicas de Cálculo
Definición de la Navegabilidad de la Información
ANALYTICS
Modelado de Datos
Ajuste de Relaciones
Vista de Relaciones
Si bien Power BI es capaz de realizar una asignación automática de relaciones entre tablas al
reconocer campos con nombres y tipos de datos similares deberemos realizar nuestro propia
construcción de relaciones entre entidades.
Tipos de Relaciones:
Redondeos
Fixed 19 dígitos
precisos
Enteros
Enteros 19 dígitos Integer
grandes
La Vista de Datos en
Power BI nos ofrece
operaciones de
Modelado
IMPORTANTE
• La modificación de formatos en la Capa de Vista de Datos En éste Panel podemos ver todos los
no modifica los seteos de formatos y tipos de datos de la elementos del Modelo de Datos que están
capa ETL de Query Editor accesibles para la realización de Analytics
• Pero la eliminación de Campos ó Tablas SI
Práctica
Modelado de Datos – Ajuste de Datos
En Excel podemos escribir diferentes formulas en En DAX escribimos una sola formula como por
cada celda y cada una de estas formulas generará ejemplo SUM(Ventas[TotalVenta]) y luego usamos
diferentes resultados. filtros en el reporte para modificar los resultados
que devuelve la fórmula
Podemos arrastras fórmulas y las mismas
apuntarán a distintas celdas Los filtros pueden provenir de:
• Las visualizaciones del reporte
Cada celda es única y se calcula por su cuenta. • Los que se apliquen a la función CALCULATE, que
es la única función que puede evitar el uso de los
filtros ya aplicados
• Columnas calculadas
Elementos DAX
• Medidas
• Tablas calculadas
Modelado de Datos
Elementos de cálculo DAX
Las columnas calculadas se utilizan cuando queremos crear un nuevo campo para cada registro de la tabla cuyo
valor resulte del cálculo de otros campos, en el contexto de cálculo de esa fila.
Queremos además, en la misma tabla, dejar en otra columna el margen unitario de cada venta ($)
Ejercicio
En la tabla Productos crear la columna “Margen” con la
diferencia entre Precio Unitario y Costo Unitario.
Crear otra que indique el Margen% expresado como
“Margen / Costo unitario”
Ganancia Unitaria = ( Sales[SalesAmount] - Sales[TotalCost] )
/ Sales[SalesQuantity] Finalmente crear una columna llamada “Margen
Cualitativo” que diga “Bajo” si es menor a 100%, “Medio”
si está entre 100% y 200% y “Alto” si supera 200%
Elementos DAX
Columnas Calculadas – Accediendo a datos de otra tabla (RELATED)
Para poder acceder a datos de otra tabla al usar una columna calculada, necesitamos primero haber creado las
relaciones entre la tabla actual y la tabla donde está el dato original.
Esto se hace en el modelo de datos
Luego, podemos traer información de otra tabla usando la instrucción DAX llamada RELATED
Supongamos que queremos traer a la tabla Sales el campo Product Name que reside en la tabla Products
Notemos que al escribir RELATED, PowerBI solo nos muestra campos disponibles en tablas relacionadas
Una vez que trajimos el campo ProductName, si quisiéramos ocultarlo o ni siquiera traer la tabla Product,
podríamos
Elementos DAX
Columnas Calculadas – Accediendo a datos de otra tabla (RELATEDTABLE)
Qué pasaría si quisiéramos traer desde el lado “1” los elementos múltiples del lado “*”?
(Ejemplo: para cada Producto, los tickets de venta asociados)
El resultado ya no sería un valor sino una tabla
Dado que una columna calculada creará un valor, necesitamos un Agregador para recorrer
una tabla relacionada y mostrarlo en cada fila
Elementos DAX
Medidas
Las medidas son lo que nos permiten utilizar el poder de una base de datos de columnas
No son tan intuitivas, pero son muy poderosas a la hora de encapsular la lógica de negocios en un modelo
Nos permiten mirar todos los datos, una columna por vez, en lugar de estar limitados a una sola fila
Para cada columna del modelo de datos, PBI identifica el tipo de datos y ofrece una serie de medidas
automáticas que llevan el nombre de dicha columna.
Según el tipo de datos, habrá distintas opciones de medidas
Estas medidas están automáticamente disponibles al momento de crear el modelo
de datos, y son conocidas como Medidas Implícitas (no requieren que el diseñador
escriba una fórmula DAX para crearlas)
Columna no agregable
Columna agregable
Son las que surgen de manera automática de arrastrar un atributo a un elemento agregador.
Sí es posible definir un comportamiento de agregación por default a cada campo de una tabla.
En general el uso de ‘Medidas explícitas‘ permite crear un modelo más consistente, por lo que aconsejamos
poco uso de estas medidas
Elementos DAX
Medidas Explícitas
Las Medidas Explícitas son patrones de cálculo que sirven para enseñar al sistema cómo deben ser
agregados los elementos de una fórmula cuando la misma es requerida en una consulta de analytics.
Agregadores Iteradores
• Son medidas que se calculan sobre una sola columna • Permiten hacer cálculos sobre más de una columna
(Su único parámetro es una columna) (Requieren dos parámetros: una tabla y una
expresión)
• Esa columna tiene que existir en alguna de las tablas • Dichas expresiones no tienen por qué existir en
ninguna de las tablas
• Se calculan recorriendo la columna en cuestión, previa • Se calculan recorriendo la tabla que se pasa como
aplicación de los filtros que estén activos parámetro y evaluando la expresión fila a fila, previa
aplicación de los filtros activos. El resultado se guarda
en una “columna temporal” que luego se agrega con la
función elegida (suma, promedio, mínimo, etc)
• Permiten cálculos de baja complejidad • Permite expresiones tan complejas como se desee
COUNT SUM AVERAGE COUNTX SUMX AVERAGEX
La fórmula a aplicar debería recorrer todas las filas, para cada una de ella multiplicar Precio por Cantidad e ir agregando
con alguna fórmula (en este caso Suma) hasta llegar a la última fila
Total de Ventas (Antes de Descuento) = SUMX( Sales; Sales[SalesQuantity] * Sales[UnitPrice] )
El resultado es:
Elementos DAX
Medidas Explícitas: COUNT - Diferencias entre funciones similares
COUNT SI SI SI NO NO Agregado
COUNTA SI SI SI SI NO Agregado
COUNTBLANK NO NO NO NO SI Agregado
COUNTROWS SI SI SI SI SI Agregado
COUNTX SI SI SI NO NO Iteración
COUNTAX SI SI SI SI NO Iteración
DISTINCTCOUNT SI SI SI SI SI Agregado
DISTINCTCOUNTNOBLANK SI SI SI SI NO Agregado
Buena práctica: Tabla de Medidas
Podemos en nuestro modelo una tabla que exclusivamente contenga medidas
Esto es posible porque las Medidas pueden ver datos de todas las tablas al mismo tiempo
PASOS:
1. Creamos una nueva tabla desde la opción “Enter Data”
CALENDAR CALENDARAUTO
• Requiere dos parámetros: Fecha de inicio y fecha de fin • Utiliza como parámetro un valor
• La fecha inicial y final puede ser un valor, o usarse las • El parámetro es mes del fin del año fiscal
funciones FIRSTDATE y LASTDATE sobre un campo de • Genera un calendario en el que cada registro es un
fechas de alguna tabla del modelo día, iniciando en el primer día fiscal de la primera
fecha de las tablas del modelo y terminando en el
• Genera un calendario en el que cada registro es un día, último día fiscal del último día de las tablas del modelo
iniciando en la primera fecha y terminando en la • Ej: Calendar = CALENDARAUTO (12)
segunda fecha
Las tablas de fechas pueden ser creadas desde cero en Query Editor ([Link]
La ventaja es que se pueden usar para consultar APIs u otros servicios en base a la fecha y traer esos datos al modelo.
La ventaja de hacerlo en DAX es simplicidad siempre que no tengamos que hacer esas consultas en nuestro modelo
Modelado de Datos
Tablas Calculadas: Dimensión de Tiempo Ej Tabla dinámica Excel
Al crear una Tabla Calendario e identificarla como tal, PBI crea un modelo dimensional de fechas
El principal uso de este tipo de tablas es para las funciones de Time Intelligence que se explicarán más adelante
Las jerarquías también pueden ser creadas por el usuario arrastrando un campo arriba de otro
• Filtros implícitos y explícitos
En algunos casos los filtros están implícitos en la visualización que se utiliza, mientras que en otros casos los
filtros están explícitos porque los expresamos dentro de la Medida que generamos
En la tabla, además, agreguemos la medida implícita “Unit Price” pero pongamos el valor promedio (no la suma)
Aplicar ahora en el Slicer cualquier valor, y veremos que no importa lo que elijamos, PrecioPromedioAudio siempre muestra
el valor de Audio
Limitaciones de CALCULATE
• Los filtros no pueden contener condiciones aplicadas a una medida. Tienen que ser una columna
• Los filtros no pueden contener una operación que involucre a más de una columna
La expresión que queremos evaluar Esta es la tabla a la que aplicaremos Una expresión que será la condición de
en el contexto que fijaremos a el filtro. filtrado.
continuación. Por ejemplo: ‘Sales’ Por ejemplo: Sales[Ganancia Unitaria]
Por ejemplo: COUNTROWS('Sales') / Sales[SalesAmount] > 0,15
La función FILTER conceptualmente es un iterador como los ya vistos. Toma una tabla, evalúa una expresión fila a
fila. La diferencia es que devuelve una tabla. Por eso la envolvemos en otra expresión, que genera una medida
escalar
FILTER genera implícitamente una nueva tabla. Podemos convertirla en una tabla explícita aplicando la misma
expresión del ejemplo a una TABLA CALCULADA en lugar de a una MEDIDA
Aplicando filtros más complejos
Continuaremos trabajando con el archivo de Contoso
Generaremos filtros más complejos de los que permitiría la función CALCULATE usando la función FILTER.
Primero creemos en la tabla Sales una nueva medida explícita llamada “Ganancia promedio sobre precio”
Ganancia promedio sobre precio = AVERAGEX(Sales; Sales[Ganancia Unitaria] / Sales[UnitPrice])
Insertemos ese campo en la tabla que contenía ProductCategory, y agreguemos la medida Cantidad de Ventas
Aplicando filtros más complejos
Basados en medias u operaciones con múltiples columnas
Supongamos que quisiéramos contar la cantidad de ventas que tienen una ganancia superior al 70%, es decir usar la medida
anterior como criterio de filtrado.
Si quisiéramos aplicar CALCULATE intentaríamos:
Ventas con margen promedio mayor que 70% = CALCULATE ([Cantidad de Ventas];
[Ganancia promedio sobre precio] > 0.7)
No se puede filtrar con una medida
Ventas con margen promedio mayor que 70% = CALCULATE ([Cantidad de Ventas];
( Sales[Ganancia Unitaria] / Sales[UnitPrice]) > 0.7)
Ventas con margen promedio mayor que 70% = CALCULATE ([Cantidad de Ventas];
FILTER (Sales;[Ganancia promedio sobre precio]>0,7))
Ventas con margen promedio mayor que 70% = CALCULATE ([Cantidad de Ventas];
FILTER (Sales; (Sales[Ganancia Unitaria]/Sales[UnitPrice])>0,7 )))
Aplicando filtros más complejos
Basados en medias u operaciones con múltiples columnas
Notemos que FILTER genera una tabla con los criterios solicitados
Tabla de Ventas con margen promedio mayor que 70% = FILTER (Sales;[Ganancia promedio sobre precio]>0,7))
Si entramos a la vista Tabla, podremos ver que esta tabla tiene la misma cantidad de filas que la métrica que hemos ingresado
Filtros con más de un criterio
Filtros múltiples y anidados
Si quisiéramos filtrar una tabla por más de un criterio, hay que tener en cuenta que FILTER acepta solamente un parámetro.
Aparecen las siguientes posibilidades:
a) Más de un criterio en la misma columna. Por ejemplo, queremos traer una tabla de Productos donde la marca (BrandName) sea
o bien Contoso o bien Litware
b) Más de un criterio de la misma tabla, distintas columnas. Por ejemplo, queremos traer una tabla de Productos donde la marca
(BrandName) sea Contoso y el precio (UnitPrice) sea menor a 50
Tabla intermedia
Productos Contoso de menos de $50 = FILTER(
FILTER('Product';'Product'[BrandName]="Contoso");
'Product'[UnitPrice]<50
)
Algunos cálculos se pueden hacer con o sin filter
Sin embargo hay diferencias a tener en cuenta
Supongamos que queremos saber la Cantidad de Ventas de los productos marca Litware y Categoría = Economy
La sintaxis de la función ALL para quitar todos los filtros de una tabla es:
La sintaxis de la función ALL para quitar los filtros aplicados a una columna es:
Porcentaje por marca = Todas las ventas de esta marca / Todas las ventas de todas las marcas
Esto ocurre porque solo filtramos una columna, que no es la del filtro aplicado.
Si queremos el total de ventas independientemente del tipo de producto, tenemos que filtrar por toda la tabla
Producto. Agreguemos una nueva medida que haga eso
Agreguemos estos dos campos a la tabla y veamos cómo se comportan al modificar los filtros
• Contexto de Filtro
• El contexto de filtro propaga el filtrado a otras tablas • No propaga los filtros a otras tablas. Para usar esas
relacionadas (cross-filtering) tablas requiere aplicar RELATED / RELATEDTABLE
Anidación de filtros
Un ejemplo avanzado
SUMX ( ← Para cada producto recorreremos las ventas que tuvo y las iremos
acumulando con el iterador SUMX
)
• Tipos de funciones
Cuanto más completa esté la tabla de fechas, más posibilidades de cálculo tendremos por la Dimensión Tiempo
Por lo tanto es muy útil crear en nuestros modelos una Tabla Calendario que agregue las siguientes columnas
básicas
Modifica el contexto de
SAMEPERIODLASTYEAR(Columna de fechas) evaluación a fechas del mismo
período, un año antes
Ventas YTD Año Previo = TOTALYTD ([Ventas Totales];SAMEPERIODLASTYEAR ('Nuevo Calendario'[Date]))
Ventas Dos meses atrás = CALCULATE ([Ventas Totales];DATEADD ('Nuevo Calendario'[Date]; -2; MONTH))
Ventas Dos semanas atrás = CALCULATE ([Ventas Totales];DATEADD ('Nuevo Calendario'[Date]; -14; DAY))
Comparaciones de períodos acumulados
PreviousMonth, DatesInPeriod, LastDate
Variación % ventas = DIVIDE ([Ventas Totales] - CALCULATE ([Ventas Totales]; Variación de ventas de este
PREVIOUSMONTH('Nuevo Calendario'[Date]));
CALCULATE ([Ventas Totales];
mes respecto al previo, como
PREVIOUSMONTH('Nuevo Calendario'[Date]));0) porcentaje
Variación % ventas =
var VentaMesPasado = CALCULATE ([Ventas Totales]; PREVIOUSMONTH('Nuevo Calendario'[Date]))
RETURN DIVIDE ([Ventas Totales] - VentaMesPasado ; VentaMesPasado ; 0)
Modifica el contexto la
DATESINPERIOD (Columna de Fechas; Fecha Inicio; Cantidad de Intervalos;
cantidad de intervalos deseada
Unidad del intervalo)
a partir de la fecha inicio
Ventas MAT = CALCULATE([Ventas Totales]; DATESINPERIOD('Nuevo Calendario'[Date]; MAT (Moving Annual Total) de
LASTDATE('Nuevo Calendario'[Date];-1;YEAR)) ventas
• Cuando hay dos expresiones (con y sin X), las expresiones con la X trabajan como
Excel, fila a fila (Mnemotécnico: X = Across). Las “sin X” aplican verticalmente, a
columnas.
• SUM es una formula “agregadora”. Suma todos los resultados en una única columna
luego de aplicar los filtros. No conoce el concepto de Fila
• SUMX es una fórmula “iteradora”. Trabaja fila por fila para completar la evaluación
luego de haber aplicado los filtros. Puede además operar sobre más de una columna.
Ej: SUMX( Ventas[PrecioVenta] * Ventas[Cantidad] )
• A veces podemos hacer con SUM lo que hace SUMX si es que antes creamos una
columna calculada.
• Lo mismo aplica a AVERAGE, COUNT, etc
Algunos hints de DAX: FILTER y CALCULATE
• La función FILTER devuelve una tabla, aplicando un criterio sobre una de sus
columnas
• Si se necesita aplicar más de un filtro en distintas columnas, o bien se usa la función
AND o bien se anida más de un FILTER.
• Si se necesita aplicar más de un filtro en la misma columna se usa la función OR
• DATESYTD: Devuelve, a partir de una columna que contiene fechas, una tabla con todas las
fechas desde el inicio del año hasta la mayor fecha de esa columna.
Solo puede contener fechas que estén en la columna original
• DATEADD: Devuelve, a partir de una columna que contiene fechas, una tabla con fechas a
partir de la última, desplazadas en el intervalo que se especifique en los argumentos de la
función
• DIFFDATE: Devuelve el número de intervalos (de segundos hasta años) que hay entre dos
fechas
• DATESBETWEEN: Devuelve, a partir de una columna con fechas, una tabla que va desde la
primera hasta la segunda. Si no se especifica, se toma el valor inicial como el más temprano
de la tabla y el final como el más tardío
• DATESINPERIOD: Devuelve, a partir de una columna con fechas, una tabla que parte desde la
primera y avanza (o retrocede) una determinada cantidad de intervalos
• FIRSTDATE / LASTDATE: Devuelve la primera / última fecha de una columna con fechas
Algunos hints de DAX: RELACIONES
• USERELATIONSHIP: Permite especificar qué relación entre dos tablas utilizar cuando
haya más de una posibilidad (ej: usar una inactiva). Se utiliza como otro filtro dentro
de CALCULATE. Un ejemplo puede ser cuando en la tabla de hechos hay dos
columnas de fecha: fecha de la venta y fecha de factura. Ambas deben estar
relacionadas con la tabla calendario
• RELATED: Es una función que trae UNA columna desde otra tabla, que tiene que estar
relacionada a UNA columna de la primera. Solo funciona en relaciones UNO a UNO.
Aplica a contextos de fila (como Columnas calculadas o iteradores)
• RELATEDTABLE: Devuelve una tabla relacionada con la primera. Para usarla en una
medida, deberá incluirse esta expresión dentro de una función de iteración como
SUMX. Aplica a contextos de fila.
Algunos hints de DAX: VARIABLES
• Las variables en DAX sirven para la comprensión de fórmulas, especialmente en expresiones complejas
• Permiten dividir dichas expresiones complejas en partes más sencillas
• Pueden almacenar un escalar o una tabla
• Una VARIABLE DAX lleva la siguiente sintaxis:
VAR nombre1 = Una expresión DAX
VAR nombre2 = Otra expresión DAX
…
RETURN
Una expresión DAX que use las variables previamente creadas
• Estas variables pueden ser usadas en otras expresiones a los largo del reporte
• Cada variable se evalúa una vez antes de llegar a la parte del RETURN.
• La variable de más abajo puede usar la de arriba
• Las variables se ejecutan utilizando el contexto de fila y columna
• Una vez que la variable tiene un valor asignado, ese no puede cambiarse en la ejecución de la porción del
RETURN (para el Return actúan como constantes)
Algunos hints de DAX: VARIABLES (2)
Ejemplo
VAR
VentasBicicletas= FILTER( ALL ( Products[TipoProducto] ) ; Products[TipoProducto] = "Bicicleta" )
VAR
PlazoEvaluacionDias = 90
VAR
FechasIncluidas = FILTER ( ALL( Calendario[Dates] ) ; Calendario[Dates] < TODAY() && Calendario[Dates]
>= TODAY() - PlazoEvaluacionDias )
RETURN
CALCULATE ( [VentasTotales]; VentasBicicletas; FechasIncluidas )
// Podemos ajustar el plazo con la variable PlazoEvaluacionDias
Esta función genera una tabla filtrada de Productos que se guarda en VentaBicicletas
Luego genera un rango de fechas relativo al presente, de 90 días (aunque se puede cambiar facilmente)
Finalmente calcula las ventas totales con los dos filtros previamente aplicados en una expresión sencilla