Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.
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?
Solved! Go to Solution.
@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!
@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!
@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.