Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
TD21
Helper II
Helper II

Uso de Medida en el cálculo no devolver los resultados esperados.

Tengo una medida llamada THRESHOLD, donde [THRESHOLD] á PROMEDIO ( [INVOICE AMOUNT] ) - 12500. El valor actual de THRESHOLD es 6000.

Si creo una columna llamada TEST1, donde TEST1 - IF ( [INVOICE AMOUNT] < 6000 , "YES" , "NO" ). Hay 25 registros con valores "YES", que es el recuento correcto.

Sin embargo, si creo una columna llamada TEST2, donde TEST2 - IF ( [INVOICE AMOUNT] < [THRESHOLD] , "YES" , "NO" ), obtengo 0 registro con "YES".

¿Alguna idea de por qué TEST2 no funciona según lo previsto?

1 ACCEPTED SOLUTION
Greg_Deckler
Super User
Super User

@TD21 - Generalmente es una mala idea usar una medida en una columna calculada. Hay 2 razones por las que

1. Contexto de fila

2. Las columnas calculadas no son dinámicas

Ahora, en su caso, el contexto de fila es el problema. Veamos, ¿cuál es el PROMEDIO de una fila singe en su tabla INVOICE AMOUNT? Hmm, ese sería el valor de [INVOICE AMOUNT] en esa fila. El PROMEDIO de un solo valor es el valor. Por lo tanto, [AMOUNT DE INVOICE] de esa fila nunca puede ser menor que sí misma y definitivamente no será menos que sí mismo menos algún número y por lo tanto por qué se obtiene NO para todo.

Ahora, en su caso, si usted no está preocupado por 2, entonces usted podría evitar esto cambiando su fórmula THRESHOLD a:

[THRESHOLD] = CALCULATE(AVERAGE ( [INVOICE AMOUNT] ),ALL('Table')) - 12500

or

[THRESHOLD] = AVERAGEX ( ALL('Table'),[INVOICE AMOUNT] ) - 12500

Segunda fórmula editada gracias a @CNENFRNL de capturar mi error de copiar y pegar!


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...

View solution in original post

3 REPLIES 3
Greg_Deckler
Super User
Super User

@TD21 - Generalmente es una mala idea usar una medida en una columna calculada. Hay 2 razones por las que

1. Contexto de fila

2. Las columnas calculadas no son dinámicas

Ahora, en su caso, el contexto de fila es el problema. Veamos, ¿cuál es el PROMEDIO de una fila singe en su tabla INVOICE AMOUNT? Hmm, ese sería el valor de [INVOICE AMOUNT] en esa fila. El PROMEDIO de un solo valor es el valor. Por lo tanto, [AMOUNT DE INVOICE] de esa fila nunca puede ser menor que sí misma y definitivamente no será menos que sí mismo menos algún número y por lo tanto por qué se obtiene NO para todo.

Ahora, en su caso, si usted no está preocupado por 2, entonces usted podría evitar esto cambiando su fórmula THRESHOLD a:

[THRESHOLD] = CALCULATE(AVERAGE ( [INVOICE AMOUNT] ),ALL('Table')) - 12500

or

[THRESHOLD] = AVERAGEX ( ALL('Table'),[INVOICE AMOUNT] ) - 12500

Segunda fórmula editada gracias a @CNENFRNL de capturar mi error de copiar y pegar!


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...

@Greg_Deckler Me temo que había un trozo de pluma en

[THRESHOLD] = AVERAGEX ( 'Table',[INVOICE AMOUNT] ) - 12500

en cambio, creo que es

[THRESHOLD] = AVERAGEX ( ALL ( 'Table' ), [INVOICE AMOUNT] ) - 12500


Thanks to the great efforts by MS engineers to simplify syntax of DAX! Most beginners are SUCCESSFULLY MISLED to think that they could easily master DAX; but it turns out that the intricacy of the most frequently used RANKX() is still way beyond their comprehension!

DAX is simple, but NOT EASY!

@CNENFRNL - Sí, lo siento, estaba jugando y copié mi versión de fórmula de columna. Cuando se encuentra en una columna calculada y hace referencia a una tabla o una columna dentro de una agregación, en realidad no está en contexto de fila. Se encuentra en el contexto de todas las filas. Esta es la razón por la que Column -MAX([Value]) devuelve el máximo de toda la columna (fila más alta). Pero, si usa una medida y hace referencia a una columna, el contexto de fila pasa a formar parte del contexto de filtro general y solo devuelve el valor de la fila actual de la agregación. Qué ingenioso, ¿eh? Por lo tanto, esta es la razón por la que casi siempre es una mala idea usar measues en columnas calculadas porque funcionan de manera muy diferente a lo que uno probablemente espera. Por lo tanto, sí, la versión de la medida de que necesitaría el ALL('Table').

Adjuntí mi copia de trabajo PBIX a continuación sig, Tabla (4) si quieres ver con qué estaba jugando.


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...

Helpful resources

Announcements
LearnSurvey

Fabric certifications survey

Certification feedback opportunity for the community.

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.