Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
4 years ago
Solved

Problema de dependencia circular

Hola, estoy tratando de encontrar valores basados en dependencias de columnas.

Por ejemplo: Tengo el siguiente conjunto de datos

AñoMensoBCDEFG
2021-EneroUS$ 100US$ 50US$ 20US$ 10US$ 5US$ 115
2021-Febrero US$ 55US$ 30US$ 20US$ 10
2021-Marzo US$ 60US$ 25US$ 6US$ 11
2021-Abr US$ 50US$ 28US$ 9US$ 5
2021-Mayo US$ 45US$ 35US$ 10US$ 20
2021-jun US$ 50US$ 20US$ 12US$ 8
2021-julio US$ 80US$ 20US$ 10US$ 5
2021-Ago US$ 50US$ 20US$ 15US$ 5

G se calcula por B+C-D-E-F para jan

para 2021-Feb B debería ser 115 el que teníamos para la columna G en 2021-ene. Tengo valores para C, D, E, F para todos los meses.

para 2021-Feb G será 115+55-30-20-10=110

para 2021-Mar B será de 110
El proceso anterior debe repetirse.

Cómo obtener esto en power bi desktop. Soy nuevo en el power bi.

  • Aquí hay una implementación en Power Query

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjIwMtT1SsxT0lFSMTQwAFGmYNLIACIEFlGK1YEqdUtNAooogEVNQaQxqmq4Qt/EIphCM4gSsHIzsDpDhDrHArg6qMUWINISzV7fxEqYMhOIvaYI9xkh2etVmodmHsRpRiDSAlldDkydBT4PO5amYzXPFKouFgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [YearMonth = _t, B = _t, C = _t, D = _t, E = _t, F = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"YearMonth", type date}, {"B", Currency.Type}, {"C", Currency.Type}, {"D", Currency.Type}, {"E", Currency.Type}, {"F", Currency.Type}}),
        #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1, Int64.Type),
        #"Added Custom" = Table.AddColumn(#"Added Index", "G", each List.Accumulate({0..[Index]},#"Changed Type"{0}[B],(c,s)=> c+#"Added Index"[C]{s}-#"Added Index"[D]{s}-#"Added Index"[E]{s}-#"Added Index"[F]{s})),
        #"Replaced Value" = Table.ReplaceValue(#"Added Custom",each [B], each if [Index]=0 then [B] else #"Added Custom"{[Index]-1}[G],Replacer.ReplaceValue,{"B"})
    in
        #"Replaced Value"

    Cómo usar este código: Crear una nueva consulta en blanco. Haga clic en "Editor avanzado". Reemplace el código en la ventana con el código proporcionado aquí. Haga clic en "Listo".
  • Syndicate_Admin's avatar
    Syndicate_Admin
    4 years ago

    Aquí es como una columna calculada, pero no se puede llenar la columna B.

    G = SUMX(FILTER(Table,[YearMonth]<=EARLIER([YearMonth])), [B]+[C]-[D]-[E]-[F])

    lbendlin_0-1648074688412.png

7 Replies

  • Aquí hay una implementación en Power Query

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjIwMtT1SsxT0lFSMTQwAFGmYNLIACIEFlGK1YEqdUtNAooogEVNQaQxqmq4Qt/EIphCM4gSsHIzsDpDhDrHArg6qMUWINISzV7fxEqYMhOIvaYI9xkh2etVmodmHsRpRiDSAlldDkydBT4PO5amYzXPFKouFgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [YearMonth = _t, B = _t, C = _t, D = _t, E = _t, F = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"YearMonth", type date}, {"B", Currency.Type}, {"C", Currency.Type}, {"D", Currency.Type}, {"E", Currency.Type}, {"F", Currency.Type}}),
        #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1, Int64.Type),
        #"Added Custom" = Table.AddColumn(#"Added Index", "G", each List.Accumulate({0..[Index]},#"Changed Type"{0}[B],(c,s)=> c+#"Added Index"[C]{s}-#"Added Index"[D]{s}-#"Added Index"[E]{s}-#"Added Index"[F]{s})),
        #"Replaced Value" = Table.ReplaceValue(#"Added Custom",each [B], each if [Index]=0 then [B] else #"Added Custom"{[Index]-1}[G],Replacer.ReplaceValue,{"B"})
    in
        #"Replaced Value"

    Cómo usar este código: Crear una nueva consulta en blanco. Haga clic en "Editor avanzado". Reemplace el código en la ventana con el código proporcionado aquí. Haga clic en "Listo".
    • Syndicate_Admin's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      @lbendlin Muchas gracias por su solución. Funciona perfectamente. Solo curiosidad por saber si podemos hacer esto usando DAX.

      • Syndicate_Admin's avatar
        Syndicate_Admin
        Icon for Administrator rankAdministrator

        Aquí es como una columna calculada, pero no se puede llenar la columna B.

        G = SUMX(FILTER(Table,[YearMonth]<=EARLIER([YearMonth])), [B]+[C]-[D]-[E]-[F])

        lbendlin_0-1648074688412.png

  • @ankababu007 ,

    De acuerdo con la solución dada por @lbendlin , es realmente una buena opción para resolver este problema en power query.

    vhenrykmstf_0-1647934393426.png

    Si el problema se ha resuelto, puede marcar la respuesta para la respuesta estándar para ayudar a los otros miembros a encontrarla más rápidamente. De no ser así, sírvase señalarlo.



    Saludos
    Henrio