Cómo dividir un valor completo de año en columnas y filas dentro de Power Query

Un usuario Pregunto ✅

Anónimo

Hola,

Tengo valores que se refieren a todo el año 2020, como en la imagen a continuación:

vmzandonadi_0-1612362841182.png

Y me gustaría dividir estos valores en:

1. 12 COLUMNAS que dividirán el valor de la columna TotalCost por 12, que representarán mi valor mensual.

2. Me gustaría hacer lo mismo que arriba, pero en lugar de crear 12 columnas, me gustaría crear 12 FILAS, con los valores mensuales respectivos.

PD: Sé que podría hacer una de las dos formas y luego pivotar o des-pivotar las columnas, pero me gustaría aprender el código M para cada caso.

¡Agradezco su ayuda con eso!

jimmy801

En respuesta a Anónimo

Hola @Anónimo

puedes probar este enfoque. Use Table.TransformColumns para revisar su TotalCost-Column y cree una tabla de cada valor individual con 12 filas y TotalCost-Amount / 12. Después de esta transformación, puede expandir la tabla creada.

Aquí la transformación de la función Table.TransformColumns

{"TotalCost", (tc)=> Table.AddColumn(Table.FromColumns({List.Numbers(1,12)}, {"Month"}), "Monthly cost", (add)=> tc/12) , type table}}

y aquí un ejemplo de código completo

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjIwMlDSUTI0MjAwUIrVgQsYmaAJGJuhCZhYgAViAQ==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Year = _t, TotalCost = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Year", Int64.Type}, {"TotalCost", type number}}),
    Split12 = Table.TransformColumns(#"Changed Type",{{"TotalCost", (tc)=> Table.AddColumn(Table.FromColumns({List.Numbers(1,12)}, {"Month"}), "Monthly cost", (add)=> tc/12) , type table}}),
    #"Expanded TotalCost" = Table.ExpandTableColumn(Split12, "TotalCost", {"Month", "Monthly cost"}, {"Month", "Monthly cost"})
in
    #"Expanded TotalCost"

Antes

Jimmy801_0-1613111087788.png

Resultado

Jimmy801_1-1613111098945.png

Copie y pegue este código en el editor avanzado en una nueva consulta en blanco para ver cómo funciona la solución.

Si esta publicación ayuda o resuelve su problema, márquelo como solución (para ayudar a otros usuarios a encontrar contenido útil y reconocer el trabajo de los usuarios que lo ayudaron)
Los saludos también son buenos

Divertirse

Palanqueta

Hola, @Anónimo

Según su descripción, creé datos para reproducir su escenario. El archivo pbix se adjunta al final.

Tabla:

d1.png

Puede crear una columna personalizada con los siguientes códigos m como se muestra a continuación.

Value.Divide(
    List.Sum(
        Table.SelectRows(#"Changed Type",(x)=>x[Year]=[Year])[Value]
    ),
    12
)

d2.png

Resultado:

d3.png

Atentamente

Alano

Si esta publicación le ayuda, considere aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

smpa01

@Anónimo por favor intenta esto

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjIwMlDSUTI0MDBQitWB843R+EZgfiwA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", Int64.Type}, {"Column2", Int64.Type}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"Column1"}, {{"sum", each List.Sum([Column1]), type nullable number}}),
    #"Divided Column" = Table.TransformColumns(#"Grouped Rows", {{"sum", each _ / 12, type number}}),
    #"Added Custom" = Table.AddColumn(#"Divided Column", "Custom", each {1..12}),
    #"Expanded Custom" = Table.ExpandListColumn(#"Added Custom", "Custom"),
    #"Reordered Columns" = Table.ReorderColumns(#"Expanded Custom",{"Column1", "Custom", "sum"}),
    #"Renamed Columns" = Table.RenameColumns(#"Reordered Columns",{{"Custom", "year"}, {"sum", "value"}})
in
    #"Renamed Columns"

Anónimo

En respuesta a smpa01

Hola @smpa01 Siento llegar tarde, intentaré explicarme mejor.

tengo esta tabla:

vmzandonadi_0-1612984276911.png

Me gustaría obtener estos 2 resultados usando el lenguaje M:

1) Divida el TotalCost (imagen de arriba) por 12 meses y cree las columnas para cada mes, así:

vmzandonadi_1-1612984418222.png

2) En lugar de crear columnas para meses, quiero crear filas para cada mes pero también usando lenguaje M:

vmzandonadi_2-1612984502041.png

¡Gracias!

jimmy801

En respuesta a Anónimo

Hola @Anónimo

puedes probar este enfoque. Use Table.TransformColumns para revisar su TotalCost-Column y cree una tabla de cada valor individual con 12 filas y TotalCost-Amount / 12. Después de esta transformación, puede expandir la tabla creada.

Aquí la transformación de la función Table.TransformColumns

{"TotalCost", (tc)=> Table.AddColumn(Table.FromColumns({List.Numbers(1,12)}, {"Month"}), "Monthly cost", (add)=> tc/12) , type table}}

y aquí un ejemplo de código completo

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjIwMlDSUTI0MjAwUIrVgQsYmaAJGJuhCZhYgAViAQ==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Year = _t, TotalCost = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Year", Int64.Type}, {"TotalCost", type number}}),
    Split12 = Table.TransformColumns(#"Changed Type",{{"TotalCost", (tc)=> Table.AddColumn(Table.FromColumns({List.Numbers(1,12)}, {"Month"}), "Monthly cost", (add)=> tc/12) , type table}}),
    #"Expanded TotalCost" = Table.ExpandTableColumn(Split12, "TotalCost", {"Month", "Monthly cost"}, {"Month", "Monthly cost"})
in
    #"Expanded TotalCost"

Antes

Jimmy801_0-1613111087788.png

Resultado

Jimmy801_1-1613111098945.png

Copie y pegue este código en el editor avanzado en una nueva consulta en blanco para ver cómo funciona la solución.

Si esta publicación ayuda o resuelve su problema, márquelo como solución (para ayudar a otros usuarios a encontrar contenido útil y reconocer el trabajo de los usuarios que lo ayudaron)
Los saludos también son buenos

Divertirse

Palanqueta

Anónimo

En respuesta a jimmy801

Hola, @Jimmy801, funcionará para mí, ¡gracias por tu ayuda!

smpa01

En respuesta a smpa01

@Anónimo, ¿probaste lo anterior?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *