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
Syndicate_Admin
Administrator
Administrator

Ayuda de dependencia circular

Hola a todos

tienen un error de dependencia circular, estaba funcionando y no estoy seguro del problema.
Agregué una columna adicional en la siguiente tabla para "Región", pero mi fórmula no debería importarle eso, considerando que solo necesito determinar el máximo y el mínimo de la columna "Capacidad v Diferencia de uso"

PowerBi_Batman_0-1634251338869.png

Tengo 3 columnas personalizadas en la tabla con fórmula

IsMax =
PowerBi_Batman_1-1634251439227.png

PowerBi_Batman_3-1634251468976.png

Espero que otro conjunto de ojos ayude a determinar lo que estoy haciendo mal

gracias

1 ACCEPTED SOLUTION

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.

edhans_0-1634518036570.png

View solution in original post

8 REPLIES 8
Syndicate_Admin
Administrator
Administrator

CALCULATE está causando el problema. Está configurando un filtro para cada columna. Lo usas dos veces y se refieren entre sí.

No lo necesitas. ALLSELECTED() no está haciendo nada aquí. ALLSELECTED ajusta el contexto del filtro y las tablas no tienen contexto de filtro, solo contexto de fila.

Simplemente puede usar MAX(table[field]) y escaneará toda la tabla.

Sin embargo, probablemente no deberías hacer esto en una columna calculada. Esta no es una hoja de cálculo de Excel. Esos valores NUNCA cambian después de que se carga el modelo, por lo que aplicar filtros en un informe no les hace nada.

Probablemente desee usar medidas, pero tendría que mostrarnos lo que está haciendo a nivel de informe. Por extraño que parezca, el código DAX funcionará como una medida, pero es posible que no devuelva los resultados deseados.

En general, trate de evitar las columnas calculadas. Hay veces para usarlos, pero es raro. Por lo general, se prefiere obtener datos del sistema de origen, crear columnas en Power Query o medidas DAX a las columnas calculadas. Vea estas referencias:
Columnas calculadas frente a medidas en DAX
Columnas y medidas calculadas en DAX
Diferencias de almacenamiento entre columnas calculadas y tablas calculadas
Vídeo de SQLBI sobre medidas frente a columnas calculadas


Cómo obtener buena ayuda rápidamente. Ayúdanos a ayudarte.

Cómo hacer una pregunta técnica si realmente quieres una respuesta

Cómo obtener respuestas a su pregunta rápidamente - Danos una explicación buena y concisa
Cómo proporcionar datos de ejemplo en el Foro de Power BI: proporcione datos en formato de tabla por vínculo o comparta un archivo Excel/CSV a través de OneDrive, Dropbox, etc. Proporcione el resultado esperado utilizando una captura de pantalla de Excel u otra imagen. No proporcione una captura de pantalla de los datos de origen. No puedo pegar una imagen en tablas de Power BI.

@edhans

Creo que debe ser una columna, ya que quiero mostrar el informe para que tenga un botón
Al seleccionar este botón, se mostrará qué filtro del gráfico está más cerca de la capacidad (valor más bajo de "Capacidad v Diferencia de uso")

pero también deseo asegurarme de que también podría hacer lo contrario
por lo que este botón estaba conduciendo por otra columna

PowerBi_Batman_1-1634255125230.png



PowerBi_Batman_0-1634255056650.png


Mi filtro en el botón solo mostrará el valor "Más cercano a Capcity"

como dije que esto estaba funcionando bien, cambié la tabla para agregar otra columna de la fuente de datos y ahora tengo este problema circular

Estás dando bits y piezas, y no hay datos con los que trabajar. Recuerda, no sé nada sobre tu proyecto. ¿Puede compartir datos y su objetivo? Volveré a publicar la información sobre cómo hacerlo.

Cómo obtener buena ayuda rápidamente. Ayúdanos a ayudarte.

Cómo hacer una pregunta técnica si realmente quieres una respuesta

Cómo obtener respuestas a su pregunta rápidamente - Danos una explicación buena y concisa
Cómo proporcionar datos de ejemplo en el Foro de Power BI: proporcione datos en formato de tabla por vínculo o comparta un archivo Excel/CSV a través de OneDrive, Dropbox, etc. Proporcione el resultado esperado utilizando una captura de pantalla de Excel u otra imagen. No proporcione una captura de pantalla de los datos de origen. No puedo pegar una imagen en tablas de Power BI.

Hola @edhans
Agradezco la respuesta
La fecha o tabla es la siguiente
con las columnas en rojo como mi salida deseada

FechaProductoServicioRegiónCapacidad probadaUso actualDiferencia de capacidad v usoEs MinEs Max
1/09/2021Producto 1Servicio 1Región 1118800001973899990610100
1/09/2021Producto 1Servicio 1Región 24395600019738994198210101
1/09/2021Producto 1Servicio 2nulo52800005633456-35345610
1/09/2021Producto 1Servicio 3nulo1568160022868731339472700
1/09/2021Producto 1Servicio 4nulo29700000154116441428835600
1/09/2021Producto 1Servicio 5nulo105600001694191886580900
1/09/2021Producto 1Servicio 6nulo4395600056921973826380300
1/09/2021Producto 1Servicio 7nulo105600001550133900986700



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.

edhans_0-1634518036570.png

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ÓN
IF ( currentValue = minValue, 1 , 0 )

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í.

@edhans

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

Helpful resources

Announcements
RTI Forums Carousel3

New forum boards available in Real-Time Intelligence.

Ask questions in Eventhouse and KQL, Eventstream, and Reflex.

MayPowerBICarousel

Power BI Monthly Update - May 2024

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

LearnSurvey

Fabric certifications survey

Certification feedback opportunity for the community.