Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
1 year ago

Cómo transformar los datos

Hola a todos

Tengo algunos datos antiguos en este formato, ¿hay alguna manera de transformar los datos?

Lo intenté, pero parece que no puedo transformarlo para mostrar que de enero a abril pertenece al próximo año, 2014.

7March.xlsx

Gracias a todos de antemano.

3 Replies

  • Puede hacer 2 copias de referencia de la tabla, eligiendo las columnas de 1 año en 1 y del segundo año en el otro. Anule la dinamización de las columnas y obtenga el año adecuado de la columna Período y, a continuación, vuelva a anexar las consultas. Ver el adjunto.

  • @mofu1401 Pruebe esto, transformado en una sola tabla:

    let
        Source = Excel.Workbook(File.Contents("C:\Users\gdeck\Downloads\7March.xlsx"), null, true),
        Sheet1_Sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data],
        #"Promoted Headers" = Table.PromoteHeaders(Sheet1_Sheet, [PromoteAllScalars=true]),
        #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"Period", type text}, {"May", Int64.Type}, {"Jun", Int64.Type}, {"Jul", Int64.Type}, {"Aug", Int64.Type}, {"Sep", Int64.Type}, {"Oct", Int64.Type}, {"Nov", Int64.Type}, {"Dec", Int64.Type}, {"Jan", Int64.Type}, {"Feb", Int64.Type}, {"Mar", Int64.Type}, {"Apr", Int64.Type}, {"Total", Int64.Type}}),
        #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Period"}, "Attribute", "Value"),
        #"Duplicated Column" = Table.DuplicateColumn(#"Unpivoted Other Columns", "Period", "Period - Copy"),
        #"Split Column by Delimiter" = Table.SplitColumn(#"Duplicated Column", "Period - Copy", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Period - Copy.1", "Period - Copy.2", "Period - Copy.3", "Period - Copy.4", "Period - Copy.5"}),
        #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Period - Copy.1", type text}, {"Period - Copy.2", Int64.Type}, {"Period - Copy.3", type text}, {"Period - Copy.4", type text}, {"Period - Copy.5", Int64.Type}}),
        #"Removed Columns" = Table.RemoveColumns(#"Changed Type1",{"Period - Copy.1", "Period - Copy.3", "Period - Copy.4"}),
        #"Added Custom" = Table.AddColumn(#"Removed Columns", "Year", each if [Attribute] = "Jan" or [Attribute] = "Feb" or [Attribute] = "Mar" or [Attribute] = "Apr" then [#"Period - Copy.5"] else [#"Period - Copy.2"]),
        #"Removed Columns1" = Table.RemoveColumns(#"Added Custom",{"Period - Copy.2", "Period - Copy.5"}),
        #"Renamed Columns" = Table.RenameColumns(#"Removed Columns1",{{"Attribute", "Month"}})
    in
        #"Renamed Columns"
  • Hola @mofu1401
    Puede utilizar el código M después de importar su tabla:
    dejar
    Origen = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("XZAxDsMgDEWvgjxniA0BMvYAPUHE0BM0irr09uX/yCnKwJex8bM/2ybP1zfYrDF83uGxH4iTTMIzdzFIRpA9FbWLMrfiSomQxGqVNl3gNICXXq7oJQU3kKKBpC4M/qnoY8zSyF0GLlfBbNVLki9K/OovMN4KxOs3bh64xduzb5I9c1olFj7oHq7Yc35cLdLaDw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) en la tabla de tipos [Period = _t, May = _t, Jun = _t, Jul = _t, Aug = _t, Sep = _t, Oct = _t, Nov = _t, Dec = _t, Jan = _t, Feb = _t, Mar = _t, Abr = _t, Total = _t]),
    #"Tipo cambiado" = Table.TransformColumnTypes(Fuente,{{"Punto", texto de tipo}, {"Mayo", Int64.Tipo}, {"Jun", Int64.Tipo}, {"Jul", Int64.Tipo}, {"Agosto", Int64.Tipo}, {"Sep", Int64.Tipo}, {"Oct", Int64.Tipo}, {"Nov", Int64.Tipo}, {"Dec", Int64.Tipo}, {"Jan", Int64.Tipo}, {"Febrero", Int64.Tipo}, {"Mar", Int64.Tipo}, {"Apr", Int64.Tipo}, {"Total", Int64.Tipo}}),
    #"Otras columnas sin dinamizar" = Table.UnpivotOtherColumns(#"Tipo cambiado", {"punto"}, "Atributo", "Valor"),
    #"Columnas renombradas" = Tabla.RenameColumns(#"Otras columnas sin dinamizar",{{"Atributo", "Mes"}}),
    #"Dividir columna por delimitador" = Table.SplitColumn(#"Columnas renombradas", "Punto", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Punto.1", "Punto.2", "Punto.3", "Punto.4", "Punto.5"}),
    #"Tipo cambiado1" = Tabla.TransformColumnTypes(#"Dividir columna por delimitador",{{"Period.1", escriba texto}, {"Período.2", Int64.Tipo}, {"Período.3", escriba texto}, {"Período.4", escriba texto}, {"Período.5", Int64.Tipo}}),
    #"Columnas eliminadas" = Tabla.RemoveColumns(#"Tipo cambiado1",{"Punto.1", "Período.3", "Período.4"}),
    #"Columnas renombradas1" = Tabla.RenameColumns(#"Columnas eliminadas",{{"Período.2", "Año mínimo"}, {"Período.5", "Año máximo"}}),
    #"Filas filtradas" = Tabla.SelectRows(#"Columnas renombradas1", cada una ([Mes] <> "Total")),
    #"Columna condicional agregada" = Table.AddColumn(#"Filas filtradas", "Personalizadas", cada una si [Mes] = "Mayo" luego 5 más si [Mes] = "Junio" luego 6 más si [Mes] = "Julio" luego 7 más si [Mes] = "Agosto" luego 8 else si [Mes] = "Sep" luego 9 else si [Mes] = "Octubre" luego 10 más si [Mes] = "Noviembre" luego 11 más si [Mes] = "Diciembre" luego 12 más si [Mes] = "Enero" luego 1 más si [Mes] = "Febrero" luego 2 si [Mes] = "Marzo" luego 3 si [ Mes] = "Abr" luego 4 else null, escriba número),
    #"Columnas renombradas2" = Tabla.RenameColumns(#"Columna condicional agregada",{{"Personalizado", "Número de mes"}}),
    #"Personalizado agregado" = Tabla.AddColumn(#"Columnas renombradas2", "Año", cada una si [Número de mes]>=5 y [Número de mes]<=12 entonces [Año mínimo]
    más
    [Año máx.]),
    #"Tipo cambiado2" = Table.TransformColumnTypes(#"Personalizado agregado",{{"Año", int64.Tipo}}),
    #"Columna personalizada agregada" = Table.AddColumn(#"Tipo cambiado2", "Personalizado", cada Text.Combine({Text.Middle(Text.From([Año], "en-GB"), 1, 2), "/", Text.PadStart(Text.From([Número de mes], "en-GB"), 2, "0"), "/", Text.From([Año], "en-GB")}), escriba texto),
    #"Fecha analizada insertada" = Table.AddColumn(#"Columna personalizada agregada", "Analizar", cada Date.From(DateTimeZone.From([Personalizado])), escriba fecha),
    #"Columnas eliminadas1" = Tabla.RemoveColumns(#"Fecha analizada insertada",{"Personalizada"}),
    #"Columnas renombradas3" = Tabla.RenameColumns(#"Columnas eliminadas1",{{"Parse", "Date"}}),
    #"Columnas eliminadas2" = Tabla.RemoveColumns(#"Columnas renombradas3",{"Año mínimo", "Año máximo"})
    en
    #"Columnas eliminadas2"

    O siga mis pasos desde la interfaz de usuario de PQ:

    Pbix está conectado

    Si esta publicación ayuda, considere aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente