Forum Discussion
Ayuda de dependencia circular
- 4 years ago
Se referían el uno al otro. Eso es lo que hace CALCULATE() en una columna calculada. Crea un filtro oculto para cada columna de la tabla. Así que cuando haces el primero, funciona. Pero cuando haces el segundo, crea un filtro para el primero, pero ahora el primero crea un filtro para el segundo.
Pero no necesitas CALCULAR aquí. Aquí están ambas fórmulas de columna, una Calc Min y la otra Calc Max.Calc Min = VAR varCurrentDiff = Data[Capacity v Usage Difference] VAR varMin = MIN(Data[Capacity v Usage Difference]) VAR Result = IF( varCurrentDiff = varMin, 1, 0 ) RETURN Result Calc Max = VAR varCurrentDiff = Data[Capacity v Usage Difference] VAR varMax = MAX(Data[Capacity v Usage Difference]) VAR Result = IF( varCurrentDiff = varMax, 1, 0 ) RETURN ResultPuede ver que mis Calc Min / Max son los mismos que el resultado deseado.
Hola @edhans
Agradezco la respuesta
La fecha o tabla es la siguiente
con las columnas en rojo como mi salida deseada
| Fecha | Producto | Servicio | Región | Capacidad probada | Uso actual | Diferencia de capacidad v uso | Es Min | Es Max |
| 1/09/2021 | Producto 1 | Servicio 1 | Región 1 | 11880000 | 1973899 | 9906101 | 0 | 0 |
| 1/09/2021 | Producto 1 | Servicio 1 | Región 2 | 43956000 | 1973899 | 41982101 | 0 | 1 |
| 1/09/2021 | Producto 1 | Servicio 2 | nulo | 5280000 | 5633456 | -353456 | 1 | 0 |
| 1/09/2021 | Producto 1 | Servicio 3 | nulo | 15681600 | 2286873 | 13394727 | 0 | 0 |
| 1/09/2021 | Producto 1 | Servicio 4 | nulo | 29700000 | 15411644 | 14288356 | 0 | 0 |
| 1/09/2021 | Producto 1 | Servicio 5 | nulo | 10560000 | 1694191 | 8865809 | 0 | 0 |
| 1/09/2021 | Producto 1 | Servicio 6 | nulo | 43956000 | 5692197 | 38263803 | 0 | 0 |
| 1/09/2021 | Producto 1 | Servicio 7 | nulo | 10560000 | 1550133 | 9009867 | 0 | 0 |
esencialmente quiero marcar la columna isMin de qué elemento en el La columna "Capacidad v Diferencia de uso" es la cifra más baja
y luego deseo hacer lo contrario en la columna isMax de qué elemento es la figura más grande
a partir de ahí, deseo usar un filtro dinámico (que puedo hacer en otra columna) en el informe, por lo que si lo selecciono, mostrará la fila de figura más baja en los gráficos y tablas relacionados
al ser una medida esto no permitirá que el gráfico se filtre, por lo que necesito que el IsMin y el isMax sean columnas para que luego pueda filtrar en cada uno de ellos dinámicamente.
antes la fórmula isMin me estaba dando el error, y de repente cambió a la fórmula isMax. No puedo decir de dónde viene la dependencia circular, ya que las fórmulas no hacen referencia entre sí.
Se referían el uno al otro. Eso es lo que hace CALCULATE() en una columna calculada. Crea un filtro oculto para cada columna de la tabla. Así que cuando haces el primero, funciona. Pero cuando haces el segundo, crea un filtro para el primero, pero ahora el primero crea un filtro para el segundo.
Pero no necesitas CALCULAR aquí. Aquí están ambas fórmulas de columna, una Calc Min y la otra Calc Max.
Calc Min =
VAR varCurrentDiff = Data[Capacity v Usage Difference]
VAR varMin = MIN(Data[Capacity v Usage Difference])
VAR Result =
IF(
varCurrentDiff = varMin,
1,
0
)
RETURN
Result
Calc Max =
VAR varCurrentDiff = Data[Capacity v Usage Difference]
VAR varMax = MAX(Data[Capacity v Usage Difference])
VAR Result =
IF(
varCurrentDiff = varMax,
1,
0
)
RETURN
Result
Puede ver que mis Calc Min / Max son los mismos que el resultado deseado.
- Syndicate_Admin4 years ago
Administrator
gracias
que funcionó
También descubrí que si cambio parte de mi fórmula (posiblemente por suerte usando allexcept) funcionó como se deseaba, pero creo que su método es un poco más robusto
Es Min =VAR minValue =CALCULATE ( MIN ( 'Tabla de Diferencias'[Capacidad v Diferencia de Uso] ), ALLEXCEPT('Tabla de Diferencias','Tabla de Diferencias'[Capacidad v Diferencia de Uso] ))VAR currentValue =MIN( 'Tabla de diferencias'[Capacidad v Diferencia de uso] )DEVOLUCIÓNIF ( currentValue = minValue, 1 , 0 )- Syndicate_Admin4 years ago
Administrator
Está manipulando el contexto de filtro que CALCULATE aplica con ALLEXCEPT, por lo que le dijo que eliminara los filtros de todo excepto la columna de diferencia. Por lo tanto, CALCULATE no crea un filtro para cada columna y, a continuación, no crea la referencia circular.
Pero como puedes ver en mi fórmula, no necesitas calcular en absoluto. Cree una nueva columna y simplemente ponga =MAX('Tabla de diferencias'[Capacidad v Diferencia de uso]) en ella y pulsa ok. Será el mismo valor en cada fila, cualquiera que sea el valor MAX para la columna 'Tabla de diferencias'[Capacidad v Diferencia de uso]. Put SUM('Tabla de diferencias'[Capacidad v Diferencia de uso]). Mismo.
Ahora ponga CALCULATE(SUM('Tabla de diferencias'[Capacidad v Diferencia de uso])
Ahora cada fila será única, y el mismo valor que si acabas de poner ='Tabla de diferencias'[Capacidad v Diferencia de uso] (a menos que cualquiera de las filas sea 100% idéntica)
Estudie sobre la transición del contexto para comprender realmente cómo funciona esto. Los capítulos 4 y 5 de la Guía Definitiva de DAX realmente ayudarán aquí. He leído esos dos capítulos docenas de veces. Tanta profundidad allí.- Syndicate_Admin4 years ago
Administrator
gracias por la información añadida. el uso calculado fue impulsado desde otra publicación que hice hace un tiempo, es bueno saber que hay alternativas y tengo algo en lo que trabajar
gracias