複数列に同じ処理―Power Query反復処理①
最初の頃は分からず、対象が多い場合、Excelのワークシートでコードを複製したりしてました。そんな必要はないわけです。
やろうとすること
後述のサンプルテーブルに対して、これの各列に同じ処理をしようというのが、今回の課題です。
簡単な例として、100を掛けてみましょう。
サンプルテーブル
下記を詳細エディタに貼ると、テーブルになります。
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("ZY7LEcAgCAV74ewBNRo9JimDof82osEPTA46zLo+HhFc4OBu5wF2BCdim8u6O+tz+EgeJCirDhZxe8dgkiYvHo1YjSgsTVGxaKpUtWQFeiXGzXZFm5h/v2cTB4KKath3Mb8=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Column1 = _t, 列1 = _t, 列2 = _t]),
#"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"A", Int64.Type}, {"B", Int64.Type}, {"C", Int64.Type}})
in
#"Changed Type"
↓こんなテーブルです。
A | B | C |
---|---|---|
700 | 800 | 800 |
0 | 200 | 600 |
200 | 800 | 900 |
300 | 200 | 400 |
700 | 300 | 1000 |
300 | 900 | 400 |
300 | 500 | 100 |
300 | 300 | 800 |
900 | 200 | 1000 |
100 | 300 | 300 |
1000 | 800 | 100 |
300 | 600 | 1000 |
1000 | 400 | 0 |
800 | 900 | 200 |
出発点:UI操作のみだと複数ステップを作るしかない
1列だと、UIの変換―標準のボタンが押せますが、複数列になると、グレーアウトしてしまいます。
1列ずつやれということらしいです。
UI操作+αでいく
1列でやったコードを列分複製するというてもありますが、ここは別の方法でやってみましょう。
というのも、まとめての掛け算はできないのに、平方根など他の処理だと、まとめて処理ができたりするからです。なので、平方根をやっておいて、コードを書き換えることもできます。
平方根をとる
UI操作:変換タブ―「数値の列」グループの「指数」―平方根
↓操作後の様子
コードを書き換える
{"A", Number.Sqrt, type number}
といった部分の関数の箇所Number.Sqrt
をそれぞれ、each _*100
と書き換えるだけです。
この_
(アンダーバー)のところに、その列の各値が引数として放り込まれるわけです。
コードで書く
UI+αではいずれにしても、各列に応じて書き直しが必要になります。
コードをしっかり書けば、繰り返し書く必要はなくなります。
全部の列を処理するコード
let
Source = t_sample,
Custom1 = Table.TransformColumns(Source,
List.Transform( Table.ColumnNames(Source),each {_,(x)=>x*100} )
)
in
Custom1
捕捉
上のコードのTable.ColumnNames(Source)
の箇所は列名のリストです。この例だと、
{"A","B","C"}
と書くのと結果は同じです。このリストを書き換えることで、処理対象を絞ることが出来ます。
例えば、B列は処理したくない場合、
List.RemoveMatchingItems(
Table.ColumnNames(Source),{"B"}
)
Author And Source
この問題について(複数列に同じ処理―Power Query反復処理①), 我々は、より多くの情報をここで見つけました https://qiita.com/tanuki_phoenix/items/d46c8ca43794e3b42dd6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .