Respuesta a: Aprendizajes de la sección “Create measures by using DAX” del módulo “Model the data”

Andrea
Participante

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