Forum Discussion
¿Hay alguna diferencia entre la medición automática y la medición manual simple?
La medida no es lo mismo que la medida implícita. Debe eliminar el CALCULATE en su medida para que sean iguales. Además, habría pensado que la relación, DIM con Revenue, debería ser 1:many como principio de modelización.
Hola @MattAllington ,
Gracias por tu respuesta. Desafortunadamente, tener un simple SUM o cambiar la relación 1:M no ayuda.
Agregué una copia de mi archivo si eso ayuda.
- Syndicate_Admin2 years ago
Administrator
Hola @Migasuke, ¡gracias por un caso interesante! 🙂
En primer lugar, para comprender el código que subyace a la medida implícita, puede abrir "Analizador de rendimiento" e iniciar el código en "Vista de consulta de DAX". Dentro de la variable __DS0Core encontrarás un filtro interesante: "HasDataCosts"Creo que se agrega al código para evitar mostrar combinaciones potencialmente inexistentes en su modelo de datos. Por lo tanto, PowerBI entiende que está creando una medida en la tabla de ingresos, que está conectada a los países DIM, por lo tanto, aunque solicite mostrar "Países DIM" y "Costos" en su objeto visual, solo tendrá valores que existan entre "Países DIM" e "Ingresos".
Para probar y confirmar esta hipótesis, he creado una tabla ficticia y he reemplazado "Código de país" con la columna de una nueva tabla "TEST_Table". De manera similar al caso anterior, la medida implícita filtra nuestras combinaciones inexistentes (consulte la consulta DAX "Medida implícita - nueva tabla"):
Ahora volvamos a tu medida:Measure Revenue = CALCULATE( SUM( Revenue[Revenue] ) )
Si lo compara con "SumRevenue2" en la vista de consulta de DAX, el código es idéntico. Sin embargo, no tienes un filtro "HasDataCosts", de los que hemos hablado anteriormente. Entonces, ¿qué sucede realmente?
En primer lugar, PBI traza las combinaciones existentes de "Países DIM" y "Costes" (por ejemplo, AT: AT,CZ,DE, es decir, 3 filas por cada fila de "Países DIM"). ¿Y ahora qué? Ahora estás pidiendo calcular "Medir Ingresos", que no tiene nada que ver con los Costos. Entonces, ¿qué sucede con una fila "AT" de "Países DIM" y "CZ" de "Costos"? Bueno, la única parte importante para calcular "Medir ingresos" es el valor "AT" de "Países DIM", porque este es el que se usa para recuperar filas de la tabla "Ingresos" para sumar. Por lo tanto, para la combinación existente AT (países DIM) > CZ (costos) se obtiene un resultado de cálculo, que se basa en "AT" de "países DIM" (y es el mismo 3 veces hasta que se filtra "AT" de "países DIM").
Para obtener el equivalente real de la medida implícita, debemos agregar el filtro "HasDataCosts", que define si "costs" realmente contiene una combinación necesaria de "DIM Countries" e "Revenue". Puedes obtenerlo de la siguiente manera:Measure Revenue (implicit equivalent) = VAR _CountriesFromRevenueSelected = VALUES( Revenue[Country Codes (Revenue)] ) VAR _CountriesFromCostsSelected = VALUES( Costs[Country Code (Costs)] ) VAR _Intersection = INTERSECT( _CountriesFromRevenueSelected, _CountriesFromCostsSelected ) RETURN IF( COUNTROWS( _Intersection ) > 0, CALCULATE( SUM( Revenue[Revenue] ) ), BLANK() )
Este es el resultado final:- Syndicate_Admin2 years ago
Administrator
Muchas gracias.
Todavía me pareció extraño que el comportamiento no sea el mismo para la medida implícita y la medida "calculada", pero su solución funciona bien.
Que tengas un buen día.- Syndicate_Admin2 years ago
Administrator
¡Estoy de acuerdo en que es confuso! Me llevó bastante tiempo entender la diferencia al escribir la respuesta a su pregunta 🙂
¡Me alegro de que mi explicación tenga sentido y de que te haya resultado útil!