根据条件更改每列的类型
Change type of each column contingent to criteria
我想在以下两种情况之一(以效果更好的为准)下将列的类型更改为 type number
:(1) 除第一列以外的每一列,或 (2) 列 header 不等于术语 Balance Sheet
.
这是我解决选项 (1) 和选项 (2) 的代码:
let
source_path=Excel.CurrentWorkbook(){[Name="rng_path"]}[Content]{0}[Column1],
ticker_name=Excel.CurrentWorkbook(){[Name="rng_ticker"]}[Content]{0}[Column1],
Quelle = Excel.Workbook(File.Contents(source_path & "\" & ticker_name & "_balance_sheet.xlsx"), null, true),
#"Sheet 1_Sheet" = Quelle{[Item="Sheet 1",Kind="Sheet"]}[Data],
#"Entfernte oberste Zeilen" = Table.Skip(#"Sheet 1_Sheet",1),
#"Höher gestufte Header" = Table.PromoteHeaders(#"Entfernte oberste Zeilen", [PromoteAllScalars=true]),
//option (1)
#"Geänderter Typ" = Table.TransformColumnTypes(#"Höher gestufte Header", List.Transform(Table.ColumnNames(#"Höher gestufte Header"), each {_, type number})),
//option (2)
#"Geänderter Typ" = Table.TransformColumnTypes(#"Höher gestufte Header", List.Transform(Table.ColumnNames(#"Höher gestufte Header"), each {_, each if Table.ColumnNames(#"Höher gestufte Header") <> "Balance Sheet" then type number else type text})),
#"Entfernte leere Zeilen" = Table.SelectRows(#"Geänderter Typ", each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null})))
in
#"Entfernte leere Zeilen"
构建列名转换参数,我建议:
List.Zip({Table.ColumnNames(Source), {type text} & List.Repeat({type number}, Table.ColumnCount(Source)-1)})
例如代码中:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WSlLSUTIEYiM9cyBpoRSrE62UDOIDsTEQW4JFUqA8E5BqA7BQKpRrCjYAJALlmIF1x8YCAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [a = _t, x = _t, y = _t, Column2 = _t]),
typeList = List.Zip({
Table.ColumnNames(Source),
{type text} & List.Repeat({type number}, Table.ColumnCount(Source)-1)
}),
#"Changed Type" = Table.TransformColumnTypes(Source,typeList)
in
#"Changed Type"
当然,您可以将第 2 步和第 3 步结合起来——为了清楚起见,我将它们分开了。
这两种方法可以是
#"AllButFirst" = Table.TransformColumnTypes(Source,List.Transform(List.RemoveFirstN(Table.ColumnNames(Source),1),each {_, type number})),
#"BalanceSheetTitlesOnly" = Table.TransformColumnTypes(Source,List.Transform(List.Select(Table.ColumnNames(Source), each Text.Contains(_, "Balance Sheet")),each {_, type number}))
我想在以下两种情况之一(以效果更好的为准)下将列的类型更改为 type number
:(1) 除第一列以外的每一列,或 (2) 列 header 不等于术语 Balance Sheet
.
这是我解决选项 (1) 和选项 (2) 的代码:
let
source_path=Excel.CurrentWorkbook(){[Name="rng_path"]}[Content]{0}[Column1],
ticker_name=Excel.CurrentWorkbook(){[Name="rng_ticker"]}[Content]{0}[Column1],
Quelle = Excel.Workbook(File.Contents(source_path & "\" & ticker_name & "_balance_sheet.xlsx"), null, true),
#"Sheet 1_Sheet" = Quelle{[Item="Sheet 1",Kind="Sheet"]}[Data],
#"Entfernte oberste Zeilen" = Table.Skip(#"Sheet 1_Sheet",1),
#"Höher gestufte Header" = Table.PromoteHeaders(#"Entfernte oberste Zeilen", [PromoteAllScalars=true]),
//option (1)
#"Geänderter Typ" = Table.TransformColumnTypes(#"Höher gestufte Header", List.Transform(Table.ColumnNames(#"Höher gestufte Header"), each {_, type number})),
//option (2)
#"Geänderter Typ" = Table.TransformColumnTypes(#"Höher gestufte Header", List.Transform(Table.ColumnNames(#"Höher gestufte Header"), each {_, each if Table.ColumnNames(#"Höher gestufte Header") <> "Balance Sheet" then type number else type text})),
#"Entfernte leere Zeilen" = Table.SelectRows(#"Geänderter Typ", each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null})))
in
#"Entfernte leere Zeilen"
构建列名转换参数,我建议:
List.Zip({Table.ColumnNames(Source), {type text} & List.Repeat({type number}, Table.ColumnCount(Source)-1)})
例如代码中:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WSlLSUTIEYiM9cyBpoRSrE62UDOIDsTEQW4JFUqA8E5BqA7BQKpRrCjYAJALlmIF1x8YCAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [a = _t, x = _t, y = _t, Column2 = _t]),
typeList = List.Zip({
Table.ColumnNames(Source),
{type text} & List.Repeat({type number}, Table.ColumnCount(Source)-1)
}),
#"Changed Type" = Table.TransformColumnTypes(Source,typeList)
in
#"Changed Type"
当然,您可以将第 2 步和第 3 步结合起来——为了清楚起见,我将它们分开了。
这两种方法可以是
#"AllButFirst" = Table.TransformColumnTypes(Source,List.Transform(List.RemoveFirstN(Table.ColumnNames(Source),1),each {_, type number})),
#"BalanceSheetTitlesOnly" = Table.TransformColumnTypes(Source,List.Transform(List.Select(Table.ColumnNames(Source), each Text.Contains(_, "Balance Sheet")),each {_, type number}))