Mover datos de fila a columna existente

Un usuario Pregunto ✅

aeve

Quizás una pregunta básica, pero no puedo encontrar una manera de lograr esto.

Tengo la siguiente tabla de datos:

2019 2020
1 2 3 4 1
Ubicación Ventas porque Ventas porque Ventas porque Ventas porque Ventas porque
X 10 9 8 7 10 9 8 7 13 11
Y 12 10 12 10 11 9 12 10 14 12
Z dieciséis 12 dieciséis 13 dieciséis 12 15 10 14 11

Me gustaría ajustar la tabla de tal manera que se muestre de la siguiente manera:

Ubicación Año Período Ventas porque
X 2019 01 10 9
X 2019 02 8 7
X 2019 03 10 9
X 2019 04 8 7
X 2020 01 13 11
Y 2019 01 12 10
Y 2019 02 12 10
Y 2019 03 11 9
y 2019 04 12 10
Y 2020 01 14 12
Z 2019 01 dieciséis 12
Z 2019 02 dieciséis 13
Z 2019 03 dieciséis 12
Z 2019 04 15 10
Z 2020 01 14 11

¿Cómo puedo hacer esto en PowerBI?

camargos88

En respuesta a aeve

Hola @Aeve,

Prueba este nuevo código:

dejar
Fuente = Table.FromRows (Json.Document (Binary.Decompress (Binary.FromText ( «nu / + BDoIwDP0VwpkDHTDgqJh4MdGEi7pwIOiBxDiD8P 2o5sjUQ8ma1772tfXKRUGYRTiEzGUCMGXMBMipqyJlKOBUTAmjOmiT4qd7tqx13ckDoO + + TN0YbAc9PbCu29v1iVjt678rsjhiviJTOpM U2DkHwm6E8Cp1ny64NMtJl4990lxsj7C7vYyYCuPSufSSisMyYvNAF2VsUvBjdy5nVkC0m2V7gtvLlvagdNufJsfSWlcm + YF», BinaryEncoding.Base64), Compression.Deflate)), y mucho _T = ((tipo anulable texto) meta [Serialized.Text = true]) en la tabla de tipos [Column1 = _t, Column2 = _t, Column3 = _t, Column4 = _t, Column5 = _t, Column6 = _t, Column7 = _t, Column8 = _t, Column9 = _t, Column10 = _t, Column11 = _t, Column12 = _t]),
#»Tipo cambiado» = Table.TransformColumnTypes(Fuente,{{«Columna1», escriba texto}, {«Columna2», escriba texto}, {«Columna3», escriba texto}, {«Columna4», escriba texto}, { «Columna5», escriba texto}, {«Columna6», escriba texto}, {«Columna7», escriba texto}, {«Columna8», escriba texto}, {«Columna9», escriba texto}, {«Columna10», escriba texto}, {«Columna11», escriba texto}, {«Columna12», escriba texto}}),
#»Tabla transpuesta» = Table.Transpose(#»Tipo cambiado»),
#»Texto recortado» = Table.TransformColumns(#»Tabla transpuesta»,{{«Columna1», Texto.Recortar, escriba texto}, {«Columna2», Texto.Recortar, escriba texto}}),
#»Valor reemplazado» = Table.ReplaceValue(#»Texto recortado»,»»,null,Replacer.ReplaceValue,{«Columna1», «Columna2»}),
#»Rellenado» = Table.FillDown(#»Valor reemplazado»,{«Columna1», «Columna2»}),
Table1 = Table.RemoveColumns(Table.FirstN(#»Rellenado», 2), {«Column1», «Column2»}),
#»Filas filtradas» = Table.SelectRows(#»Rellenado», cada uno ([Column2] <> nulo)),
#»Filas agrupadas» = Table.Group(#»Filas filtradas», {«Columna1», «Columna2»}, {{«Filas», cada Table.PromoteHeaders(Table.Transpose(Table.Combine({
Tabla.RemoveColumns(_, {«Columna1», «Columna2»}),
Tabla1 }))), tipo tabla [Sales=text, COS=text, Location=text, #»Product Group»=text]}}),
#»Filas expandidas» = Table.ExpandTableColumn(#»Filas agrupadas», «Filas», {«Ventas», «COS», «Ubicación», «Grupo de productos»}, {«Ventas», «COS», «Ubicación «, «Grupo de productos»}),
#»Columnas renombradas» = Table.RenameColumns(#»Filas expandidas»,{{«Columna1», «Año»}, {«Columna2», «Período»}}),
#»Tipo modificado1″ = Table.TransformColumnTypes(#»Columnas renombradas»,{{«Año», Int64.Tipo}, {«Período», Int64.Tipo}, {«Ventas», Int64.Tipo}, {«COS «, Int64.Type}, {«Ubicación», escriba texto}, {«Grupo de productos», escriba texto}})
en
#»Cambiado Tipo1″

camargos88

Hola @Aeve,

Vaya al Editor de consultas y cree una consulta en blanco, pegue este código m en el Editor avanzado:

dejar
Fuente = Table.FromRows (Json.Document (Binary.Decompress (Binary.FromText ( «i45WMjIwtFTSUVLAg4HIyMDIAMyL1YkGixlC5YygtDGUNoHShnDVPvnJiSWZ + XlAgeDEnNRiIO3sH0w2D2RkBMgCkHtALrcAYnOsAiA3GRqCdUSCmEYwVUgsQ6gmJCETCBekLQrENINLm8FNRYiZouoDWhcLAA ==», BinaryEncoding.Base64), Compression.Deflate)), permiten _T = ((tipo de texto anulable) meta [Serialized.Text = true]) en la tabla de tipos [Column1 = _t, Column2 = _t, Column3 = _t, Column4 = _t, Column5 = _t, Column6 = _t, Column7 = _t, Column8 = _t, Column9 = _t, Column10 = _t, Column11 = _t]),
#»Tipo cambiado» = Table.TransformColumnTypes(Fuente,{{«Columna1», escriba texto}, {«Columna2», escriba texto}, {«Columna3», escriba texto}, {«Columna4», escriba texto}, { «Columna5», escriba texto}, {«Columna6», escriba texto}, {«Columna7», escriba texto}, {«Columna8», escriba texto}, {«Columna9», escriba texto}, {«Columna10», escriba texto}, {«Columna11», escriba texto}}),
#»Tabla transpuesta» = Table.Transpose(#»Tipo cambiado»),
#»Texto recortado» = Table.TransformColumns(#»Tabla transpuesta»,{{«Columna1», Texto.Recortar, escriba texto}}),
#»Valor reemplazado» = Table.ReplaceValue(#»Texto recortado»,»»,null,Replacer.ReplaceValue,{«Column1»}),
#»Rellenado» = Table.FillDown(#»Valor reemplazado»,{«Columna1», «Columna2»}),
#»Texto recortado1″ = Table.TransformColumns(#»Rellenado hacia abajo»,{{«Columna2», Texto.Recortado, escriba texto}}),
#»Valor1 reemplazado» = Tabla.ReplaceValue(#»Texto recortado1″,»»,null,Replacer.ReplaceValue,{«Columna2»}),
#»Rellenado1″ = Tabla.Rellenar(#»Valor1 reemplazado»,{«Columna2»}),
#»Encabezados promocionados» = Table.PromoteHeaders(#»Filled Down1″, [PromoteAllScalars=true]),
#»Tipo1 cambiado» = Table.TransformColumnTypes(#»Encabezados promocionados»,{{«2019», Int64.Type}, {«Columna2», Int64.Type}, {«Ubicación», escriba texto}, {«X» , Int64.Tipo}, {«Y», Int64.Tipo}, {«Z», Int64.Tipo}}),
#»Columnas renombradas» = Table.RenameColumns(#»Changed Type1″,{{«2019», «Year»}, {«Column2», «Period»}}),
#»Otras columnas sin pivotar» = Table.UnpivotOtherColumns(#»Columnas renombradas», {«Año», «Período», «Ubicación»}, «Atributo», «Valor»),
#»Columna pivotada» = Table.Pivot(#»Otras columnas no pivotadas», List.Distinct(#»Otras columnas no pivotadas»[Location]), «Ubicación», «Valor»),
#»Columnas renombradas1″ = Table.RenameColumns(#»Columna dinámica»,{{«Atributo», «Ubicación»}})
en
#»Columnas renombradas1″

Captura.PNG

aeve

En respuesta a camargos88

¡Gracias, eso ayudó mucho! Sin embargo, mi tabla de datos tiene un poco más de datos. ¿Es posible lo mismo con la siguiente tabla?

2019 2020
1 2 3 4 1
Ubicación Producto Grupo Ventas porque Ventas porque Ventas porque Ventas porque Ventas porque
X A 10 9 8 7 10 9 8 7 13 11
X B 3 2 4 2 4 3 4 2 3 2
Y A 12 10 12 10 11 9 12 10 14 12
Y C 6 4 10 8 5 2 8 4 7 2
Z C dieciséis 12 dieciséis 13 dieciséis 12 15 10 14 11
Z D 10 8 10 8 10 8 10 8 9 7
Ubicación Grupo de productos Año Período Ventas porque
X A 2019 1 10 9
X A 2019 2 8 7
X A 2019 3 10 9
X A 2019 4 8 7
X A 2020 1 13 11
X B 2019 1 3 2
X B 2019 2 4 2
etc

camargos88

En respuesta a aeve

Hola @Aeve,

Prueba este:

dejar
Fuente = Table.FromRows (Json.Document (Binary.Decompress (Binary.FromText ( «nu / + BDoIwDP0VwpkDHTDgqJh4MdGEi7pwIOiBxDiD8P 2o5sjUQ8ma1772tfXKRUGYRTiEzGUCMGXMBMipqyJlKOBUTAmjOmiT4qd7tqx13ckDoO + + TN0YbAc9PbCu29v1iVjt678rsjhiviJTOpM U2DkHwm6E8Cp1ny64NMtJl4990lxsj7C7vYyYCuPSufSSisMyYvNAF2VsUvBjdy5nVkC0m2V7gtvLlvagdNufJsfSWlcm + YF», BinaryEncoding.Base64), Compression.Deflate)), y mucho _T = ((tipo anulable texto) meta [Serialized.Text = true]) en la tabla de tipos [Column1 = _t, Column2 = _t, Column3 = _t, Column4 = _t, Column5 = _t, Column6 = _t, Column7 = _t, Column8 = _t, Column9 = _t, Column10 = _t, Column11 = _t, Column12 = _t]),
#»Tipo cambiado» = Table.TransformColumnTypes(Fuente,{{«Columna1», escriba texto}, {«Columna2», escriba texto}, {«Columna3», escriba texto}, {«Columna4», escriba texto}, { «Columna5», escriba texto}, {«Columna6», escriba texto}, {«Columna7», escriba texto}, {«Columna8», escriba texto}, {«Columna9», escriba texto}, {«Columna10», escriba texto}, {«Columna11», escriba texto}, {«Columna12», escriba texto}}),
#»Tabla transpuesta» = Table.Transpose(#»Tipo cambiado»),
#»Texto recortado» = Table.TransformColumns(#»Tabla transpuesta»,{{«Columna1», Texto.Recortar, escriba texto}}),
#»Valor reemplazado» = Table.ReplaceValue(#»Texto recortado»,»»,null,Replacer.ReplaceValue,{«Column1»}),
#»Rellenado» = Table.FillDown(#»Valor reemplazado»,{«Columna1», «Columna2»}),
#»Texto recortado1″ = Table.TransformColumns(#»Rellenado hacia abajo»,{{«Columna2», Texto.Recortado, escriba texto}}),
#»Valor1 reemplazado» = Tabla.ReplaceValue(#»Texto recortado1″,»»,null,Replacer.ReplaceValue,{«Columna2»}),
#»Rellenado1″ = Tabla.Rellenar(#»Valor1 reemplazado»,{«Columna2»}),
#»Personalizado añadido» = Table.AddColumn(#»Filled Down1″, «Custom», each let _year = [Column1], _mes = [Column2] en
Tabla.PromoverEncabezados(
Tabla.Transponer(
Table.RemoveColumns(Table.SelectRows(#»Filled Down1″, each
([Column1] = _año y [Column2] = _mes) o
[Column2] = nulo), {«Columna1», «Columna2»})))),
#»Filas filtradas» = Table.SelectRows(#»Personalizado agregado», cada uno ([Column2] <> nulo)),
#»Otras columnas eliminadas» = Table.SelectColumns(#»Filas filtradas»,{«Columna1», «Columna2», «Personalizado»}),
#»Duplicados eliminados» = Table.Distinct(#»Otras columnas eliminadas», {«Columna1», «Columna2»}),
#»Personalizado ampliado» = Table.ExpandTableColumn(#»Duplicados eliminados», «Personalizado», {«Ubicación», «Grupo de productos», «Ventas», «COS»}, {«Ubicación», «Grupo de productos», » Ventas», «COS»}),
#»Columnas renombradas» = Table.RenameColumns(#»Personalizado ampliado»,{{«Columna1», «Año»}, {«Columna2», «Período»}}),
#»Tipo modificado 1″ = Table.TransformColumnTypes(#»Columnas renombradas»,{{«Año», Int64.Type}, {«Período», Int64.Type}, {«Ubicación», tipo de texto}, {«Grupo de productos «, escriba texto}, {«Ventas», Int64.Tipo}, {«COS», Int64.Tipo}}),
#»Filas1 filtradas» = Table.SelectRows(#»Tipo1 cambiado», cada uno ([Location] = «X»))
en
#»Filas filtradas1″

Captura.PNG

aeve

En respuesta a camargos88

Esa consulta funcionó perfectamente para la tabla de datos pequeños que se incluye en este tema. Sin embargo, mi conjunto de datos real consta de más de 200 K filas. PowerBI no es capaz de realizar esta consulta para este conjunto de datos relativamente grande. ¿Hay una forma más eficiente/consulta alternativa para obtener el mismo resultado?

camargos88

En respuesta a aeve

Hola @Aeve,

Prueba este nuevo código:

dejar
Fuente = Table.FromRows (Json.Document (Binary.Decompress (Binary.FromText ( «nu / + BDoIwDP0VwpkDHTDgqJh4MdGEi7pwIOiBxDiD8P 2o5sjUQ8ma1772tfXKRUGYRTiEzGUCMGXMBMipqyJlKOBUTAmjOmiT4qd7tqx13ckDoO + + TN0YbAc9PbCu29v1iVjt678rsjhiviJTOpM U2DkHwm6E8Cp1ny64NMtJl4990lxsj7C7vYyYCuPSufSSisMyYvNAF2VsUvBjdy5nVkC0m2V7gtvLlvagdNufJsfSWlcm + YF», BinaryEncoding.Base64), Compression.Deflate)), y mucho _T = ((tipo anulable texto) meta [Serialized.Text = true]) en la tabla de tipos [Column1 = _t, Column2 = _t, Column3 = _t, Column4 = _t, Column5 = _t, Column6 = _t, Column7 = _t, Column8 = _t, Column9 = _t, Column10 = _t, Column11 = _t, Column12 = _t]),
#»Tipo cambiado» = Table.TransformColumnTypes(Fuente,{{«Columna1», escriba texto}, {«Columna2», escriba texto}, {«Columna3», escriba texto}, {«Columna4», escriba texto}, { «Columna5», escriba texto}, {«Columna6», escriba texto}, {«Columna7», escriba texto}, {«Columna8», escriba texto}, {«Columna9», escriba texto}, {«Columna10», escriba texto}, {«Columna11», escriba texto}, {«Columna12», escriba texto}}),
#»Tabla transpuesta» = Table.Transpose(#»Tipo cambiado»),
#»Texto recortado» = Table.TransformColumns(#»Tabla transpuesta»,{{«Columna1», Texto.Recortar, escriba texto}, {«Columna2», Texto.Recortar, escriba texto}}),
#»Valor reemplazado» = Table.ReplaceValue(#»Texto recortado»,»»,null,Replacer.ReplaceValue,{«Columna1», «Columna2»}),
#»Rellenado» = Table.FillDown(#»Valor reemplazado»,{«Columna1», «Columna2»}),
Table1 = Table.RemoveColumns(Table.FirstN(#»Rellenado», 2), {«Column1», «Column2»}),
#»Filas filtradas» = Table.SelectRows(#»Rellenado», cada uno ([Column2] <> nulo)),
#»Filas agrupadas» = Table.Group(#»Filas filtradas», {«Columna1», «Columna2»}, {{«Filas», cada Table.PromoteHeaders(Table.Transpose(Table.Combine({
Tabla.RemoveColumns(_, {«Columna1», «Columna2»}),
Tabla1 }))), tipo tabla [Sales=text, COS=text, Location=text, #»Product Group»=text]}}),
#»Filas expandidas» = Table.ExpandTableColumn(#»Filas agrupadas», «Filas», {«Ventas», «COS», «Ubicación», «Grupo de productos»}, {«Ventas», «COS», «Ubicación «, «Grupo de productos»}),
#»Columnas renombradas» = Table.RenameColumns(#»Filas expandidas»,{{«Columna1», «Año»}, {«Columna2», «Período»}}),
#»Tipo modificado1″ = Table.TransformColumnTypes(#»Columnas renombradas»,{{«Año», Int64.Tipo}, {«Período», Int64.Tipo}, {«Ventas», Int64.Tipo}, {«COS «, Int64.Type}, {«Ubicación», escriba texto}, {«Grupo de productos», escriba texto}})
en
#»Cambiado Tipo1″

Deja un comentario

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