|
|||||||
POWER QUERY. ОШИБКИ. АВТОМАТИЧЕСКОЕ УДАЛЕНИЕ ПУСТЫХ СТОЛБЦОВ
Время создания: 29.12.2021 08:45
Текстовые метки: Power Query, RemoveColumns
Раздел: Разные закладки - MSO - Excel - Power Query
Запись: xintrea/mytetra_db_adgaver_new/master/base/1640756700z1oi71vy8m/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
//======================================================== let //source = Csv.Document(File.Contents(#"fnGetParameter"("Path_File")),[Delimiter=" ", Columns=26, Encoding=1251, QuoteStyle=QuoteStyle.None]), //source = Excel.Workbook(File.Contents(#"fnGetParameter"("Path_File")), null, true), //список имен столбцов List_Headers_name = Table.ColumnNames(source), //заменить пробелы Replace_Value1=Table.ReplaceValue(source," ",null,Replacer.ReplaceValue,List_Headers_name), //заменить пустые значения Replace_Value2=Table.ReplaceValue(Replace_Value1,"",null,Replacer.ReplaceValue,List_Headers_name), //получем профайл запроса tab_profile = Table.Profile(Replace_Value2), //столбец проверки на количество значений в столбце(вместе с шапкой) tab_add_col_1 = Table.AddColumn(tab_profile, "Пользовательский", each [DistinctCount]<=1), //отбираем строки с пустыми столбцами rows_select = Table.SelectRows(tab_add_col_1, each ([Пользовательский] = true)), //удаляем отобранные на предыдущем шаге столбцы, источник первый шаг cols_select = Table.RemoveColumns(source, rows_select[Column]), //использовать первую строку в качестве заголовков Promote_Headers = Table.PromoteHeaders(cols_select, [PromoteAllScalars=true]), in Promote_Headers
//======================================================== //Решение с использованием Table.Profile: let source = Excel.CurrentWorkbook(){[Name = "Данные"]}[Content], tab_profile = Table.Profile(source), tab_add_col_1 = Table.AddColumn( tab_profile, "Пользовательская", each [Count] = [NullCount] ), rows_select = Table.SelectRows( tab_add_col_1, each [Пользовательская] = true ), cols_select = Table.RemoveColumns(source, rows_select[Column]) in cols_select
//======================================================== //Решение с использованием только пользовательского интерфейса: let source = Excel.CurrentWorkbook(){[Name = "Данные"]}[Content], tab_unpivot = Table.UnpivotOtherColumns( source, {"№"}, "Атрибут", "Значение" ), tab_pivot = Table.Pivot( tab_unpivot, List.Distinct(tab_unpivot[Атрибут]), "Атрибут", "Значение" ) in tab_pivot
//Ещё один способ убрать столбцы пустые: (tbl) => let Headers = Table.ColumnNames(tbl),
Result = Table.SelectColumns( tbl, List.Select(Headers, each List.MatchesAny(Table.Column(tbl, _), each _ <> null))) in Result
//Изящное решение от Gil Raviv (datachant.com).
//Но у него не менее изящное и с использованием List.Accumulate по тому же принципу:
(tbl) => let Headers = Table.ColumnNames(tbl),
fnMyAccumulator = (tbl as table, columnName as text) as table => if List.MatchesAll(Table.Column(tbl, columnName), each _ is null) then Table.RemoveColumns(tbl, {columnName}) else tbl,
myAccumulatedResult = List.Accumulate( Headers, tbl, (tbl, columnName) => fnMyAccumulator(tbl, columnName)) in myAccumulatedResult
//Удаление столбцов с помощью List.Accumulate: (tbl) => let Headers = Table.ColumnNames(tbl),
fnMyAccumulator = (tbl as table, columnName as text) as table => if List.MatchesAll(Table.Column(tbl, columnName), each _ is null) then Table.RemoveColumns(tbl, {columnName}) else tbl,
myAccumulatedResult = List.Accumulate( Headers, tbl, (tbl, columnName) => fnMyAccumulator(tbl, columnName)) in myAccumulatedResult
|
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|