MyTetra Share
Делитесь знаниями!
POWER QUERY. ОШИБКИ. АВТОМАТИЧЕСКОЕ УДАЛЕНИЕ ПУСТЫХ СТОЛБЦОВ
Время создания: 29.12.2021 08:45
Текстовые метки: Power Query, RemoveColumns
Раздел: !Закладки - MSO - Excel - Power Query
Запись: adgaver/mytetra_base_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

Так же в этом разделе:
 
MyTetra Share v.0.58
Яндекс индекс цитирования