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

Power BI is turning 10! Let’s celebrate together with dataviz contests, interactive sessions, and giveaways. Register now.

Reply
Syndicate_Admin
Administrator
Administrator

¿Usar la "medida calculada" del VAR INSIDE CALCULATE quizás? Asignación de un nivel a otro

Pido disculpas de antemano, ya que este será un post largo ya que necesito explicar la lógica para que aquellos que ayudaron sepan exactamente cómo derivar en mi reser.

En pocas palabras, estoy tratando de obtener la cantidad final del valor calculado DESPUÉS de las asignaciones para usar en mi próximo cálculo.

Tengo 4 tablas y 1 tabla de medidas:

  • factTable - donde se encuentra el monto y otra información, excepto la asignación de costos
  • wfTier1: muestra la asignación de costos del nivel 1
  • wfTier2: muestra la asignación de costos del nivel 2
  • wfTier3: muestra la asignación de costos del nivel 3
  • tbl_key_fy_buFrom (que actúa como un puente a las 4 tablas anteriores con 'Dirección de filtro cruzado' configurada como AMBOS en lugar de simple). La razón por la que necesito este "puente" es para que la segmentación funcione.

Usando la captura de pantalla adjunta, puede ver que hay 3 cuadros rojos.

El recuadro rojo de la izquierda es el grupo SUM(factTable[Amount]) por factTable[Unidad de negocio]

PARTE SUPERIOR Caja Roja:

La 1ª vista de tabla dinámica es la asignación de costos porcentuales de wfTier1:

es decir, dice aquí que para AA-9003, necesita asignar el 42% y el 58% a AA-9103 (celda H6) y AA-9104 (celda H7) respectivamente.

La 2ª vista de tabla dinámica es la asignación de costos de importe en $ mediante factTable y wfTier1:

es decir, para AA-9003, podemos ver en la tabla de hechos que la cantidad es de $ 1,721,429.28 (celda B7). Después de tomar el 42% y el 58% respectivamente de wfTier1, la cantidad asignada a AA-9103 y AA-9104 es de $723,000 (celda H14) y $998,429 (celda H15) respectivamente.

También podemos confirmar aquí que la cantidad total que ha asignado (casilla H16) es el mismo total que la casilla B7.

INFERIOR Caja Roja:

La 1ª vista de tabla dinámica es la asignación de costos porcentuales de wfTier2:

es decir, dice aquí que para AA-9102, necesita asignar el 63% y el 37% a AA-9124 (celda G23) y AA-9126 (celda G25) respectivamente.

La 2ª vista de tabla dinámica es la asignación de costos de cantidad de $ utilizando tanto la tabla calculada (se refiere a la Caja Roja SUPERIOR de la 2ª vista de tabla dinámica, la referiré a calc_wfTier1) como la tabla de hechos a wfTier2:

Nota*** Debido a que YA NO ESTAMOS en wfTier1, por lo tanto, debe tomar el valor de la "tabla" calculada anteriormente (cuadro rojo SUPERIOR de la 2ª vista de tabla dinámica) PLUS factTable y luego MULTIPLICAR por wfTier2[Alloc]

es decir, #1. Para AA-9102 (fila 31 - celda G31), podemos ver que este valor aparece en calc_wfTier1 en la columna D (D11:D15) y que el monto es $10,657,299.91 (celda S13). Después de tomar el 63% y el 37% respectivamente de wfTier2, la cantidad asignada a AA-9124 y AA-9125 es de $6,714,099 (celda G35) y $3,943,201 (celda g37) respectivamente.

También podemos confirmar aquí que la cantidad total que ha asignado (celda G40) es el mismo total que la celda calc_wfTier1 Total general (celda S13).

Si los valores de columna de wfTier2 (fila 31) coinciden con los valores de fila de wfTier1 (D11:D15), NO tome el valor de factTable. En otras palabras, IF wfTier2[From] = wfTier1[To], no tome el valor de factTable.

es decir, # 2. Para AA-9121 (fila 31 - celda J31), podemos ver que este valor NO apareció en calc_wfTier1 en la columna D (D11:D15). Por lo tanto, esta vez miraríamos la tabla de hechos, que coincide con la celda B18.

Aquí es donde necesito ayuda en términos de QUÉ función DAX debo usar para usar el (calc_wfTier1) calculado anteriormente para aplicarlo a mi próximo cálculo.

TENGA EN CUENTA aquí que la captura de pantalla es para mí y le muestra la lógica de cómo fluye el costo de un nivel a otro con su asignación porcentual.

El resultado deseado se muestra en el cuadro rojo SUPERIOR y en el cuadro rojo INFERIOR de la 2ª vista de tabla dinámica, donde puede cambiar automáticamente en función del corte de la selección del usuario (de 1 selección, selección múltiple o selección 'TODA') y que el total general también debe sumarse correctamente.

Sé que es posible que necesite iterar las filas, por lo tanto, intenté usar SUMX, etc., pero por alguna razón, no pude hacer el cálculo para que Tier2 funcionara

factTable and Allocation View with Amount.png

Archivo PBIX de muestra

3 REPLIES 3
Syndicate_Admin
Administrator
Administrator

No sé si BUMP está permitido, si no, me disculpé, ya que no recibí ninguna respuesta y estoy completamente atascado.

Syndicate_Admin
Administrator
Administrator

@JustDavid ,

Para aplicar en cascada la asignación del nivel 1 al nivel 2 de forma dinámica en Power BI, debe usar una medida del nivel 1 como entrada para la asignación del nivel 2. Dado que las medidas se evalúan en contexto, puede utilizar un VAR dentro de un SUMX para hacer referencia condicionalmente al resultado de la asignación de Nivel 1 o volver a la cantidad original de factTable si el resultado de Tier 1 está en blanco. La clave es estructurar la asignación del Nivel 1 como una medida y luego extraerla en la lógica del Nivel 2 utilizando CALCULATE.

Suponiendo que ya tiene una medida para la asignación de nivel 1 como esta:

[Tier1_Allocated_Amt] =
SUMX (
    wfTier1,
    VAR FromBU = wfTier1[From]
    VAR ToBU = wfTier1[To]
    VAR AllocPct = wfTier1[Alloc]
    VAR SourceAmt =
        CALCULATE (
            SUM(factTable[Amount]),
            factTable[Business Unit] = FromBU
        )
    RETURN SourceAmt * AllocPct
)

Ahora puede crear una medida de nivel 2 que compruebe si hay una asignación de nivel 1 para la fila actual y usarla si está disponible:

[Tier2_Allocated_Amt] =
SUMX (
    wfTier2,
    VAR FromBU = wfTier2[From]
    VAR ToBU = wfTier2[To]
    VAR AllocPct = wfTier2[Alloc]

    VAR Tier1Amount =
        CALCULATE (
            [Tier1_Allocated_Amt],
            wfTier1[To] = FromBU
        )

    VAR FactAmount =
        CALCULATE (
            SUM(factTable[Amount]),
            factTable[Business Unit] = FromBU
        )

    VAR BaseAmount =
        IF (
            NOT ISBLANK(Tier1Amount),
            Tier1Amount,
            FactAmount
        )

    RETURN BaseAmount * AllocPct
)

Esta lógica garantiza que si el FromBU en el Nivel 2 fue el resultado de una asignación anterior en el Nivel 1, toma ese valor asignado en lugar del importe de la tabla de hechos sin procesar. De lo contrario, utiliza la cantidad original. La medida responderá dinámicamente a las segmentaciones siempre que las relaciones estén definidas correctamente y el filtrado cruzado se establezca correctamente.

Saludos

@DataNinja777 Gracias por su respuesta.

Había intentado implementarlo, sin embargo, no obtuve la respuesta correcta para mi wfTier2.

En la captura de pantalla siguiente, la segunda tabla de la matriz muestra $8,121,621.71 (para AA-9100) en lugar de $18,710,650.92

He adjuntado el archivo de ejemplo de Power BI con la función DAX.

Showing Incorrect Result - Cost Allocation from Tier to Tier.png

Archivo PBIX de muestra

Helpful resources

Announcements
June 2025 Power BI Update Carousel

Power BI Monthly Update - June 2025

Check out the June 2025 Power BI update to learn about new features.

June 2025 community update carousel

Fabric Community Update - June 2025

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

Top Solution Authors