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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Syndicate_Admin
Administrator
Administrator

Subtotal no respeta signo negativo

¡Ayuda!

Mis elementos de nivel inferior (y subtotales) se muestran correctamente, pero los niveles más altos no respetan correctamente el signo negativo de algún nivel inferior.

¿Cómo consigo que el subtotal en TRANSPORT sea la suma de "NL_TENNET_N -> BE_ELIA_N" y "BE_ELIA_N -> NL_TENNET_N" con su signo aplicado y mostrado correctamente?

Por favor, encuentre en el siguiente enlace un archivo PBIX de ejemplo para echar un vistazo más de cerca:
https://drive.google.com/file/d/1gCbE6uP58TD5ZDnjAkRVhzocBGB0uRuk/view?usp=sharing

Ejemplo

JSiebrecht_0-1617036104157.png

Como puede ver, el subtotal transport no es correcto. Debe ser la suma de -290 + 130 = -160


Un detalle importante:
Los valores negativos de NL_TENNET_N -> BE_ELIA_N se calculan como negativos en la medida mediante la evaluación de los campos [CONTROL_AREA] y [IN_AREA]. En la base de datos, son positivos. Pero necesito mostrarlos como valores negativos en el informe y también incorporarlos como tales en las sumas subtotales.

El DAX que uso es

Value_signed_ImportExport_15min = 
VAR ContractLine_Total = 
    if(and(SELECTEDVALUE(ContractLine[IN_AREA]) <> "", SELECTEDVALUE('Selectable_ControlAreas (for Combinations)'[CONTROL_AREA]) <> SELECTEDVALUE(ContractLine[IN_AREA])),
        - SUMX(ContractLine, CALCULATE(SUM(TimeSeriesQuarterHour[VALUE_SIGNED]), ContractPosition[POSITION_TYPE] = "QUANTITY")),
        SUMX(ContractLine, CALCULATE(SUM(TimeSeriesQuarterHour[VALUE_SIGNED]), ContractPosition[POSITION_TYPE] = "QUANTITY"))
    )

VAR Direction_Total = SUMMARIZE(ContractLine, ContractLine[CONTRACT_LINE_ID], "ContractLineID_Total", ContractLine_Total)

RETURN
    IF(HASONEVALUE(ContractLine[Grid Combination]),
        ContractLine_Total,
        SUMX(Direction_Total, [ContractLineID_Total]) / COUNTX(Direction_Total, [ContractLineID_Total])
    )


Llevo días probándolo, pero no puedo conseguir que funcione.
¿Cómo consigo que el subtotal en TRANSPORT sea la suma de "NL_TENNET_N -> BE_ELIA_N" y "BE_ELIA_N -> NL_TENNET_N" con su signo aplicado y mostrado correctamente?
(Btw: Las categorías bajo Transporte por supuesto también podrían ser otras, dependiendo de la elección de la segmentación del usuario y los datos subyacentes.)

¡Muchas gracias!
Enero

2 REPLIES 2
Syndicate_Admin
Administrator
Administrator

Cosas como esta

SUMX(ContractLine, CALCULATE(SUM(TimeSeriesQuarterHour[VALUE_SIGNED]), ContractPosition[POSITION_TYPE] = "QUANTITY"))

debe sonar sus campanas de advertencia. Utilice un iterador SUMX o un CALCULATE, pero no ambos. A menos que desee salir loco Un doble cálculo resuelve un problema SUMX - Excelerator BI

Buenos días @lbendlin

gracias por el enlace.
Hay un punto interesante en el post:
" Los usuarios intermedios de DAX pueden ser perdonados por pensar que la transición de contexto se produce debido a la función CALCULATE [...] – pero [...] no sucede. Recuerde anteriormente en la publicación expliqué que el segundo parámetro de CALCULATE es la primera parte de la fórmula que se va a ejecutar. Así que [...], la porción FILTER [...] se ejecuta en el contexto de filtro inicial sin ninguna transición decontexto. El CALCULATE no se ejecutahasta después de que se complete la porción FILTER."

Supongo que este es el problema en mi caso también.
Cuando se produce el cálculo del subtotal en el nivel TRANSMISSION, el filtrado se realiza uno el contexto inicial, el del nivel TRANSMISSION.
Sin embargo, para determinar, si uno necesita multiplicar el valor por -1 o no, se necesita el contexto de los niveles inferiores. Dado que debe evaluarse en ese contexto, cuál es el IN_AREA y OUT_AREA por CONTRACT_LINE_ID y si para esta combinación la suma debe ser negada.
Por lo tanto, por ejemplo, en el caso del área seleccionada del Netherladsn (NL / NL_TENNET_N) los flujos de NL_TENNET_N -> BE_ELIA_N deben multiplicarse por -1 mientras que en la otra dirección, es decir, BE_ELIA_N -> NL_TENNET_N, la suma se toma tal cual.
Este contexto aparentemente no está presente, y es por eso que para el subtotal de TRANSMISSION, el algorythm simplemente resume todos los valores de la CONTRACT_LINE_IDs subyacente independientemente de su dirección.

Aún así, ¿cómo hacer que Power BI use el contexto de nivel inferior para la evaluación de nivel superior?

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

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.