Ayuda: fuente de Excel no estructurada

Un usuario Pregunto ✅

Anónimo

Hola, todos,

Tengo una fuente de Excel no estructurada y necesito transformarla. Alguien puede ayudarme?

Aquí están los datos de muestra:

Empresa / Característica / Proyecto Monto
Compañía: Compañía A 1600
Característica: Característica 1 1000
Proyecto AAA 200
Proyecto BBB 300
Proyecto CCC 500
Característica: Característica 2 600
Proyecto AAA 100
Proyecto BBB 200
Proyecto CCC 300
Compañía: Compañía B 1000
Característica: Característica 1 1000
Proyecto AAA 200
Proyecto BBB 300
Proyecto CCC 500
Compañía: Compañía C 1100
Característica: Característica 1 500
Proyecto AAA 200
Proyecto BBB 300
Característica: Característica 2 600
Proyecto AAA 100
Proyecto BBB 200
Proyecto CCC 300

Este es el resultado esperado:

Empresa Característica Proyecto Monto
Empresa A Característica 1 Proyecto AAA 200
Empresa A Característica 1 Proyecto BBB 300
Empresa A Característica 1 Proyecto CCC 500
Empresa A Característica 2 Proyecto AAA 100
Empresa A Característica 2 Proyecto BBB 200
Empresa A Característica 2 Proyecto CCC 300
Empresa B Característica 1 Proyecto AAA 200
Empresa B Característica 1 Proyecto BBB 300
Empresa B Característica 1 Proyecto CCC 500
Empresa C Característica 1 Proyecto AAA 200
Empresa C Característica 1 Proyecto BBB 300
Empresa C Característica 2 Proyecto AAA 100
Compañía C Característica 2 Proyecto BBB 200
Empresa C Característica 2 Proyecto CCC 300

¡Muchas gracias!

neatdot

let
    Source = Excel.Workbook(File.Contents("C:UsersSteve JamesDesktopsample.xlsx"), null, true),
    Sheet1_Sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data],
    #"Removed Blank Rows" = Table.SelectRows(Sheet1_Sheet, each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null}))),
    #"Removed Top Rows" = Table.Skip(#"Removed Blank Rows",1),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Top Rows",{{"Column1", "Attributes"}, {"Column2", "Amount"}}),
    #"Added Custom" = Table.AddColumn(#"Renamed Columns", "Company", each if Text.Start([Attributes],9)="Company: " then Text.AfterDelimiter([Attributes], ": ") else null),
    #"Filled Down" = Table.FillDown(#"Added Custom",{"Company"}),
    #"Filtered Rows" = Table.SelectRows(#"Filled Down", each not Text.StartsWith([Attributes], "Company: ")),
    #"Added Custom1" = Table.AddColumn(#"Filtered Rows", "Feature", each if Text.Start([Attributes],9) = "Feature: " then Text.AfterDelimiter([Attributes], ": ") else null),
    #"Filled Down1" = Table.FillDown(#"Added Custom1",{"Feature"}),
    #"Added Custom2" = Table.AddColumn(#"Filled Down1", "Project", each if Text.Start([Attributes],8)="Project " then [Attributes] else null),
    #"Filtered Rows1" = Table.SelectRows(#"Added Custom2", each ([Project] <> null)),
    #"Reordered Columns" = Table.ReorderColumns(#"Filtered Rows1",{"Attributes", "Company", "Feature", "Project", "Amount"}),
    #"Removed Columns" = Table.RemoveColumns(#"Reordered Columns",{"Attributes"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Removed Columns",{{"Company", type text}, {"Feature", type text}, {"Project", type text}, {"Amount", Int64.Type}})
in
    #"Changed Type"

neatdot

let
    Source = Excel.Workbook(File.Contents("C:UsersSteve JamesDesktopsample.xlsx"), null, true),
    Sheet1_Sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data],
    #"Removed Blank Rows" = Table.SelectRows(Sheet1_Sheet, each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null}))),
    #"Removed Top Rows" = Table.Skip(#"Removed Blank Rows",1),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Top Rows",{{"Column1", "Attributes"}, {"Column2", "Amount"}}),
    #"Added Custom" = Table.AddColumn(#"Renamed Columns", "Company", each if Text.Start([Attributes],9)="Company: " then Text.AfterDelimiter([Attributes], ": ") else null),
    #"Filled Down" = Table.FillDown(#"Added Custom",{"Company"}),
    #"Filtered Rows" = Table.SelectRows(#"Filled Down", each not Text.StartsWith([Attributes], "Company: ")),
    #"Added Custom1" = Table.AddColumn(#"Filtered Rows", "Feature", each if Text.Start([Attributes],9) = "Feature: " then Text.AfterDelimiter([Attributes], ": ") else null),
    #"Filled Down1" = Table.FillDown(#"Added Custom1",{"Feature"}),
    #"Added Custom2" = Table.AddColumn(#"Filled Down1", "Project", each if Text.Start([Attributes],8)="Project " then [Attributes] else null),
    #"Filtered Rows1" = Table.SelectRows(#"Added Custom2", each ([Project] <> null)),
    #"Reordered Columns" = Table.ReorderColumns(#"Filtered Rows1",{"Attributes", "Company", "Feature", "Project", "Amount"}),
    #"Removed Columns" = Table.RemoveColumns(#"Reordered Columns",{"Attributes"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Removed Columns",{{"Company", type text}, {"Feature", type text}, {"Project", type text}, {"Amount", Int64.Type}})
in
    #"Changed Type"

Anónimo

En respuesta a neatdot

¡Muchas gracias! ¡Esto es lo que estoy buscando!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *