Forum Discussion
Unpivot en Power Query
Hola a todos,
Soy bastante nuevo en Power Query y mis datos están en un formato que hace que sea muy difícil de usar. Quiero despivotarlo, pero no puedo entender cómo hacer lo que necesito hacer. Los datos están en el siguiente formato. Tengo un número de países de lanzamiento que van de izquierda a derecha y luego los datos asociados con el país están en su propia columna (por lo que el país de lanzamiento 1 es ee. UU. y todos los datos con un 1 en el encabezado están asociados con los EE. UU., Mientras que todos los datos con 2 en el encabezado están asociados con Canadá). Algunos de los datos (como los números del proyecto, el nombre del proyecto y la fecha de revisión) no son específicos del país, sino específicos del proyecto.
| Número de proyecto | Nombre del proyecto | Modificado | LaunchCountryCode1 | Fecha de lanzamiento1 | LaunchCountryCode2 | Fecha de lanzamiento2 | LaunchCountryCode3 | Fecha de lanzamiento3 | LaunchCountryCode4 | LaunchDate4 | PrelanzamientoDate1 | Fecha de prelanzamiento2 | PrelanzamientoDate3 | PrelanzamientoDate4 | PlantoLaunch1 | PlantoLaunch2 | PlantoLaunch3 | PlantoLaunch4 | Fecha de revisión |
| 1 | Proyecto A | 1/1/2021 | NOS | 1/1/2021 | Canadá | 1/1/2021 | México | 1/1/2021 | Israel | 1/1/2021 | 1/1/2021 | 1/1/2021 | 1/1/2021 | 1/1/2021 | VERDADERO | FALSO | VERDADERO | FALSO | 1/1/2021 |
| 2 | Proyecto B | 2/1/2021 | NOS | 2/1/2021 | Canadá | 2/1/2021 | México | 2/1/2021 | Israel | 2/1/2021 | 2/1/2021 | 2/1/2021 | 2/1/2021 | 2/1/2021 | VERDADERO | FALSO | VERDADERO | FALSO | 1/1/2021 |
| 3 | Proyecto C | 3/1/2021 | NOS | 3/1/2021 | Canadá | 3/1/2021 | México | 3/1/2021 | Israel | 3/1/2021 | 3/1/2021 | 3/1/2021 | 3/1/2021 | 3/1/2021 | VERDADERO | FALSO | VERDADERO | FALSO | 1/1/2021 |
| 4 | Proyecto D | 4/1/2021 | NOS | 4/1/2021 | Canadá | 4/1/2021 | México | 4/1/2021 | Israel | 4/1/2021 | 4/1/2021 | 4/1/2021 | 4/1/2021 | 4/1/2021 | VERDADERO | FALSO | FALSO | VERDADERO | 1/1/2021 |
| 5 | Proyecto E | 5/1/2021 | NOS | 5/1/2021 | Canadá | 5/1/2021 | México | 5/1/2021 | Israel | 5/1/2021 | 5/1/2021 | 5/1/2021 | 5/1/2021 | 5/1/2021 | VERDADERO | FALSO | FALSO | VERDADERO | 1/1/2021 |
Quiero poner todas las fechas de lanzamiento en una columna y simplemente repetir los datos que no son específicos del país junto a ella, como la siguiente tabla reformateada:
| Número de proyecto | Nombre del proyecto | Modificado | País de lanzamiento | Fecha de lanzamiento | Fecha de prelanzamiento | ¿Planea lanzar? | Fecha de revisión |
| 1 | Proyecto A | 1/1/2020 | NOS | 1/1/2021 | 1/1/2021 | VERDADERO | 1/1/2021 |
| 2 | Proyecto B | 2/1/2020 | NOS | 2/1/2021 | 2/1/2021 | VERDADERO | 1/1/2021 |
| 3 | Proyecto C | 3/1/2020 | NOS | 3/1/2021 | 3/1/2021 | VERDADERO | 1/1/2021 |
| 4 | Proyecto D | 4/1/2020 | NOS | 4/1/2021 | 4/1/2021 | VERDADERO | 1/1/2021 |
| 5 | Proyecto E | 5/1/2020 | NOS | 5/1/2021 | 5/1/2021 | VERDADERO | 1/1/2021 |
| 1 | Proyecto A | 1/1/2020 | Canadá | 1/1/2021 | 1/1/2021 | FALSO | 1/1/2021 |
| 2 | Proyecto B | 2/1/2020 | Canadá | 2/1/2021 | 2/1/2021 | FALSO | 1/1/2021 |
| 3 | Proyecto C | 3/1/2020 | Canadá | 3/1/2021 | 3/1/2021 | FALSO | 1/1/2021 |
| 4 | Proyecto D | 4/1/2020 | Canadá | 4/1/2021 | 4/1/2021 | FALSO | 1/1/2021 |
| 5 | Proyecto E | 5/1/2020 | Canadá | 5/1/2021 | 5/1/2021 | FALSO | 1/1/2021 |
| 1 | Proyecto A | 1/1/2020 | México | 1/1/2021 | 1/1/2021 | VERDADERO | 1/1/2021 |
| 2 | Proyecto B | 2/1/2020 | México | 2/1/2021 | 2/1/2021 | VERDADERO | 1/1/2021 |
| 3 | Proyecto C | 3/1/2020 | México | 3/1/2021 | 3/1/2021 | VERDADERO | 1/1/2021 |
| 4 | Proyecto D | 4/1/2020 | México | 4/1/2021 | 4/1/2021 | FALSO | 1/1/2021 |
| 5 | Proyecto E | 5/1/2020 | México | 5/1/2021 | 5/1/2021 | FALSO | 1/1/2021 |
| 1 | Proyecto A | 1/1/2020 | Israel | 1/1/2021 | 1/1/2021 | FALSO | 1/1/2021 |
| 2 | Proyecto B | 2/1/2020 | Israel | 2/1/2021 | 2/1/2021 | FALSO | 1/1/2021 |
| 3 | Proyecto C | 3/1/2020 | Israel | 3/1/2021 | 3/1/2021 | FALSO | 1/1/2021 |
| 4 | Proyecto D | 4/1/2020 | Israel | 4/1/2021 | 4/1/2021 | VERDADERO | 1/1/2021 |
| 5 | Proyecto E | 5/1/2020 | Israel | 5/1/2021 | 5/1/2021 | VERDADERO | 1/1/2021 |
Simplemente no puedo entender los pasos para esto, si alguien puede ayudar, ¡sería muy apreciado!
Mueva la columna Fecha de revisión a la izquierda (en 2ª posición).
Seleccione las 1ª cuatro columnas y Unpivot Other Columns.
Divida la columna Atributo (de no dígito a dígito).
Seleccione la columna Atributo1 y Pivote (con valor en Valores) y No agregar desde Avanzado.
--
Déjame saber cómo va
Despivote cada columna que termine en un dígito, divida el dígito del extremo (Inicio > Transformar > columna Escupir > Por no dígito a dígito) y, a continuación, vuelva a pivotar.
Después de pivotar y dividir:
Código completo que puedes pegar en el Editor Avanzado:
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("lc+xCsIwEMbxVymZCzWX5AFqVRAUxNopdAg1gyIWqoOPb7LI5bjBm/LP1w6/eK+0qtVpme9xeldtat3oBlaQ56Ev7114hmsot2P83Ka53PavJcRHuUmyupyHbTp37aHPJ7n+/hxrrwDx16mB8IHhA8MHho82SUr4BvG71IbwDcM3DN8wfLRJUsK3iL9JbQnfMnzL8C3DR5skKZ88o+A7xM8fHeE7hu8YvmP4aJPk3/zxCw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Project Number" = _t, ProjectName = _t, Modified = _t, LaunchCountryCode1 = _t, LaunchDate1 = _t, LaunchCountryCode2 = _t, LaunchDate2 = _t, LaunchCountryCode3 = _t, LaunchDate3 = _t, LaunchCountryCode4 = _t, LaunchDate4 = _t, PrelaunchDate1 = _t, PrelaunchDate2 = _t, PrelaunchDate3 = _t, PrelaunchDate4 = _t, PlantoLaunch1 = _t, PlantoLaunch2 = _t, PlantoLaunch3 = _t, PlantoLaunch4 = _t, #"Review Date" = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Project Number", Int64.Type}, {"ProjectName", type text}, {"Modified", type date}, {"LaunchCountryCode1", type text}, {"LaunchDate1", type date}, {"LaunchCountryCode2", type text}, {"LaunchDate2", type date}, {"LaunchCountryCode3", type text}, {"LaunchDate3", type date}, {"LaunchCountryCode4", type text}, {"LaunchDate4", type date}, {"PrelaunchDate1", type date}, {"PrelaunchDate2", type date}, {"PrelaunchDate3", type date}, {"PrelaunchDate4", type date}, {"PlantoLaunch1", type logical}, {"PlantoLaunch2", type logical}, {"PlantoLaunch3", type logical}, {"PlantoLaunch4", type logical}, {"Review Date", type date}}), #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Project Number", "ProjectName", "Modified", "Review Date"}, "Attribute", "Value"), #"Split Column by Character Transition" = Table.SplitColumn(#"Unpivoted Columns", "Attribute", Splitter.SplitTextByCharacterTransition((c) => not List.Contains({"0".."9"}, c), {"0".."9"}), {"Attribute", "Index"}), #"Pivoted Column" = Table.Pivot(#"Split Column by Character Transition", List.Distinct(#"Split Column by Character Transition"[Attribute]), "Attribute", "Value"), #"Changed Type1" = Table.TransformColumnTypes(#"Pivoted Column",{{"LaunchCountryCode", type text}, {"LaunchDate", type date}, {"PrelaunchDate", type date}, {"PlantoLaunch", type logical}}) in #"Changed Type1"
5 Replies
- Syndicate_AdminAdministrator
Mueva la columna Fecha de revisión a la izquierda (en 2ª posición).
Seleccione las 1ª cuatro columnas y Unpivot Other Columns.
Divida la columna Atributo (de no dígito a dígito).
Seleccione la columna Atributo1 y Pivote (con valor en Valores) y No agregar desde Avanzado.
--
Déjame saber cómo va
- Syndicate_AdminAdministrator
Despivote cada columna que termine en un dígito, divida el dígito del extremo (Inicio > Transformar > columna Escupir > Por no dígito a dígito) y, a continuación, vuelva a pivotar.
Después de pivotar y dividir:
Código completo que puedes pegar en el Editor Avanzado:
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("lc+xCsIwEMbxVymZCzWX5AFqVRAUxNopdAg1gyIWqoOPb7LI5bjBm/LP1w6/eK+0qtVpme9xeldtat3oBlaQ56Ev7114hmsot2P83Ka53PavJcRHuUmyupyHbTp37aHPJ7n+/hxrrwDx16mB8IHhA8MHho82SUr4BvG71IbwDcM3DN8wfLRJUsK3iL9JbQnfMnzL8C3DR5skKZ88o+A7xM8fHeE7hu8YvmP4aJPk3/zxCw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Project Number" = _t, ProjectName = _t, Modified = _t, LaunchCountryCode1 = _t, LaunchDate1 = _t, LaunchCountryCode2 = _t, LaunchDate2 = _t, LaunchCountryCode3 = _t, LaunchDate3 = _t, LaunchCountryCode4 = _t, LaunchDate4 = _t, PrelaunchDate1 = _t, PrelaunchDate2 = _t, PrelaunchDate3 = _t, PrelaunchDate4 = _t, PlantoLaunch1 = _t, PlantoLaunch2 = _t, PlantoLaunch3 = _t, PlantoLaunch4 = _t, #"Review Date" = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Project Number", Int64.Type}, {"ProjectName", type text}, {"Modified", type date}, {"LaunchCountryCode1", type text}, {"LaunchDate1", type date}, {"LaunchCountryCode2", type text}, {"LaunchDate2", type date}, {"LaunchCountryCode3", type text}, {"LaunchDate3", type date}, {"LaunchCountryCode4", type text}, {"LaunchDate4", type date}, {"PrelaunchDate1", type date}, {"PrelaunchDate2", type date}, {"PrelaunchDate3", type date}, {"PrelaunchDate4", type date}, {"PlantoLaunch1", type logical}, {"PlantoLaunch2", type logical}, {"PlantoLaunch3", type logical}, {"PlantoLaunch4", type logical}, {"Review Date", type date}}), #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Project Number", "ProjectName", "Modified", "Review Date"}, "Attribute", "Value"), #"Split Column by Character Transition" = Table.SplitColumn(#"Unpivoted Columns", "Attribute", Splitter.SplitTextByCharacterTransition((c) => not List.Contains({"0".."9"}, c), {"0".."9"}), {"Attribute", "Index"}), #"Pivoted Column" = Table.Pivot(#"Split Column by Character Transition", List.Distinct(#"Split Column by Character Transition"[Attribute]), "Attribute", "Value"), #"Changed Type1" = Table.TransformColumnTypes(#"Pivoted Column",{{"LaunchCountryCode", type text}, {"LaunchDate", type date}, {"PrelaunchDate", type date}, {"PlantoLaunch", type logical}}) in #"Changed Type1" - Syndicate_AdminAdministrator
@AlexisOlson , @HotChilli : ¡Muchas gracias a ambos! Esto es maravilloso y muy útil y funcionó a las mil maravillas. He estado luchando con estos datos durante un año en su formato horrendo y apenas utilizable y sus ideas solucionaron mi problema en solo minutos. Es tan apreciado, que ambos rockean.
- Syndicate_AdminAdministrator
Hola, chicos
Recientemente he comenzado a usar Powerquery y he logrado filtrar los datos a continuación hasta cierto punto. Estoy tratando de mostrar solo un encabezado de columna para los encabezados de fila repetidos 'Número de archivo, Cliente, Cantidad de defectos cct, etc. (es decir, de la columna 4-15).
Para la columna etiquetada 'Valor', necesito que el 'Defecto:..' se muestre en una columna separada, defectos etiquetados y el 'W/O No.' sea el encabezado de columna principal para los encabezados de fila repetidos. Cualquier idea de cómo puedo abordarlo, ya que tengo una gran cantidad de datos y no puedo cortarlos y pegarlos físicamente para obtener el resultado deseado. También he adjuntado el archivo de Excel para ayudar a entender lo que estoy tratando de hacer.
Si pudiera encontrar una manera de rellenar automáticamente el 'Defecto:...' en una nueva columna, creo que podría dividir fácilmente la columna usando el delimitador de dos puntos
- Syndicate_AdminAdministrator
@Stev_data bienvenidos al foro.
Le sugiero que publique esta pregunta como una nueva publicación (en lugar de etiquetar esta publicación resuelta existente).
Por favor, publique los datos como texto y muestre el resultado deseado. Además, no está claro qué resultado desea de la columna Valor, así que muestre un ejemplo