Casos de uso y modelo de datos con DAX

1

¿Cuándo utilizar DAX en Power BI?

2

Modelo de datos del proyecto de ventas de vehículos

3

¿Cómo afecta la dirección de filtro en Power BI?

Quiz: Casos de uso y modelo de datos con DAX

Creación de tablas y columnas con DAX

4

Columna calculada

5

Tablas calculadas

Quiz: Creación de tablas y columnas con DAX

Medidas

6

¿Cuándo crear una medida con DAX?

7

¿Cuáles son las principales funciones de agregación de DAX?

8

Manipulación de texto con DAX

9

Funciones lógicas y condicionales: IF, AND, OR

10

Funciones lógicas y condicionales anidadas: IF, SWITCH

11

Funciones lógicas y condicionales: HASONEVALUE

12

Funciones lógicas y condicionales: SELECTEDVALUE

13

Filtrado de datos con FILTER y SEARCH

Quiz: Medidas

CALCULATE

14

Uso de CALCULATE en Power BI

15

CALCULATE con ALL y ALLEXCEPT

Quiz: CALCULATE

Manejo de Iteradores y contextos

16

Iteradores X: cálculos por fila

17

Clasificación y ordenamiento de datos con RANKX y TOP

18

Evaluación de contextos con CALCULATE

Quiz: Manejo de Iteradores y contextos

Funciones de inteligencia de tiempo

19

Análisis de fechas y tiempo con DAX

20

Análisis de crecimiento acumulado en el tiempo con DAX

Quiz: Funciones de inteligencia de tiempo

Optimización de modelos y escritura de código DAX

21

Uso de variables para optimizar fórmulas en DAX

22

Mejorar legibilidad de código con DAX Formatter

23

Evaluación de modelo de datos con DAX Studio

24

Mantenimiento de modelos de datos con Tabular Editor

25

¿Cómo escribir código DAX con ChatGPT?

26

AI Visuals para interpretar el modelo de datos

Integración de medidas en reporte de Power BI

27

Reporte con medidas de seguimiento comercial en Power BI

28

Integración de visualizaciones de productos de mayor venta y ganancia

You don't have access to this class

Keep learning! Join and start boosting your career

Aprovecha el precio especial y haz tu profesión a prueba de IA

Antes: $249

Currency
$209
Suscríbete

Termina en:

1 Días
23 Hrs
9 Min
18 Seg

Evaluación de contextos con CALCULATE

18/28
Resources

How can we dive deeper into the Calculate feature of Power BI?

Calculate is a Power BI feature that allows us to perform dynamic and complex calculations using context evaluation. Understanding its use is critical to solving business questions that require detailed analysis. How do we start? First, we generate a measure called 'Total Ripple Sale'. The basic formula would be:

Total Onda Sales = CALCULATE([Total Sales], Brand = "Onda").

This measure shows us the total sales of the Onda brand. By applying this to a table, we can see how the calculation behaves for different brand categories. What happens if we change the context with a table that includes varied brands? When using Calculate, the function iterates and generates table values adjusted to the context of each brand.

How do we create complex measures with multiple conditions?

By advancing our understanding, we can develop measures that include multiple marks. For example, we create 'Total Toyota Wave Sales', which sums the sales of both brands:

Total Sales Wave Toyota = CALCULATE([Total Sales], IN(Brand, {"Toyota", "Wave"}))

This measure is taken to a table and filtered only by the embedded variables, showing that the Calculate function modifies contexts according to the logic applied.

How do we use context evaluation for complex scenarios?

Context evaluation becomes essential when dealing with complex business questions and scenarios. Suppose we want to identify salespeople whose sales exceed 30 million. We can create a measure as follows:

Sales Salesperson > 30 Million = CALCULATE([Total Sales], Salespersons, [Total Sales] > 30,000,000).

Then, by sorting the salesmen according to their sales, we discover that only a few exceed that figure. The utility of this measure is clear: with a single expression and its associated filters, we narrowed the data set to focus on our specific interest.

How does contextual calculation benefit us?

Calculate's knowledge and evaluation of contexts provides a remarkable competitive advantage. It becomes a powerful tool to handle various business demands by allowing us to generate sophisticated tables and accurate evaluations. By acquiring advanced DAX skills, such as iterators and rankings, we can address challenges that require narrowing information across specific calculation contexts.

In short, Power BI and Calculate skills, combined with context evaluation, enhance our ability to address business complexities with customized and accurate solutions. Go ahead, practice, challenge yourself to create innovative solutions and share your achievements with the community to continue learning and growing in the world of data analytics.

Contributions 49

Questions 3

Sort by:

Want to see more contributions, questions and answers from the community?

Ya entendí porque no me funcionaba la misma medida que se hizo para vendedor >30 mill, cuando trataba de invocar la medida total ventas ![](https://static.platzi.com/media/user_upload/image-012b0497-53a0-4033-93f3-07712c600620.jpg) y es porque la tabla Fac\_Ventas no tiene el campo de marca de vehiculos, mientras que si contiene el campo vendedor por eso si se intenta invocar esta medida no la reconoce y por eso hay que hacer el sum nuevamente ![](https://static.platzi.com/media/user_upload/image-1dcd3304-7973-4abc-9e7b-cf097e9b94a1.jpg)
Trate la de los compañeros pero no me dio, porque al final el total me seguía saliendo con 359,547,368.20, que no es el total de las marcas de >50MM, por lo cual procedí a hacer 2 cálculos adicionales, uno para un total que no se viera afectado por **marca\_vehículo** y otro para el contexto de las **Marcas>50M,** les comparto lo que me funció `Total de Ventas 2 = CALCULATE(SUM(Fact_Ventas[Precio Venta sin IGV]),ALLEXCEPT(dim_vehiculo,dim_vehiculo[marca_vehiculo]))` `Marcas>50M = CALCULATE([Total de Ventas 2],FILTER(dim_vehiculo,[Total de Ventas 2]>50000000))`

De algo me sirvió el curso de fundamentos de base de datos.

Brands_Over_50M = 
CALCULATE (
    [Total de Ventas],
    FILTER (
        VALUES(dim_vehiculo[marca_vehiculo]),
        CALCULATE (
            [Total de Ventas],
            ALL(dim_vehiculo),
            dim_vehiculo[marca_vehiculo] = EARLIER(dim_vehiculo[marca_vehiculo])
        ) > 50000000
    )
)

Mi solución:

Venta marca vehiculo mayor > 50000000 = CALCULATE([Total de ventas], FILTER(dim_vehiculo,  sum(Fact_Ventas[Precio Venta sin IGV]) > 50000000))
Me paso lo mismo que el compañero Jefferson Osorio Lozano , me toco realizar 2 calculos donde tocaba sacar el total de ventas de la tabla dado que por los filtros no lo pude realizar de forma directa Paso 1 ![](https://static.platzi.com/media/user_upload/image-ad2ef721-76b1-4477-a7c9-743edab1b4c4.jpg) Paso 2 ![](https://static.platzi.com/media/user_upload/image-77133153-ea8a-4e3d-bb13-30fb9a3398bf.jpg)


 

  • 1: ¿Suzuki? Acá debería llamar la atención que aparezca Suzuki cuando se acaba de hacer un IN con TOYOTA y HONDA, además de que aparecen dos modelos y no los 6 modelos.
     
  • 2: Es porque toma el campo “marca_vehiculo” de la tabla “Marca Top” en lugar de la tabla “dim_vehiculo” es la se acaba de referenciar en la fórmula.
Una consulta, porque cuando se hace el calculo para TOYOTA y HONDA, el cuadro arroja los nombres TOYOTA y SUZUKI? Me refiero al ejemplo del minuto 3:07.
Yo lo hice de esta manera: ```txt VentasVeh > 50000000 = CALCULATE([Total de Ventas], FILTER(GROUPBY(dim_vehiculo,dim_vehiculo[marca_vehiculo]) ,[Total de Ventas]>50000000)) ```Aunque no entiendo por qué el filter cuando se realiza con la medida Total de Ventas que sean mayores a 50M genera una tabla vacía, al parecer la agregación no cumple con el criterio y pienso que pueda ser que se sume por id vehículo y no por Marca, tal vez por eso no alcanza los 50M.![](https://static.platzi.com/media/user_upload/image-d6cce8c9-d163-43d8-a582-4274b7b03d32.jpg)![]()
En el caso de la medida del total de vetas de Honda y Toyota, para que se aplique el filtro en el contexto se debe utilizar la función filter: TOTAL DE VENTA HONDA - TOYOTA = CALCULATE(\[Total de Ventas], FILTER(dim\_vehiculo,dim\_vehiculo\[marca\_vehiculo] IN {"TOYOTA","HONDA"}))
Yo por aqui nuevamente, me estoy dando cuenta que algo pasa con mi tabla dim\_vehiculo que no esta funcionando las medidas, se puede ver no trae ningun valor ![](https://static.platzi.com/media/user_upload/image-448c06ed-6aaf-45f5-bf14-42423e1ab0cb.jpg)
Va de nuevo por que el editor me fallo les dejo mi formula, ![](https://static.platzi.com/media/user_upload/image-6f163b0c-4a3d-43c9-a67b-2be7e16b8162.jpg) Con esto evitaran que el total salga incorrecto. ![](https://static.platzi.com/media/user_upload/image-eb4660f8-0fee-45f1-8ee7-034bbd5f895c.jpg)

Esta evaluacion de contextos va mas allá del uso de calculate, la idea es que tu puedas entender que filas, que datos son relevantes para tu caso, ademas, como una funcion puede relacionarse con los datos.
es una parte crucial en el analisis de los datos ya que te va a permitir responder preguntas claves de negocio.

He aqui mi respuesta. Fue un poco confuzo, pero ya estamos aqui. ```js Ventas mayores a 50M = CALCULATE( [Total de venta], FILTER(dim_vehiculo, SUM(Fact_Ventas[Total de venta]) >50000000)) ```![](C:\Users\Germa\OneDrive\Documentos\1_My_Documents\1_School_notes\001_Platzi\024_Análisis_y_Modelado_con_DAX_y_PowerBI)![](https://static.platzi.com/media/user_upload/Marcas%20mayores%20a%2050M-d929b947-aa17-4dfd-8528-f940a241d0eb.jpg)
He aqui mi respuesta. Fue un poco confuzo, pero ya estamos aqui. ```js Ventas mayores a 50M = CALCULATE( [Total de venta], FILTER(dim_vehiculo, SUM(Fact_Ventas[Total de venta]) >50000000)) ```Ventas mayores a 50M = CALCULATE(    \[Total de venta],    FILTER(dim\_vehiculo,     SUM(Fact\_Ventas\[Total de venta]) >50000000)) ![](https://static.platzi.com/media/user_upload/Marcas%20mayores%20a%2050M-d7b3c986-500d-4da2-856e-0edfa1effbad.jpg)
RETO PROFESOR: ![](https://static.platzi.com/media/user_upload/RETO-057e8dbd-d60b-40bb-81d2-8c636b4bc871.jpg)
En este mismo explico el funcionamiento del codigo DAX al final. El resultado: ![](https://static.platzi.com/media/user_upload/image-1f64e019-d67d-4138-aed8-b287a077cad7.jpg) El codigo: ```js Marcas Vehiculo con Ventas > 50M = VAR Tabla1 = ADDCOLUMNS( SUMMARIZE( dim_vehiculo,dim_vehiculo[marca_vehiculo]), "Monto Ventas", [Ventas totales] ) VAR Tabla50M = FILTER( Tabla1, [Ventas totales] > 50000000 ) VAR Resultado = CALCULATE( [Ventas totales], Tabla50M ) RETURN Resultado ```Primero creo la variable Tabla1 que es una tabla que agrega dos columnas de tablas diferentes: La Marca de Dim\_Vehiculos y el calculo de la ventas totales. Creo una segunda variable que es una tabla acotada de Tabla1 que filtra ventas mayores a 50M. Para finalizar creo una variable "Resultado" con un CALCULATE para asi visualizar el resultado.
```txt Total Marca Venta > 50MM = CALCULATE( [Total_Ventas], FILTER( VALUES(dim_vehiculo[marca_vehiculo]), CALCULATE([Total_Ventas]) > 50000000 ) ) ````VALUES(dim_vehiculo[Marca])` devuelve la lista de marcas únicas en el contexto actual. * `CALCULATE([Total_Ventas]) > 50000000` se asegura de que solo se consideren marcas con ventas totales superiores a 50MM. * `FILTER(...)` aplica el filtro antes de calcular el total. * !!! TKS Chat Gpt

Alguien me puede explicar la razón por la cual al usar la medida de Total de ventas en filter, no se obtiene el resultado si la suma de ventas sin IGV corresponde al Total de las ventas, es decir:

Total de ventas = sum(Fact_Ventas[Precio Venta sin IGV])

No se obtiene el resultado y manda error:
VentaMarca>50M = CALCULATE([Total de ventas],filter(dim_vehiculo,[Total de ventas])> 50000000)

Al sustituir la medida de Total de ventas por la suma de las ventas sin IGV se obtiene el resultado
VentaMarca>50M = CALCULATE([Total de ventas],filter(dim_vehiculo,sum(Fact_Ventas[Precio Venta sin IGV])> 50000000))

La evaluación de contextos con CALCULATE es fundamental en DAX, ya que permite modificar el contexto de los datos que se están evaluando. CALCULATE toma una expresión de medida como primer argumento y luego acepta pares de argumentos para aplicar filtros. Por ejemplo, puedes calcular las ventas de una marca específica o filtrar resultados basados en condiciones como un monto mínimo de ventas. En el transcript se menciona cómo se utiliza CALCULATE para generar medidas que responden a preguntas de negocio complejas, como sumar ventas de múltiples marcas o filtrar vendedores con ventas superiores a un umbral. Este enfoque es clave para crear reportes analíticos en Power BI.
Respuesta Venta marca vehiculo > 50000000 = CALCULATE(\[Total de ventas], FILTER(dim\_vehiculo, sum(Fact\_Ventas\[Precio Venta sin IGV]) > 50000000))
Se usa `SUMMARIZE` para crear una tabla con `marca_vehiculo` y la suma de ventas (`TotalVentas`). Luego, `FILTER` se aplica sobre esa tabla para conservar solo las marcas con más de 50,000,000 en ventas. VentaVehiculo>50000000 = VAR VentasPorMarca = SUMMARIZE(         dim\_vehiculo,        dim\_vehiculo\[marca\_vehiculo],        "TotalVentas", SUM(Fact\_Ventas\[Precio Venta sin IGV])    ) RETURN     CALCULATE(         \[Total de Ventas],        FILTER(VentasPorMarca, \[TotalVentas] > 50000000)    )
Marca Vehiculo con Venta > 50000000 = CALCULATE(\[Total de Ventas], FILTER(dim\_vehiculo, SUM(Fact\_Ventas\[Precio Venta sin IGV]) > 50000000)) ![](https://static.platzi.com/media/user_upload/image-13235884-4547-4114-9802-f3e98243bcfe.jpg)![](https://static.platzi.com/media/user_upload/image-0b0bf537-a53d-491f-a05d-8a6fb801453b.jpg)
Marca Vehiculos Top = CALCULATE(\[Total de Ventas], FILTER(dim\_vehiculo, SUM(Fact\_Ventas\[Precio Venta sin IGV]) > 50000000)) :D
Venta Marca >50M = CALCULATE(\[Total de Ventas],    FILTER(SUMMARIZE(Fact\_Ventas, dim\_vehiculo\[marca\_vehiculo],            "VentasPorMarca", \[Total de Ventas]        ),        \[VentasPorMarca] > 50000000    ))
![](https://static.platzi.com/media/user_upload/image-b92a9e0c-e0bf-4a50-b8c4-3c37e1609624.jpg)![](https://static.platzi.com/media/user_upload/image-3d38501d-5ea4-4c6f-8f8f-445da25ff79b.jpg)
![](https://static.platzi.com/media/user_upload/image-ec0083b0-8cd5-4706-baea-b1604d362d0a.jpg)
Me dio fue con esta formula marcveh>50m = CALCULATE(\[Total de ventas], filter(dim\_vehiculo, sum(Fact\_Ventas\[Precio Venta sin IGV]) >50000000))
Muchas gracias compañeros por sus valiosos aportes, con la ayuda de todos conseguí la respuesta al reto. ![](https://static.platzi.com/media/user_upload/image-3d61e9d5-47ce-4524-a60d-7f1f6c1ae952.jpg)
Me paso lo mismo que los demas compañeros, no me daba igual que con la opción de 30 Millones, tuve que solucionar haciendo: VENTA VEHICULO> 50 MILL = CALCULATE(\[Total Ventas],FILTER(dim\_vehiculo,SUM(Fact\_Ventas\[Precio Venta sin IGV])>50000000))
![](https://static.platzi.com/media/user_upload/image-e66c0582-4108-42f3-9700-80bc67601c76.jpg)
Mi respuesta VentaMarca>50 = CALCULATE(\[Total de Ventas],FILTER(dim\_vehiculo,SUM(Fact\_Ventas\[Precio Venta sin IGV]) > 50000000))
Hola, les dejo una formula, ```js Marcas Venta>50mill = CALCULATE ( [Total de Ventas], FILTER ( VALUES ( dim_vehiculo[marca_vehiculo] ), [Total de Ventas] > 50000000 ) ) ```Con esto evitaran que el total salga incorrecto. ![](https://static.platzi.com/media/user_upload/image-a28caaad-ed84-422a-af0e-379f7ae916c2.jpg) Saludos
![](https://static.platzi.com/media/user_upload/image-56909be9-341f-48c1-a9bd-938df260df3a.jpg) VENTA MARCA >50MILL = CALCULATE (    \[Total de ventas],    FILTER (        VALUES(dim\_vehiculo\[marca\_vehiculo]),        CALCULATE (            \[TOTAL DE VENTA MODELO],            ALL(dim\_vehiculo),            dim\_vehiculo\[marca\_vehiculo] = EARLIER(dim\_vehiculo\[marca\_vehiculo])        ) > 50000000    ))
se puede hacer lo mismo como en excel de tomar en referencia absoluta en un campo determinado si colocar un valor en especifico por ejemplo Ventas = IF(VALOR TOTAL >= $B$4,"MAXIMO","MINIMO") es probable hacerse de la misma manera en POWER BI
Les dejo mi aporte al caso final que dejó como reto: ```js VentaMarca>50000000 =     CALCULATE([Total de Ventas],        filter(VALUES(dim_vehiculo[marca_vehiculo]),            [Total de Ventas] > 50000000)) ```
Caí en la inocencia y realicé tal cual como explicaba en el video, al ver los comentarios, tenia otras maneras de hacer la medida DAX

Creo que en el minuto 3:04 elige la marca-vehiculo pero de Marca Top por eso solo le aparecen dos resultados y uno de ellos es “Suzuki”. En el primer ejercicio elijió marca-vehiculo pero de la dim_vehiculo.

![](https://static.platzi.com/media/user_upload/image-23af52cf-b923-48cf-b677-e9bdbf7611ad.jpg)
![](https://static.platzi.com/media/user_upload/Screenshot%202023-12-26%20222254-38c53d4d-6762-4e2f-ae7d-69c0c298505d.jpg)
Solucion mas simple con SUMX & CALCULATE. ![](https://static.platzi.com/media/user_upload/Result-cd55757e-da27-426e-8fa8-4d294ebbb3a1.jpg)![](https://static.platzi.com/media/user_upload/Captura%20de%20pantalla%202023-12-09%20153851-35a044a9-fcc2-48d1-9069-a9a6f4a90fa6.jpg)![](https://static.platzi.com/media/user_upload/SUMX-c1e4ed0f-4aac-45fd-ab3c-1d9c40256a19.jpg)
Aqui hay una solucion alternativa para el Umbral de Ventas con SUMX y sin usar FILTER. \[Umbral Bono] = 30.000.000 ```js SUMX Bono sin Filter = SUMX( // Especifica el contexto como la tabla "Vendedores" Vendedores, // Solo suma la fila, si su [Total de Ventas] es mayor al [Umbral Bono] (30.000.000), de lo contrario retorna 0 IF( [Total de Ventas] > [Umbral Bono], [Total de Ventas], 0 ) ) ```Y aca una con FILTER para filtrar la tabla al final ```js SUMX Bono = SUMX( // Filtra la tabla vendedores por las filas (vendedores) con [Total de Ventas] mayores al [Umbral Bono] FILTER( Vendedores, [Total de Ventas] > [Umbral Bono] ), // Hace la sumatoria final por el [Total de Ventas] [Total de Ventas] ) ```Espero les sirva para internalizar mejor el concepto de Contexto en Power BI
Si se pregunta por que salio SUSUKI en lugar de HONDA en el minuto 3:06, es porque el profe arrastro "marca\_vehiculo" desde la tabla "Marca TOP" y no desde "dim\_vehiculo". Recuerden que Marca TOP es una tabla filtrada a partir de "dim\_vehiculo" que solo contiene las TOP 2 marcas con mayores ventas, siendo SUSUKI y TOYOTA. Que la tabla se filtre no tiene nada que ver con el contexto declarado en CALCULATE()

Encontre otra manera de hacerlo más rápido leyendo un poco de documentación. Aín así surge a raiz del otro post que realicé.

Venta Marca 50M MIX = IF( CALCULATE([Total de Ventas],
ALLEXCEPT(dim_vehiculo,dim_vehiculo[marca_vehiculo]))>50000000,
VALUE([Total de Ventas]))

La lógica es, si encuentras que al evaluar las ventas, hay marcas que sean mayores a los 50M, muéstrame el valor de dicha venta.

Aún así, sigo sin entender por qué

VentaMarca>50M = 
CALCULATE([Total de Ventas],
FILTER(dim_vehiculo,[Total de Ventas]>50000000))

//Si es idéntico a:

VentaVendedor>30M = 
CALCULATE([Total de Ventas],
FILTER(Dim_Vendedor,[Total de Ventas]>30000000))

No funciona. Dejo foto:

Bueno, después de muchos intentos y con el conocimiento brindado hasta el momento, creo que llegarás a lo siguiente:

  1. Crear una medida que filtre solo las ventas relacionadas a la marca
  2. Crear una medida que filtre a las ventas que sean mayores a 50m.

Entonces para ello hacemos lo siguiente:

Creamos la medida:

Venta MARCA = 
CALCULATE([Total de Ventas],
ALLEXCEPT(dim_vehiculo,dim_vehiculo[marca_vehiculo]))

Por qué? Porque queremos efectivamente mostrar las ventas en todas las marcas y si, el resultado es identico a poner solo las ventas totales, sin embargo, nuestro objetivo es crear una medida con ese filtro ya establecido.

Con la medida anterior, vamos a crear la medida >50M ahora sí.

VentaMARCA>50MM = 
CALCULATE([Venta MARCA],
FILTER(dim_vehiculo,[Venta MARCA]>50000000))

Ahora colócalo en la tabla. Espero poder haberte ayudado.

Lo que sí, es que me vinieron más interrogantes. Sería bueno que el profesor responda y nos explique por qué no funciona lo siguiente:

VentaMarca>50M = 
CALCULATE([Total de Ventas],
FILTER(dim_vehiculo,[Total de Ventas]>50000000))

//Si es idéntico a:

VentaVendedor>30M = 
CALCULATE([Total de Ventas],
FILTER(Dim_Vendedor,[Total de Ventas]>30000000))

Colocaré imagen sobre como se comportan las medidas:

wow a mi algo que me funciono de pura chiripa fue:

MARCA MAS DE 50 MILLONES = CALCULATE([Total de ventas],FILTER(SELECTCOLUMNS(dim_vehiculo,"TOYOTA",dim_vehiculo[marca_vehiculo]),[Total de ventas] > 50000000))

Aprende Cómo Utilizar la Función CALCULATE en Power BI

https://www.youtube.com/watch?v=kYF-Fhv6LRk
No tiene desperdicio.

Hola Renzo buenos diasa, podrias apoyarme por favor, aun cuando tengo la misma estructura de la medida Total de Venta HONDA-TOYOTA al visualizarla en al tabla me aparecen todas als marcas con el total igual ![](https://static.platzi.com/media/user_upload/image-29e83959-03b6-47bb-84ca-fce33ab024c1.jpg)
Solución: ![](https://static.platzi.com/media/user_upload/image-41a563d0-cc15-49bd-885e-d53f92225fd9.jpg)