0% encontró este documento útil (0 votos)
40 vistas80 páginas

Evolución de Excel en Modelado de Datos

Este documento describe el modelo de datos del caso Las Delicias. Explica cómo se creó una tabla de fechas en Power Query y cómo se generó una lista de fechas entre 2015 y 2018. También describe elementos del modelado funcional como ajustar relaciones, datos, columnas calculadas, medidas y tablas calculadas.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
40 vistas80 páginas

Evolución de Excel en Modelado de Datos

Este documento describe el modelo de datos del caso Las Delicias. Explica cómo se creó una tabla de fechas en Power Query y cómo se generó una lista de fechas entre 2015 y 2018. También describe elementos del modelado funcional como ajustar relaciones, datos, columnas calculadas, medidas y tablas calculadas.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Tarea: Modelo de datos del caso Las Delicias

En la práctica de ETL habíamos terminado con la extracción de fuentes en 4 tablas principales

VENTAS GASTOS OTROS

Fuentes de datos
Facturas
Compras Gastos Salarios Histórico
formales informales y otros Precios
Ventas Cancelados Productos

Tablas del modelo


Calendario Lista Lista Precios Rubros
Proveedores Rubros Productos

Ventas Gastos Productos


facturados
Creación de una tabla de fechas en Query Editor
Crear 2 parámetros: Generar una Query
Inicio y Fin en blanco y Convertir la lista
(Para nuestro ejemplo sus llamarla Calendario a tabla
valores serán 2015 y 2018)

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

PROCESOS ETL QUERYING

Modelado Dimensional Modelado Funcional


Desarrolla la lógica de relaciones, campos,
agrupaciones y parámetros necesarios para el
desenvolvimiento ágil de los analistas
Modelo de Datos
Modelado Funcional

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

Las relaciones entre tablas


especifican cómo se encadenarán
las distintas tablas de hechos y de
dimensiones

Las maneras en que definamos


las relaciones entre elementos
delimitarán luego las
posibilidades de cruce de datos
que van a ser necesarias en
capa de análisis y reporting
Modelado Funcional
Power BI - Vista de Relaciones
Gestor de relaciones

PBI desactiva esta relación porque es


La Vista de Relaciones nos redundante
permite crear, eliminar o
modificar las relaciones entre
las tablas del modelo de datos

Vista de Relaciones

Podemos gestionar relaciones de


manera manual clickeando en el
vínculo

Las fechas nos indican el sentido en


el que se propagan los filtros

Por qué no ponemos todas las relaciones bidireccionales?


En modelos grandes, deteriora la performance y hace más lento al sistema
Modelado de Datos
Ajuste 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.

1. Eliminar manualmente todas las relaciones que PBI ha establecido


automáticamente.
2. Identificar los distintos hechos, dimensiones y jerarquías.
3. Hacer foco en un Hecho y conectarlo con las Dimensiones que se
utilizan para caracterizarlo.
4. Comprobar el correcto funcionamiento de la relación creada
creando un reporte simple
Modelado de Datos
Ajuste de Relaciones

Tipos de Relaciones:

Uno a Muchos / Muchos a Uno:


Es el tipo más frecuente ya que es el que más sentido tiene Cardinalidad:
en los modelos dimensionales. El sentido de filtrado para el que está pensada
la relación:
Muchos a Muchos: -Simple: la relación sólo viaja en un sentido
Suelen utilizarse en situaciones complejas donde se requieren -Cruzado: la relación puede ser usada en
Bridge Tables (ej: Cuentas Bancarias con clientes múltiples) ambos sentidos
Más Data
IMPORTANTE:
Uno a Uno: Un Modelo Relacional NO funcionará
Son muy poco frecuentes ya que si éste es el caso seguramente correctamente si tenemos datos
tenga más sentido fusionar la información de ambas tablas en una duplicados en nuestras tablas
única tabla.
Práctica
Modelado de Datos – Ajuste de Relaciones

 Exploración del Modelo de Datos de Raiven


 Reconstrucción de relaciones desde los Hechos a las Dimensiones
 Definición de Jerarquías Dimensionales
 Definición de los sentidos de Filtrado
 Identificar, diagnosticar y corregir problemas
 Cuales tipos de Informes podrías construir con las relaciones establecidas? Retomar el modelo del
caso RAIVEN
 Cómo harías un reporte de Cantidad de Clientes por Unidad de Negocio?
 Cómo harías un reporte de Cantidad de Rubros por Unidad de Negocio?
Modelado de Datos
Ajuste de Datos
A partir de los procesos ETL disponemos de los datos organizados según el Modelo de
Datos pero aún es necesario validar y acomodar los valores según los formatos y
comportamientos que van a ser utilizados para el trabajo analítico.

→ Validación de los Tipos de Datos MUY IMPORTANTE:


→ Redondeos • La gran mayoría de errores de
relaciones y filtros ocurren por
→ Utilización de unidades de medida una asignación inconsistente
de los tipos de datos en que se
→ Acomodamientos de Tipos de Datos (para optimización) basan las relaciones.
→ Categorización de campos (tipos especiales de PBI) • Siempre REVISAR que estén
bien asignados los tipos de
→ Predefiniciones sobre comportamiento ante el cálculo datos de cada campo.
Modelado de Datos
Ajuste de Datos – Ajustando el Tipo de Dato

Tipos de Dato Numéricos de PBI:


Tipo Para… Hasta… Como se los conoce en
otros Software
Decimal Precisión 15 dígitos con punto flotante Decimal, Float

Redondeos
Fixed 19 dígitos
precisos
Enteros
Enteros 19 dígitos Integer
grandes

Sobre las fechas:


• PBI ofrece múltiples formatos de Fecha/Hora
• De fondo en realidad se trata de números decimales
• La parte entera representa días transcurridos desde 30/12/1899
• La parte decimal representa Horas, Minutos y Segundos
Modelado de Datos
Ajuste de Datos / PBI Vista de Datos
Nos permite predefinir el comportamiento
que asumirá un campo numérico cuando
Interfaz de Modelado éste sea utilizado en operaciones de
agregación en la capa de Reporting

La Vista de Datos en
Power BI nos ofrece
operaciones de
Modelado

La categorización de la información es útil para


Vista de Datos Podemos transformar el formato adecuar los tipos de datos especiales a
de presentación sin perjudicar el funciones más avanzadas de visualización
Podemos transformar el dato base
tipo de dato de un campo
pero perderemos la
Tabla actualmente en Vista precisión original de la
fuente

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

 Reconocimiento de la Interfaz de Vista de Datos y Modelado


 Exploración del Modelo de Datos
 Cambio de formatos
 Aplicación de Reglas de Comportamiento al Cálculo Retomar el modelo del
 Categorización de Campos caso RAIVEN
Modelado de Datos
Modelado de valores, métricas y lógicas de cálculo

La creación de valores calculados y métricas en Power BI se realiza


mediante el lenguaje DAX

Data Analysis Expressions


• DAX es un lenguaje de expresiones para modelos tabulares
• Similar a las funciones de Excel
• Es utilizado en otros entornos Microsoft como PowerPivot, SQL
Server Analysis Service –tabular mode- y Azure Analysis Service MUY IMPORTANTE:
• Sirve para cálculos simples y avanzados en modelos de datos
• Según tu configuración de
• Simple, pero no fácil
Lenguaje quizá tengas que usar
• El dominio de DAX es complejo ; ó ,
• Dentro de las fórmulas a veces
las condiciones deben ir
encapsuladas entre ( )

Acceso a Opciones DAX


DAX: para qué sí, para qué no

• Reporting analítico: Generar • Reporting operacional: tareas de


agregadores que procesan mucho detalle (como listar ítems de
rápidamente millones de filas de una orden de compra)
datos para proveer un indicador • Las tablas de muchas columnas
numérico empeoran la performance
• Manipular filtros y ayudando a Los modelos “estrella” son óptimos
analizar datos históricos con DAX
• Agregar lógica de negocios a los • Relaciones muchos a muchos
datos
DAX
Aprendizaje de DAX
Por qué nos cuesta aprender DAX?
Vamos a pensar que es como Excel
Dificultad Contextos
Se parece al Excel (algunas formulas hasta se llaman igual)
Time intelligence anidados
pero requiere un approach totalmente
distinto

Trabaja con Columnas


Filtrado La COLUMNA es la unidad básica de
y tablas en lugar de
Contextos de
medida. Hay que pensar en columnas
celdas y filas
evaluación
Medidas

Funciones Medidas Vs Se ven similares desde DAX pero son


escalares Columnas cosas muy distintas
Columnas
calculadas Funcionalidad calculadas

Curva de aprendizaje DAX DAX implica No estamos acostumbrados a aplicar


manejar filtros filtros en fórmulas y se usan distintas
funciones

La misma fórmula aplicada en distintos


DAX no es lineal contextos varía su resultado
Una diferencia importante entre DAX y Excel

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

DAX opera por columnas. Primero aplica los filtros, y


luego evalúa la expresión
DAX
Consideraciones técnicas
• La lógica de negocios en el modelo de datos

• Columnas calculadas
Elementos DAX
• Medidas

• Tablas calculadas
Modelado de Datos
Elementos de cálculo DAX

Medidas Implícitas Columnas Calculadas


Son las que se auto calculan con los Sirven para crear nuevos
campos naturales de las tablas campos a nivel fila de la tabla

Medidas Explícitas Tablas Calculadas


Sirven para diseñar “patrones de Sirven para construir tablas
cálculo” para consultas posteriores auxiliares desde otras tablas según
donde se requiera la el cálculo criterios requeridos de selección y
agregado de los datos filtro
Agregándole valor a los datos: Lógica de negocios
DAX es lo que nos permite agregar una capa de
Los Datos no tienen significado de por sí.
significado a los datos.
Para convertir a los datos en información,
Permite encapsular la complejidad para que sea
nuestro trabajo es agregarles significado
accesible al usuario final
Cómo agregamos significado

Columnas calculadas Medidas


• Expanden horizontalmente la tabla. Esa columna se • Sumarizan datos verticalmente, condensando las
trata de igual manera que cualquier otra columna de columnas en un solo valor
la tabla
• Ideales para información analítica y sintetica
• Ideales para información detallada y operacional • Alcance amplio: todos los registros o una porción de
• Su alcance es pequeño (la fila en la que están ellos
evaluando) • Bien elegidas, dan una visión general de la
• No dan una visión general de la organización organización. Son mejores para expresar KPIs y KRIs
Elementos DAX
Columnas Calculadas
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.

Una expresión que


Se computan al Se almacenan como un Están limitadas al
tiene como resultado
refrescar los datos dato más de la tabla contexto de una fila
una columna
Necesitamos determinar Cada vez que refrescamos los Una vez calculadas se pueden Una columna calculada
una expresión que generará datos todas las columnas tratar como cualquier otra desconoce de las otras filas
ese cálculo calculadas se recalcularán. columna de la tabla. de la tabla que no sean la
Permanecen en memoria suya. Solo puede usar
Consumen memoria y tiempo aunque no las usemos. campos de su fila
de CPU Estarán disponibles para operar
junto con otras tablas
Elementos DAX
Columnas Calculadas

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.

Importe Venta = [Precio] * [Cantidad] * (1 – [Descuento])

Precio Cantidad Descuento Importe venta


$50 3 10% $135
$220 2 0% $440
$400 4 25% $1200
$170 1 50% $95

Descargar el pbix de Contoso ([Link]


Elementos DAX
Columnas Calculadas - Ejemplo
Queremos que en la tabla Sales quede explícito en una columna el porcentaje de descuento
que hicimos en esa venta sobre el total

Descuento % = [DiscountAmount] / [SalesAmount]

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

Nombre Producto = RELATED('Product'[ProductName])

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)

RELATED se utiliza en las relaciones “1 to *” cuando estamos en el lado ”*” de la función


(Ejemplo: traer para cada línea de un ticket de venta el producto asociado a esa línea, o el precio del mismo)

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

Para eso se usa el comando RELATEDTABLE


Supongamos que queremos traer a la tabla Products las ventas totales de tickets (tabla Sales)

Ventas Totales = SUMX ( RELATEDTABLE (Sales) ; Sales[SalesAmount] )

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

Una expresión que Se computan en el Se almacenan Están limitadas al


sumariza los datos momento temporalmente contexto de filtro
Agrega todos los datos en Se calculan dinámicamente con Se mantienen mientras se El “contexto de filtro” está
un solo valor las modificaciones que hace el necesiten y luego se descartan. formado por todos los
usuario. No son pre-calculados Utilizan más CPU pero menos filtros que han sido
RAM aplicados por el usuario
Elementos DAX
Las Medidas son el elemento central de DAX
El poder de DAX reside en su habilidad de manipular y usar estas medidas para mostrar de forma concisa lo que
los datos significan.

Las medidas no extienden las tablas horizontalmente.


Las consolidan verticalmente

Precio Cantidad Descuento Importe venta


$50 3 10% $135
$220 2 0% $440
$400 4 25% $1200
$170 1 50% $95
Venta Total = SUM ( Importe venta)

Venta Total $1870


Elementos DAX
Medidas Implícitas

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

Probar en el modelo DAX insertando una visualización “Tabla” y


poniendo el campo “Channel Name” y Sales Amount
Probar las distintas medidas implícitas
Elementos DAX
Medidas Implícitas: Últimas consideraciones

Son las que surgen de manera automática de arrastrar un atributo a un elemento agregador.

Algunas consideraciones sobre las medidas implícitas


 Los cálculos de agregación se generan automáticamente al agregar un campo al modelo.

 No es posible definirles un formato en el modelo sino en la visualización.

 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.

Permiten explotar al máximo la potencia analítica del sistema

6 funciones principales de agregación


- SUM Ventas Totales = SUM ( Sales[TotalCost] )
- AVERAGE Venta Promedio = AVERAGE ( Sales[TotalCost] )
- MEDIAN
- MAX Mayor Venta = MAX ( Sales[TotalCost] )

- MIN Menor Venta = MIN ( Sales[TotalCost] )


- COUNT / DISTINCTCOUNT Productos Distintos = DISTINCTCOUNT ( Sales[ProductKey] )
Cantidad de Ventas = COUNT ( Sales[SalesKey] )

Probar estas medidas en el modelo.


Son la versión explícita de las medida anteriores
Elementos DAX
Iteradores
Hemos dicho que el motor de DAX está optimizado para trabajar con columnas en lugar de filas.
Sin embargo en muchas situaciones eso no alcanza

Por fila Tienen peor Expresiones que


performance vinculan múltiples
columnas
Se procesan recorriendo los Justamente porque no tienen Permiten evaluar expresiones que
datos fila a fila en lugar de una forma columnar de trabajar vinculan diferentes columnas en
mirar solo una columna sino fila a fila. cada fila.

Sin embargo no es un problema Son la manera de no llenar el


salvo cuando comenzamos a modelo de múltiples columnas
anidarlos calculadas
Elementos DAX
Medidas Explícitas: Agregadores vs Iteradores

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

MAX MIN MAXX MINX CONCATENATEX


MEDIAN PRODUCT MEDIANX PRODUCTX
Elementos DAX
Medidas Explícitas: Iteradores

La sintaxis de una función de iteración siempre es:

Medida = FUNCIÓN DE ITERACIÓN ( Tabla ; Expresión )

Las funciones de iteración:


SUMX, COUNTX, MINX, MAXX, Cualquier expresión (función, medida, u
AVERAGEX, CONCATENATEX, etc operación con columnas del modelo) que se
evaluará fila a fila para cada ítem de la tabla
La tabla que se le recorrerá fila a fila.
Puede ser una tabla existente del modelo, o
una tabla creada mediante DAX.
Además, aplicándole filtros se puede usar
una parte de esa tabla (como se verá luego)
Elementos DAX
Medidas Explícitas: Iteradores

ITERADOR = FOR/NEXT + AGREGADOR


Supongamos que queremos calcular el Total de Ventas (Antes de Descuento), lo primero que
pensamos es en pxq.
Teniendo en cuenta esto, podríamos pensar que deberíamos multiplicar la columna de valores por la columna de
precios. Total de Ventas (Antes de Descuento) = SUM(Sales[SalesQuantity]) * SUM('Product'[UnitPrice])
El resultado no sería correcto porque multiplica el total de la columna Precio por el total de la columna Unidades.

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

Funciones para contar Números Textos Fechas Boolean Vacíos Tipo

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”

2. Cambiamos el nombre de la tabla por “Medidas” o alguno que nos sirva,


e ingresamos algún valor en la primera columna

3. Aplicamos los cambios

4. Movemos alguna medida a esta nueva tabla


5. Borramos la columna en blanco
Elementos DAX
Tablas Calculadas

Las Tablas Calculadas permiten la construcción de tablas a partir de la selección y transformación de


otras tablas base, o bien de alguna fórmula matemática

Algunas consideraciones sobre las tablas calculadas Funciones DAX útiles:


 Posee muchas funciones similares a las disponibles en Query • DISTINCT() • INTERSECT
Editor (Opciones Merge) • FILTER() • CALENDAR()
• VALUES() • CALENDARAUTO()
 Especialmente útiles cuando necesitamos una tabla intermedia • CROSSJOIN() • SUMMARIZE()
(tablas pivote) • NATURALINNERJOIN()
 Muchas veces se usan para facilitar prefiltros en la construcción • NATURALLEFTOUTERJOIN()
de Medidas Calculadas
 La ejecución es inmediata y por lo tanto se almacena en
memoria igual que las Columnas Calculadas
Elementos DAX
Tablas Calculadas: Algunas formas de crearlas

Tabla de días comercio abierto= DISTINCT (Sales[DateKey])

Historial de Ventas = Sales

Ventas 2011 = FILTER (Sales; YEAR(Sales[DateKey]) = 2011)

Ventas 2012 = FILTER (Sales; YEAR(Sales[DateKey]) = 2012)


Otras funciones DAX A estas tablas
para generar tablas: Ventas Hasta 2012 = UNION('Ventas 2011';'Ventas 2012') inclusive se la puede
• CROSSJOIN Ventas Producto y Sucursal = SUMMARIZE(Sales; relacionar en el
• NATURALINNERJOIN 'Product'[ProductName]; modelo, y agregar
• NATURALLEFTOUTERJOIN Stores[StoreName]; columnas con
• INTERSECT "SumaVentas";
RELATED
SUM(Sales[SalesAmount]))

Top 10 productos = TOPN (10;'Ventas Producto y Sucursal’;


'Ventas Producto y Sucursal'[SumaVentas];
DESC)
Elementos DAX
Tablas Calculadas: Tabla de Fechas

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

• Ej: Calendar = CALENDAR(DATE(2020,1,1),DATE(2020,12,31))

Contar con una Tabla Calendario en el modelo es indispensable porque permite:


• Usar el tiempo como una dimensión más para cálculo y filtrado
• Manejar jerarquías de tiempo
• Conectarse a otros datasets de fuentes externas que se relacionan por esta dimensión
Elementos DAX
Tablas Calculadas: Tabla de Fechas – Otras opciones
1) Tabla relativa al día de hoy:
Calendario = CALENDAR (TODAY()-365;TODAY()+365)
2) Tabla relativa a otra tabla:
Calendario = CALENDAR (FIRSTDATE(Sales[DateKey]);
LASTDATE(Sales[DateKey]) )
3) Tabla relativa a dos tablas con fecha:
Calendario = CALENDAR (MIN (
FIRSTDATE(Sales[DateKey]); FIRSTDATE(Promotion[EndDate]) );
MAX (
LASTDATE(Sales[DateKey]); LASTDATE(Promotion[EndDate]))
)
4) Tabla con otras columnas agregadas desde su creación
Calendario = ADDCOLUMNS (CALENDAR (FIRSTDATE(Sales[DateKey]);LASTDATE(Sales[DateKey]));
"Dia";DAY([Date]);
"Mes";MONTH([Date]);
Iterador "Anio";YEAR([Date])
)

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

En los campos tipo Fecha PBI crea automáticamente una jerarquía


Esta jerarquía luego se puede usar en visualizaciones para hacer “drill-down” y “drill-up”

Las jerarquías también pueden ser creadas por el usuario arrastrando un campo arriba de otro
• Filtros implícitos y explícitos

• La función CALCULATE para modificar filtros


Filtros en DAX
• Filtros avanzados con la función FILTER

• Deshacer filtros con la función ALL


Filtros en DAX
Para qué necesitamos aplicar filtros
Los filtros son la clave de cualquier reporte analítico, y junto con la “agregación” son las dos funciones para
las que DAX está optimizado.

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

Comparaciones por Detalle por jerarquías Comparaciones por Comparaciones por


dimensiones (drill down) períodos porcentajes
Queremos saber cómo Las ventas en España estuvieron Si decimos que estuvieron bien Podemos saber qué porción
comparan las ventas entre muy bien este año. ¿Podemos este año, ¿podemos comparar de las ventas totales
España y UK, o como los entender mejor por qué viendo con otros años? representó España. O bien
productos A comparan con el detalle por región? el producto A
los B
Filtros implícitos vs. explícitos

Filtros implícitos Filtros explícitos La clave para entender


el tema
Se aplican ANTES de que se haya evaluado Están codificados dentro de una Los filtros explícitos tienen
la expresión DAX expresión DAX. preponderancia por sobre los
implícitos. Los anulan.
A menudo son el resultado de Suelen utilizarse en funciones
interacciones del usuario como CALCULATE Si un usuario ha filtrado para ver
solo los Productos A, una
Además son implícitamente aplicados por expresión DAX puede anular ese
las visualizaciones filtro y mostrar otro producto
La función CALCULATE
Modificando el contexto de cálculo de manera ágil

La función CALCULATE es una de las más comunes de DAX.


Nos permite cambiar el contexto de evaluación de nuestras medidas, y obviar los filtros que
haya aplicado el usuario.

La sintaxis de la función CALCULATE siempre es:

Medida = CALCULATE ( Expresión; Filtro1; Filtro2;… Filtro n)

La Expresión puede ser una Los filtros que apliquemos anularán


medida previamente definida o cualquier otro filtro que se haya puesto en
cualquier expresión DAX que se ESA columna. Dejarán los otros sin afectar
defina en este mismo paso
Entendiendo el funcionamiento de los filtros
Continuaremos trabajando con el archivo de Contoso
Agreguemos al canvas una Tabla con el campo ProductCategory y un Slicer con el mismo campo.

En la tabla, además, agreguemos la medida implícita “Unit Price” pero pongamos el valor promedio (no la suma)

Cada una de las filas en esta


visualización actúa como un filtro
implícito.
Fuerza el cálculo de la medida
para esa categoría

A continuación vamos a crear una medida explícita nueva y colocarla en la visualización:

EstaFiltradaLaCategoria = ISFILTERED( ProductCategory[ProductCategory] )

Esto permite ver cómo las visualizaciones aplican filtros implícitos


Entendiendo el funcionamiento de los filtros
Supongamos ahora que queremos calcular el valor promedio de los productos de Audio, de forma explícita,
independientemente de los demás filtros de Categoría aplicados; y agregarla a la tabla

PrecioPromedioAudio = CALCULATE(AVERAGE('Sales'[UnitPrice]); ProductCategory[ProductCategory]="Audio")

Observar como el filtro explícito es el que


gobierna la columna ProductCategory

El comportamiento es: cuando aplicamos


un filtro explícito a una columna, al
momento de calcular la expresión se
quitan los filtros implícitos que puedan
estar afectando a esa columna

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

Medida = CALCULATE ( Expresión; Filtro1; Filtro2;… Filtro n)

• Los filtros no pueden contener condiciones aplicadas a una medida. Tienen que ser una columna

Medida = CALCULATE(Expresión ; [Medida]>$1000 )

• Los filtros no pueden contener una operación que involucre a más de una columna

• El resultado de estos filtros no puede devolver una tabla


La función FILTER
Cuándo la usaremos
La función CALCULATE está diseñada para ser rápida.
La función FILTER está diseñada para ser flexible.

Al evaluar múltiples Al comparar con una función Necesitamos devolver


columnas agregada o una medida una tabla
Cuando necesitamos filtrar sobre Supongamos que queremos filtrar A veces necesitamos generar una
expresiones que involucran múltiples productos que tienen un precio sobre tabla de filas filtradas, que es
columnas o son cálculos complejos la media de todos los productos esencialmente lo que hace la
función FILTER
CALCULATE solo deja comparar cada CALCULATE no nos deja hacerlo
columna con un valor fijo porque ese promedio debe ser Hay funciones que necesitan como
dinámicamente calculado mirando parámetro una tabla y la podemos
todos los datos generar con FILTER
La función FILTER
Si queremos aplicar filtros en múltiples columnas, FILTER es la opción más lógica
La sintaxis de la función FILTER es:
Medida = CALCULATE ( Expresión; FILTER (Tabla; Condición) )

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)

No se puede hacer operaciones con columnas


En cambio con FILTER podemos intentar… (agregarlo a la tabla luego de hacerlo)

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

Productos Contoso y Litware = FILTER('Product’;


OR('Product'[BrandName]="Contoso";'Product'[BrandName]="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

Hagámoslo mediante CALCULATE

Ventas Litware Economy C = CALCULATE ([Cantidad de Ventas];


'Product'[BrandName] = "Litware" ;
'Product'[ClassName] = "Economy" )

Y también hagámoslo mediante FILTER

Ventas Litware Economy F = CALCULATE ([Cantidad de Ventas];


FILTER( 'Product' ; 'Product'[BrandName] = "Litware") ;
FILTER( 'Product'; 'Product'[ClassName] = "Economy" )
)
Algunos cálculos se pueden hacer con o sin filter
Sin embargo hay diferencias a tener en cuenta (2)
A continuación, armemos esta tabla con un Slicer

Probemos de marcar y desmarcar distintas opciones en el Slicer

¿Qué está pasando? ¿Cuál es la explicación?


A diferencia de FILTER, CALCULATE ignora los filtros que estén seleccionados sobre las medidas calculadas.
Filter genera otra tabla y a esa tabla le aplican los demás filtros que se estén aplicando
La función ALL
Desaplicando filtros
La función ALL permite ignorar y remover cualquier filtro de la tabla de datos
Puede aplicarse a una columna específica o a una tabla entera
Esta función es propia de DAX y no existe, por ejemplo, en SQL

La sintaxis de la función ALL para quitar todos los filtros de una tabla es:

Medida = CALCULATE ( Expresión; ALL (Tabla) )

La sintaxis de la función ALL para quitar los filtros aplicados a una columna es:

Medida = CALCULATE ( Expresión; ALL (Columna) )


La función ALL
Desaplicando filtros
En el archivo de Contoso podríamos querer ver en una Tabla de Marcas de producto “el porcentaje que las ventas
de cada marca representan sobre el total”. Para hacer eso, la fórmula a aplicar sería

Porcentaje por marca = Todas las ventas de esta marca / Todas las ventas de todas las marcas

Creamos las medidas necesarias:

Ventas Totales = SUM(Sales[SalesAmount])

Ventas Todas las Marcas = CALCULATE (SUM(Sales[SalesAmount]); ALL('Product'[BrandName]))

% por Marca = [Ventas Totales]/[Ventas Todas las Marcas]


La función ALL
Desaplicando filtros

A continuación insertemos una Tabla con la siguiente configuración

Insertemos un Slicer de BrandName Modifiquemos el filtro y veamos cómo se


comportan los campos “%GT Ventas Totales” y
“% por Marca”
La función ALL
Desaplicando filtros

A continuación insertemos un nuevo slicer con el campo ClassName

Notar que al activar este filtro, los


porcentajes de la columna % por Marca ya
no se calculan sobre el total de las ventas

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

• Ventas todos los productos = CALCULATE (SUM(Sales[SalesAmount]); ALL('Product’))

• % por Producto = [Ventas Totales]/[Ventas todos los productos]

Agreguemos estos dos campos a la tabla y veamos cómo se comportan al modificar los filtros
• Contexto de Filtro

Contextos de • Contexto de Fila


Evaluación DAX
• Anidación (Nesting)
Contexto de evaluación

El contexto de evaluación define qué filas


pueden verse cuando se evalúa una expresión
Contextos de evaluación

Contexto de Filtro Contexto de Fila


• Es una combinación de los filtros implícitos de las • Está limitado a la fila actual sobre la que estamos
visualizaciones y los que genere el usuario con su iterando
interacción
• Se aplica al crear columnas calculadas
• Puede ser modificado con CALCULATE. El trabajo de
esta función es manipular el contexto de filtro. • También se aplica en los iteradores. Cuando el iterador
está recorriendo fila a fila, crea un contexto de fila
para cada una de ellas

• 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

= RANKX( ← Función de iteración, por lo que creará un contexto de fila. Crea un


ranking de acuerdo a un determinado criterio
ALL (Products); ← La tabla a iterar es toda la tabla de productos (quita los filtros que estén
aplicados)

SUMX ( ← Para cada producto recorreremos las ventas que tuvo y las iremos
acumulando con el iterador SUMX

RELATEDTABLE(Sales); ← El criterio que queremos aplicar está en una tabla distinta a la de


productos. Al agruparlo con un nuevo iterador (SUMX), se crea un nuevo
contexto de fila
‘Sales’[SalesAmount]

) ← Finalmente rankearemos esos valores acumulados

)
• Tipos de funciones

Funciones de • Completando la Tabla de Fechas


inteligencia temporal
• Funciones de agregación
Tipos de funciones de Time Intelligence
Podemos clasificar las funciones de inteligencia de tiempo en tres grupos:

Funciones de una sola Funciones de tabla de fechas Funciones de


fecha agregación de fechas
Son funciones que devuelven solo una Son funciones que devuelven una Estas funciones reciben una
fecha. tabla como resultado expresión y una columna de
fechas y devuelven un valor único
Por ejemplo FIRSTDATE, que toma una Por ejemplo DATESYTD, recibe una de esa expresión
columna de fechas y devuelve la primera columna de fecha y devuelve una
en el contexto en que se esté evaluando columna filtrada desde el comienzo de Ejemplo: TOTALYTD. Toma una
año hasta el día actual expresión y la evalúa en un
contexto YTD
Características de las funciones de Time Intelligence

 Operan sobre la tabla marcada como “Date


Table” que provee el “rango de datos”
Funciones de
 La fecha máxima y mínima de la tabla de fechas
inteligencia proveen los límites de cálculo
temporal
 Si no existe la fecha en la tabla sobre la que
queremos operar, devolverá blank
Completando la Tabla de Fechas
Incorporar a la calendar table del modelo Contoso

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

Tabla Calendario = ADDCOLUMNS(


CALENDAR(
MIN(FIRSTDATE(Sales[DateKey]);FIRSTDATE(Promotion[StartDate]));
MAX(LASTDATE(Sales[DateKey]);LASTDATE(Promotion[StartDate]))
);
"FechaNumero"; FORMAT ( [Date]; "YYYYMMDD" );
"Año";YEAR([Date]);
"Mes nro";MONTH([Date]);
"Día nro";DAY([Date]);
"Mes nombre";FORMAT ([Date]; "MMMM");
"MesNombreAño"; FORMAT([Date]; "MMMM")&"-"&FORMAT([Date]; "YYYY");
"Dia Semana Nro"; WEEKDAY ([Date]; 1);
"Dia Semana Nombre";FORMAT ([Date]; "DDDD");
"DiaSemanaCorto"; FORMAT ( [Date]; "ddd" );
"Año-mes";FORMAT([Date];"YYYY")&"-"&FORMAT([Date];"MM");
"Trimestre";FORMAT([Date];"Q");
"Año-Trim"; FORMAT ([Date];"YYYY") & "-T" & FORMAT ([Date];"Q")
)
Completando la Tabla de Fechas
Incorporar a la calendar table del modelo Contoso (2)
Algunas otras columnas serán necesarias también para completar los cálculos.
Estas también son funciones que podemos agregar, ya sea en el ADDCOLUMNS previo, o a mano luego de crear
la tabla

Tabla Calendario = ADDCOLUMNS(


CALENDAR(
MIN(FIRSTDATE(Sales[DateKey]);FIRSTDATE(Promotion[StartDate]));
MAX(LASTDATE(Sales[DateKey]);LASTDATE(Promotion[StartDate]))
);
.
.
.
...;
"UltimoDiaDelMes";EOMONTH([Date];0);
"ÚltimoDíaDelMesSiguiente";EOMONTH([Date];1);
"ÚltimoDíaDelMesAnterior";EOMONTH([Date];-1);
"PrimerDiaDelMes";DATE(YEAR([Date]);MONTH([Date]);1);
"PrimerDiaDelMesSiguiente";EOMONTH([Date];0)+1;
"PrimerDiaDelMesAnterior";IF(MONTH([Date])=1;
DATE(YEAR([Date])-1;12;1);
DATE(YEAR([Date]);MONTH([Date])-1;1))
)
Comparaciones de períodos acumulados
Year To Date, SamePeriodLastYear, DateAdd

TOTALYTD ( Expresión escalar; Columna de Fechas; Devuelve un valor, acumulativo


[Filtro]; [Fecha de fin de año]) desde el primer día del año

Ventas YTD = TOTALYTD([Ventas Totales];'Nuevo Calendario'[Date])

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]))

Modifica el contexto para


DATEADD (Columna de fechas; Cantidad de Intervalos, Unidad del intervalo)
evaluar en un período distinto

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

Modifica el contexto para


PREVIOUSMONTH (Columna de fechas)
evaluar el mes previo

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

Ventas MAT Promedio 12 meses =


VAR Meses = 12 RETURN
CALCULATE([Ventas Totales] / Meses; Ventas promedio MAT
DATESINPERIOD('Nuevo Calendario'[Date];
LASTDATE('Nuevo Calendario'[Date];- Meses;MONTH))
Algunos hints de DAX: Con X y sin X

• 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

• La función CALCULATE se utiliza para evaluar cualquier expresión modificando el


contexto de filtro a los que se hayan especificado como argumento
• La función ALL aplicada a una columna levanta los filtros que estén operando sobre la
misma. Cuando está aplicada a una tabla levanta todos los filtros aplicados a esa tabla
Algunos hints de DAX: FECHAS

• 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

Además las variables previas se pueden usar en otras expresiones DAX


Otras funciones útiles de DAX
• VALUES: Lleva como parámetro una tabla o una columna. Devuelve una columna con
todos los valores únicos de la columna seleccionada.
Muy útil para capturar el valor de un filtro (ej: slicer) y usarlo dentro de una medida
(ej: para escenarios)

• HASONEVALUE: Muy útil en conjunto con VALUES, se usa para determinar si el


resultado de un filtro es uno o más valores. Esta función devuelve TRUE si el filtro
aplicado a esa columna resulta en un solo valor y FALSE cuando resulta en más de
uno. Si es TRUE podemos usar lo que devuelve VALUE en una formula (porque es un
escalar)

• ISFILTERED / ISCROSSFILTERED: Se usan para saber si se está aplicando actualmente


algún filtro que afecte la columna en cuestión. ISFILTERED devuelve TRUE cuando la
columna parámetro tiene filtros. ISCROSSFILTERED devuelve TRUE cuando alguna
columna relacionada está siendo filtrada

También podría gustarte