2016-11-02 9 views
0

Я пытаюсь выполнить ниже с PowerQuery MPowerBI помощь nedded - Loop, UNPIVOT и добавить данные из внешнего файла

1) Открыть набор файлов (находится в папке на общем диске)

2) Получить данные в листе под названием «BC Текущие проекты»

3) Перестановка данных (в основном UNPIVOT набора столбцов (колонка изменения имен для каждого файла) 4) Append их друг под другом

Я пробовал с кодом ниже, bu t это дает мне ошибку »Имя« ReOrganizedTable »не было распознано. Убедитесь, что оно написано правильно. "

let 

//Get data from file in folder 
Source = Folder.Files(Link_StaffDataLocation), 
#"Get the files" = Table.SelectRows(Source, each [Extension] = ".csv" or [Extension] = ".txt" or Text.StartsWith([Extension], ".xls")), 
#"Removed Columns" = Table.RemoveColumns(#"Get the files",{"Date accessed", "Date modified", "Date created", "Attributes", "Folder Path"}), 
GetExcelContentIntoColumn = Table.AddColumn(#"Removed Columns", "Custom", each if Text.StartsWith([Extension], ".xls") then Excel.Workbook([Content]) else null), 
ExpandContent = Table.ExpandTableColumn(GetExcelContentIntoColumn, "Custom", {"Name", "Data", "Kind"}, {"Custom.Name", "Custom.Data", "Custom.Kind"}), 
#"Filtered Rows" = Table.SelectRows(ExpandContent, each ([Custom.Name] = "BC Ongoing Projects")), 

//Create files name list 
FileNameListStep1 = Table.Column(#"Filtered Rows","Name"), 
FileNameListStep2 = List.Skip(FileNameListStep1,1), 

//Filter on first filename 
IterationFunction = (IterationList) => 
let 
    CurrentFilenameList = List.Skip(IterationList,1), 
    CurrentFilename = CurrentFilenameList{0}, 
    FilterOneDataSetAtATime = Table.SelectRows(#"Filtered Rows", each ([Name] = CurrentFilename)), 
    // Make necessary adjustments to data 
    #"Custom Data1" = #"Filtered Rows"{0}[Custom.Data], 
    #"Filtered Rows1" = Table.SelectRows(#"Custom Data1", each ([Column1] <> null and [Column1] <> "BC Ongoing Projects" and [Column1] <> "Filters Used To Select These Practitioners:" and [Column1] <> "Pract" and [Column1] <> "Scheduled Hours" and [Column1] <> "Total:")), 
    #"Removed Columns1" = Table.RemoveColumns(#"Filtered Rows1",{"Column5"}), 
    #"Replaced Value_DK" = Table.ReplaceValue(#"Removed Columns1","DK","",Replacer.ReplaceText,{"Column4"}), 
    #"Replaced Value_SE" = Table.ReplaceValue(#"Replaced Value_DK","SE","",Replacer.ReplaceText,{"Column4"}), 
    #"Replaced Value" = Table.ReplaceValue(#"Replaced Value_SE",null,0,Replacer.ReplaceValue,{"Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16", "Column17"}), 
    #"Changed Type" = Table.TransformColumnTypes(#"Replaced Value",{{"Column6", type text}, {"Column7", type text}, {"Column8", type text}, {"Column9", type text}, {"Column10", type text}, {"Column11", type text}, {"Column12", type text}, {"Column13", type text}, {"Column14", type text}, {"Column15", type text}, {"Column16", type text}, {"Column17", type text}}), 
    #"Promoted Headers" = Table.PromoteHeaders(#"Changed Type"), 
    //Create List of week dates  
    MondayInWeekStep1 = Table.ColumnNames(#"Promoted Headers"), 
    MondayInWeekStep2 = List.Skip(MondayInWeekStep1,4), 
    #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Promoted Headers", {"Name", "Client", "Type", "Key"}, "MondayInWeek", "Staff Hours"), 
    ReOrganizedTable = Table.TransformColumnTypes(#"Unpivoted Columns",{{"MondayInWeek", type date}, {"Staff Hours", Int64.Type}}) 
in 
    ReOrganizedTable, 
    AppendTablesTogether = Table.Combine(ReOrganizedTable,IterationFunction(CurrentFilenameList)) 
in 
AppendTablesTogether 

Очень ценю amny помощь вы можете дать мне

BR Jónás

ответ

0

ReOrganziedTable существует только в IterationFunction вы определили Вы, вероятно, хотите сделать следующее:.

  1. Переместите шаг CurrentFilenameList на линию до IterationFunction.
  2. Изменить IterationFunction принять CurrentFilename вместо IterationList. Другими словами, удалите CurrentFilename шаг в IterationFunction и изменить (IterationList) => к (CurrentFilename) =>
  3. Использование List.Transform для создания списка таблиц, а затем преобразовать этот список в таблицу. List.Transform часть должна сделать что-то вроде List.Transform(FileNameListStep2, (filename) => IterationFunction(filename))
+0

Спасибо очень много. Вы абсолютно блестящие. – JSF

0

Для любого, кто хочет увидеть готовый код:

let 

//Get data from file in folder 
Source = Folder.Files(Link_StaffDataLocation), 
#"Get the files" = Table.SelectRows(Source, each [Extension] = ".csv" or [Extension] = ".txt" or Text.StartsWith([Extension], ".xls")), 
#"Removed Columns" = Table.RemoveColumns(#"Get the files",{"Date accessed", "Date modified", "Date created", "Attributes", "Folder Path"}), 
GetExcelContentIntoColumn = Table.AddColumn(#"Removed Columns", "Custom", each if Text.StartsWith([Extension], ".xls") then Excel.Workbook([Content]) else null), 
ExpandContent = Table.ExpandTableColumn(GetExcelContentIntoColumn, "Custom", {"Name", "Data", "Kind"}, {"Custom.Name", "Custom.Data", "Custom.Kind"}), 
#"Filtered Rows" = Table.SelectRows(ExpandContent, each ([Custom.Name] = "BC Ongoing Projects")), 

//Create files name list 
FileNameListStep1 = Table.Column(#"Filtered Rows","Name"), 
CurrentFilename = FileNameListStep1{0}, 

//Filter on first filename 
IterationFunction = (CurrentFilename) => 
let 
    FilterOneDataSetAtATime = Table.SelectRows(#"Filtered Rows", each ([Name] = CurrentFilename)), 
    // Make necessary adjustments to data 
    #"Custom Data1" = #"Filtered Rows"{0}[Custom.Data], 
    #"Filtered Rows1" = Table.SelectRows(#"Custom Data1", each ([Column1] <> null and [Column1] <> "BC Ongoing Projects" and [Column1] <> "Filters Used To Select These Practitioners:" and [Column1] <> "Pract" and [Column1] <> "Scheduled Hours" and [Column1] <> "Total:")), 
    #"Removed Columns1" = Table.RemoveColumns(#"Filtered Rows1",{"Column5"}), 
    #"Replaced Value_DK" = Table.ReplaceValue(#"Removed Columns1","DK","",Replacer.ReplaceText,{"Column4"}), 
    #"Replaced Value_SE" = Table.ReplaceValue(#"Replaced Value_DK","SE","",Replacer.ReplaceText,{"Column4"}), 
    #"Replaced Value" = Table.ReplaceValue(#"Replaced Value_SE",null,0,Replacer.ReplaceValue,{"Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16", "Column17"}), 
    #"Changed Type" = Table.TransformColumnTypes(#"Replaced Value",{{"Column6", type text}, {"Column7", type text}, {"Column8", type text}, {"Column9", type text}, {"Column10", type text}, {"Column11", type text}, {"Column12", type text}, {"Column13", type text}, {"Column14", type text}, {"Column15", type text}, {"Column16", type text}, {"Column17", type text}}), 
    #"Promoted Headers" = Table.PromoteHeaders(#"Changed Type"), 
    //Create List of week dates  
    MondayInWeekStep1 = Table.ColumnNames(#"Promoted Headers"), 
    MondayInWeekStep2 = List.Skip(MondayInWeekStep1,4), 
    #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Promoted Headers", {"Name", "Client", "Type", "Key"}, "MondayInWeek", "Staff Hours"), 
    ReOrganizedTable = Table.TransformColumnTypes(#"Unpivoted Columns",{{"MondayInWeek", type date}, {"Staff Hours", Int64.Type}}), 
    AddFilenameColumn= Table.AddColumn(ReOrganizedTable, "FileName", each CurrentFilename) 
in 
    AddFilenameColumn, 
    ListOfTables = List.Transform(FileNameListStep1, (filename) => IterationFunction(filename)), 
    #"Converted to Table" = Table.FromList(ListOfTables, Splitter.SplitByNothing(), null, null, ExtraValues.Error), 
    #"Expanded Column1" = Table.ExpandTableColumn(#"Converted to Table", "Column1", {"Name", "Client", "Type", "Key", "MondayInWeek", "Staff Hours", "FileName"}, {"Name", "Client", "Type", "EmployeeNr", "MondayInWeek", "Staff Hours", "FileName"}) 
in 
    #"Expanded Column1"