Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
5 years ago

Modelado de datos de Power BI

Hola Amigos!!

Tengo datos como se indica a continuación

ColAColBColC
DatosDatosDatos
L-123
L-256
NubeNubeNube
L-389
L-41112
AzulAzulAzul
L-51415
L-61718

* 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

NewColumnColAColBColC
DatosL-123
DatosL-256
NubeL-389
NubeL-41112
AzulL-51415
AzulL-61718

Por favor, sugiera!!

Gracias

ese

9 Replies

  • 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's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      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 👍
      Saludos
      Denis
      • Syndicate_Admin's avatar
        Syndicate_Admin
        Icon for Administrator rankAdministrator

        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