Forum Discussion
Problema de dependencia circular
Hola, estoy tratando de encontrar valores basados en dependencias de columnas.
Por ejemplo: Tengo el siguiente conjunto de datos
| AñoMenso | B | C | D | E | F | G |
| 2021-Enero | US$ 100 | US$ 50 | US$ 20 | US$ 10 | US$ 5 | US$ 115 |
| 2021-Febrero | US$ 55 | US$ 30 | US$ 20 | US$ 10 | ||
| 2021-Marzo | US$ 60 | US$ 25 | US$ 6 | US$ 11 | ||
| 2021-Abr | US$ 50 | US$ 28 | US$ 9 | US$ 5 | ||
| 2021-Mayo | US$ 45 | US$ 35 | US$ 10 | US$ 20 | ||
| 2021-jun | US$ 50 | US$ 20 | US$ 12 | US$ 8 | ||
| 2021-julio | US$ 80 | US$ 20 | US$ 10 | US$ 5 | ||
| 2021-Ago | US$ 50 | US$ 20 | US$ 15 | US$ 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".
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])
7 Replies
- Syndicate_Admin
Administrator
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
Administrator
@lbendlin Muchas gracias por su solución. Funciona perfectamente. Solo curiosidad por saber si podemos hacer esto usando DAX.
- Syndicate_Admin
Administrator
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])
- Syndicate_Admin
Administrator
De acuerdo con la solución dada por @lbendlin , es realmente una buena opción para resolver este problema en power query.
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 - Syndicate_Admin
Administrator
- Syndicate_Admin
Administrator
@Ashish_Mathur @lbendlin Muchas gracias ambas soluciones están funcionando como se esperaba. Muchas gracias.
- Syndicate_Admin
Administrator
De nada.