[[20230913130020]] 『Power Query 行インデックスで置換』(てつ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『Power Query 行インデックスで置換』(てつ)

 Power Queryで行インデックスを条件として、「Table.TransformColumns」で置換するにはどうすればいいですか?

 例えば以下のようなケースです。
 ソースが「{100..110}」の時、6行目以降を「null」にする例です。
「インデックス列」を追加して「カスタム列」でやれば、できるのですがステップが増えるので、「Table.TransformColumns」で可能であれば方法を教えてください。

 let
    ソース = Table.FromColumns({{100..110}}),
    追加されたインデックス = Table.AddIndexColumn(ソース, "インデックス", 1, 1, Int64.Type),
    追加された条件列 = Table.AddColumn(追加されたインデックス, "カスタム", each if [インデックス] > 5 then null else [Column1]),
    削除された他の列 = Table.SelectColumns(追加された条件列,{"カスタム"})
in
    削除された他の列

< 使用 Excel:Microsoft365、使用 OS:Windows10 >


空のテーブルを作って結合したら何か問題があるんですか?

    ソース = Table.FromColumns({{100..110}}),
    上位行の保持 = Table.FirstN(ソース,5),
    空テーブル = Table.FromColumns({List.Repeat({null}, Table.RowCount(ソース)-5)}),
    テーブル結合 = 上位行の保持 & 空テーブル
(d-q-t-p) 2023/09/13(水) 13:18:20

どうしても Table.TransformColumnsが使いたいということなら

    ソース = Table.FromColumns({{100..110}}),
    上位行の保持 = Table.FirstN(ソース,5),
    上位行の削除 = Table.Skip(ソース, 5),
    列の編集 = Table.TransformColumns(上位行の削除, {"Column1", each null}),
    テーブルの結合 = 上位行の保持 & 列の編集
(d-q-t-p) 2023/09/13(水) 13:23:12

 ありがとうございます。できるだけ簡潔な例でと思い1列のみの例でしたが、
複数列の場合は、どうでしょうか?

 <元ソース>
ID	氏名
100	斎藤道三
101	毛利元就
102	松永久秀
103	今川義元
104	武田信玄
105	明智光秀
106	上杉謙信
107	織田信長
108	井伊直虎
109	荒木村重

 <置換後>//「ID列のみ」6行目以降を「null」
ID	氏名
100	斎藤道三
101	毛利元就
102	松永久秀
103	今川義元
104	武田信玄
null	明智光秀
null	上杉謙信
null	織田信長
null	井伊直虎
null	荒木村重

(てつ) 2023/09/13(水) 13:42:18


後に書いた方のやり方なら何の問題もないと思います。

あえて別のやり方を提示するなら

    上位行の保持 = Table.FirstN(元ソース, 5),
    上位行の削除 = Table.Skip(元ソース, 5),
    列の削除 = Table.RemoveColumns(上位行の削除, {"ID"}),
    テーブル結合 = 上位行の保持 & 列の削除
(d-q-t-p) 2023/09/13(水) 13:56:25

 解決だと思いますが、せっかく書いたので。

 Table.TransformColumnsだと、変換関数に対象列の値しか渡されてこないので、
 別の列の値を条件に使うのが難しいですね

 ちょっと反則ぎみですが、CombineColumnsを使うと対象の複数列の値がListで渡されてくるので、

 let
    ソース = Table.FromColumns({{100..110},{200..210}}),
    追加されたインデックス = Table.AddIndexColumn(ソース, "インデックス", 1, 1),
    結合された列 = Table.CombineColumns(追加されたインデックス, {"Column1","インデックス"}, each if _{1} > 5 then null else _{0} , "Column1")
 in
    結合された列
(´・ω・`) 2023/09/13(水) 14:03:52

 (d-q-t-p)様、ありがとうございます。
 後に書いた方のやり方で、できました。
 確認もせず、追加質問のようになってしまい、申し訳ございませんでした。

 (´・ω・`)様、ありがとうございます。
 こちらでも、できました。
 「Table.CombineColumns」、使ったことがないので、調査します。

 どうも、ありがとうございました。\(^_^)/感謝....
(てつ) 2023/09/13(水) 14:15:57

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.