Forum Discussion
Modelado de datos de Power BI
Hola Amigos!!
Tengo datos como se indica a continuación
| ColA | ColB | ColC |
| Datos | Datos | Datos |
| L-1 | 2 | 3 |
| L-2 | 5 | 6 |
| Nube | Nube | Nube |
| L-3 | 8 | 9 |
| L-4 | 11 | 12 |
| Azul | Azul | Azul |
| L-5 | 14 | 15 |
| L-6 | 17 | 18 |
* aquí los datos L-1 y L-2 pertenecen a "Data", L-3, L-4 pertenece a "CLOUD" y L-5, L-6 pertenece a "Azure", por lo que necesito datos como se indica a continuación
| NewColumn | ColA | ColB | ColC |
| Datos | L-1 | 2 | 3 |
| Datos | L-2 | 5 | 6 |
| Nube | L-3 | 8 | 9 |
| Nube | L-4 | 11 | 12 |
| Azul | L-5 | 14 | 15 |
| Azul | L-6 | 17 | 18 |
Por favor, sugiera!!
Gracias
ese
9 Replies
- Syndicate_Admin
Administrator
Hey @amsrivas ,
esto debería ser posible en Power Query con Unpivot o PivotPower.
Compruebe el siguiente vídeo para ello:
¿Transponer, pivotar o unpivot en Power Query? - YouTube
Si necesitas ayuda, por favor avísame.Si respondiera a su pregunta, estaría feliz si pudiera marcar mi publicación como una solución ✔️ y darle un pulgar hacia arriba 👍SaludosDenisBlog: WhatTheFact.bi - Syndicate_Admin
Administrator
No @selimovd
Puedo entender que esto se puede hacer a través de Pivot / UnPivot sin embargo no soy capaz de avhieve esto.
¿Puede ayudarme paso a paso sobre cómo realizar por encima de la transformación !!!
Gracias
ese
- Syndicate_Admin
Administrator
Hey @amsrivas ,
necesita 2 elementos, una función para la transformación y la propia consulta.
Agregue la siguiente consulta en Power Query con el nombre "TransformTable":
(x) as table => let #"Save Header Name" = {x{0}[ColA]}, #"Add New Column" = Table.AddColumn(x, "Source", each #"Save Header Name"{0} ), #"Removed Top Rows" = Table.Skip(#"Add New Column",1), #"Reordered Columns" = Table.ReorderColumns(#"Removed Top Rows",{"Source", "ColA", "ColB", "ColC"}) in #"Reordered Columns"Y luego la consulta en sí:
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WckksSVTSQaFidaKVfHQNgVwjIDaG8kFsUyA2A/Odc/JLU4A8VBqi0hjItwBiSyjfBMg2BBlnaAQWcawqLUoFclFpiFqQDYZgDaZQETMQxxxEWCjFxgIA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ColA = _t, ColB = _t, ColC = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"ColA", type text}, {"ColB", type text}, {"ColC", type text}}), #"Split Tables" = Table.Split( #"Changed Type", 3 ), #"Transform Table" = List.Transform(#"Split Tables", TransformTable), #"Load Table" = Table.Combine( #"Transform Table" ) in #"Load Table"Si necesitas ayuda, por favor avísame.Si respondiera a su pregunta, estaría feliz si pudiera marcar mi publicación como una solución ✔️ y darle un pulgar hacia arriba 👍SaludosDenisBlog: WhatTheFact.bi- Syndicate_Admin
Administrator
No @selimovd,
La solución parece prometedora y funciona con los datos proporcionados.
Sin embargo, los datos que he proporcionado son ficticios y en los datos reales no es necesario que siempre tengamos dos filas entre cada cabeza, por e.. g datos podrían ser cualquier cosa como a continuación
ColA ColB ColC
Datos de datos
L-1 2 3
L-2 5 6
L-3 22 3322
L-4 231 233
Cloud Cloud Cloud
L-3 8 9
L-4 11 12
L-6 78 121
Azure Azure Azure
L-5 14 15
L-6 17 18- No es necesario que solo tengamos tres cabezas como Datos, Nube, Azure, etc., podría ser cualquier número.
- Número de columnas no se fijan tampoco se fijan, podría ser ColA, ColB, ColC, ColD, etc., de nuevo podría ser cualquier número.
- El número de filas entre dos cabezas puede ser cualquiera, no necesariamente dos, en el conjunto de datos anterior, hay 4 filas para datos, 3 filas para la nube, etc.
Por favor, sugiera!!
Gracias
ese