Foros › Power BI en general › Aprendizajes de la sección “Create measures by using DAX” del módulo “Model the data”
HOla,
les copio mi resumen,.
Un saludo
Crear medidas de agregación única
Uso de SUM and IF
Uso de funciones estadísticas Básicas:
Average
Count
Max and Min
Es mejor trabajar con medida que con las columnas (seleccionando el tipo de medida que se necesita, i.e. Sum, Average, etc), ya que así se obtiene directamente la medida que se necesita.
Identificar medidas implícitas y reemplazar por medidas explícitas
Ocultar las columnas que pueden dar lugar a confusión por parte del usuario y dejar las medidas calculadas.
Reemplazar las columnas numéricas con medidas: iteradores X
https://www.datdata.com/products/certificacion-oficial-por-microsoft-de-power-bi/categories/3567095/posts/11910394
Iteradores X: dan row context a las medidas para evitar usar columnas para hacer operaciones por columnas. Ejemplos: SUMX, AVERAGEX,
Por ejemplo, para SUM, se puede calcular la fila y luego sumarla (con SUM) o hacer todo de una vez con SUMX
Para una función ejemplo SUMX(Tabla, Expresion), la expresión usada puede ser, por ejemplo una medida, o una columna, es decir:
SUMX(Tabla Ventas, Tabla Ventas[columna]) =SUMX(Tabla Ventas, Medida)
Los pasos para definir la función de este ejemplo serían:
Se define una tabla con los datos
Se ejecuta la expresión para cada fila de la tabla
Se suman (en el caso de la función SUMX) los resultados de las operaciones para cada fila de la tabla indicada. La operación que se realice depende de la función que se utilice, AVERAGEX, SUMX, MINX, MAX, COUNTX, etc.
Ejemplo:
Si quiéramos calcular una medida con información contenida en distintas tablas se debe usar el RELATED. Ejemplo, si se quiere calcular el coste de venta de cada venta realizada, se debe hacer :
Costo de venta =SUMX(Sales, Sales[Quantity]*RELATED(Products[Unitary Cost])
Usar calculate para manipular filtros
https://www.datdata.com/products/certificacion-oficial-por-microsoft-de-power-bi/categories/3567095/posts/11910392
Para calcular la venta total de todos los vendedores, sin filtros, se debe hacer:
Filtro ALL
Venta total =CALCULATE([Venta (Sum)], ALL(Seller[Seller Name])
Aquí hay que tener en cuenta que con ALL se quitan todos los filtros que hay en el reporte. Otra cuestión es que estamos usando Venta(Sum) que es una medida que suma todas las ventas. Lo correcto es usar medidas dentro de medidas, aunque se podría haber calculado a través de SUM(Sales[Ventas]) que es la suma de la columna que tiene todas la ventas.
Filtro ALLSELECTED
Si usáramos ALLSELECTED eliminaríamos solo los filtros de la visualización en donde insertemos la medida
Venta total =CALCULATE([Venta (Sum)], ALLSELECTED(Seller[Seller Name]), o podría haberse puesto:
Venta total = CALCULATE([Venta (Sum)], ALLSELECTED(Seller[Seller Name], Seller[Region]))
Capacitación express CALCULATE
https://www.datdata.com/products/certificacion-oficial-por-microsoft-de-power-bi/categories/3567095/posts/11910396
Contexto de Evaluación:
Todas las operaciones de DAX son evaluadas en un contexto. Una misma operación de DAX puede tener resultados diferentes según el contexto en el que se evalúe:
En un caso el contexto es el general y en el otro es el regional.
El contexto puede ser:
ROW CONTEXT: hace referencia a otros valores dentro de la misma fila
FILTER CONTEXT: hace referencia a los valores dentro en una misma columna o tabla:
CALCULATE(): Qué hace CALCULATE()?
CALCULATE es la única función que puede modificar el FILTER CONTEXT.
Función: CALCULATE(<Expresión>, Filtro1, Filtro2, …). En CALCULATE() primero se consideran los filtros y luego la expresión que se ejecuta después de los filtros para obtener el resultado.
Ejemplo: SUM VS CALCULATE1()
Ejemplo 2: quitamos todos los filtros de año en CALCULATE2()
La función se traduce como una tabla donde se le han aplicado filtros para obtener el CALCULATE1
Funciones comunes con CALCULATE()
Algunas funciones que devuelven una tabla son:
FILTER(): Devuelve una tabla filtrada
ALL(): quita todos los FILTROS y devuelve una tabla
ALLSELECTED: Quita todos los filtros de una visualización y devuelve una tabla
ALLEXCEPT(): quita todos los filtros except los que se pongan en la función y devuelve una tabla
Funciones de TIME INTELLIGENCE
Funciones TIME INTELLIGENCE con DAX
https://www.datdata.com/products/certificacion-oficial-por-microsoft-de-power-bi/categories/3567095/posts/11921599
Cálculo de ventas totales:
Venta = SUM(Sales[Venta])
Cálculo de ventas totales en el mismo período del año anterior:
Ventas mismo Mes año anterior = CALCULATE([Venta], SAMEPERIODLASTYEAR(Calendario[Fecha]))
Para calcular las ventas acumuladas:
Ventas acumuladas en el año = CALCULATE([Venta], DATESYTD(Calendario[Fecha]))
En una tabla quedaría así:
Capacitación express en TIME INTELLIGENCE
https://www.datdata.com/products/certificacion-oficial-por-microsoft-de-power-bi/categories/3567095/posts/11921597
Cuándo se utilizan?
Se utilizan por ejemplo para
a. Comparar venta con periodos previous
b. Obtener acumulados mensuales, trimestrales, anuales de ventas
c. Obtener el promedio de ventas de los últimos 30 días-
No se debe confundir con las funciones de FECHA Y HORA
RequisitosLa columna fechas debe tener todas las fechas del rango de fechas considerado
La fecha debe estar marcada del tipo FECHA o FECHA/HORA
PARA CUMPLIR SIEMPRE ESTOS REQUISITOS SE USA LA TABLA CALENDARIO
Pasos requeridos por estas funciones
a- Detecta el contexto de filtro actual para determinar el periodo de fechas en el contexto
b- Elimina el contexto del filtro de la columna de fechas para tener todas las fechas disponibles
c- Se desplaza en el tiempo para encontrar en nuevo periodo (especificado en la función)
d- Aplica el filtro para obtener el periodo deseado
Grupos de funciones
Que devuelven una fecha específica
FIRSTDATE()
STARTOFMONTH()
ENDOFMONTH()
STARTOFQUARTER()
ENDOFQUARTER()
Que devuelven una tabla con fechas (MÁS USADAS)
DATEADD()
DATESMTD()
DATESQTD()
DATESYTD()
DATESINPERIOD()
Que evalúan una expresión:
TOTALMTD()
TOTALYTD()
OPENINGBALANCEMONTH()
CLOSINGBALANCEQUARTER()
Ojo, Cuidado con el grupo que devuelve una tabla y el que evalúa una expresión
Combinando TIME INTELLIGENCE con CALCULATE()
Patrones comunes con CALCULATE()
Crear semi-additive measures
https://www.datdata.com/products/certificacion-oficial-por-microsoft-de-power-bi/categories/3567095/posts/11910391
Semi-additive measures son medidas que no pueden ser agregadas a través de todas las dimensiones FECHA/FECHA/HORA
Por ejemplo, para el inventario de cada día y el inventario al final de mes no se puede hacer una suma del inventario de todos los días del mes, por tanto se utiliza una función semiaditiva como sigue:
Inventario para cada día podría calcularse como : Inventario Total = SUM(Inventario[Inventario])
Sin embargo, el inventario del mes se debe corresponder con el inventario del último día del mes:
Inventario mensual =
CALCULATE([Inventario Total], LASTDATE(Calendario[Fecha]))
Si nos diera a en blanco el último día del mes (en caso de que la empresa no trabaje, por ejemplo), deberíamos cambiar la medida a la siguiente
expresión, la cuál sería válida para mes, quarter y año
Inventario mensual =
CALCULATE([Inventario Total], LASTNONBLANK(Calendario[Fecha], [Inventario Total])