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″
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″
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″