実現したいこと
タイトルの通りですが、PowerQueryにて偶数の行だけを削除ないしフィルターしたいのですがうまくいきません。
方法をご存じの方、教えてください。
たとえば、以下のような例になります。
時期 | 商品名 | 数量 |
---|---|---|
今月 | A商品 | 3 |
前年比 | A商品 | 10 |
今月 | B商品 | 11 |
前年比 | B商品 | 2 |
今月 | C商品 | 5 |
前年比 | C商品 | 1 |
このような場合に、「前年比」の行を取り除きたいと思っています。
グループ化して、項番を付けるのもやってみたのですが、
上記のA商品、B商品・・・が時期によって可変する値になるため、うまくいきませんでした。
> PowerQueryでデータの偶数列を削除したい
> PowerQueryにて偶数の行だけを削除ないしフィルターしたい
「列」と「行」では意味も解決方法も異なってきます。
誤字があり、申し訳ございません。「行」が正しいです。
> このような場合に、「前年比」の行を取り除きたいと思っています。
「行番号が偶数であるレコードを取り除く(奇数であるレコードのみを抽出する)こと」と「[時期]列の値が"前年比"であるレコードを取り除く("前年比"ではないレコードのみを抽出する)こと」では、やはり意味が異なります(必ずしも同じ結果になるとは限らない)。
いずれにしても、抽出の対象が「列」ではなく「レコード」なのであれば、基本的には Table.SelectRows 関数を使用することになるでしょう。
普通にフィルターで「前年比」を除外できませんか?
s.exe様 ありがとうございます。レコードが対象になりますので、Table.SelectRows関数を調べてみます。
meg_様 ありがとうございます。例がよろしくなかったと思うのですが、実際のデータには「時期」列には空のデータになるので、ご提案いただいた文字列でのフィルターができません。
> 例がよろしくなかったと思うのですが、実際のデータには「時期」列には
> 空のデータになるので、ご提案いただいた文字列でのフィルターができません。
ならば[時期]列は何のために存在しているのでしょうか。
仮にご質問の通りに([時期]列や[商品名]列がどうとかいう話は一切無視して)「偶数行を除外する(奇数行を抽出する)」のであれば、1から始まるインデックス列を追加し、その列の値が奇数であるか否かを判定し、その判定結果が true であるレコードを抽出するようになさればよいでしょう。
それぞれの数値が奇数であるか否かは Number.IsOdd 関数を使用すれば判定可能です。
(偶数であるか否かを判定したければ Number.IsEven 関数を使用すればよい)
> グループ化して、項番を付けるのもやってみたのですが、
> 上記のA商品、B商品・・・が時期によって可変する値になるため、うまくいきませんでした。
ただ、本当にそれが「本来の目的」に即した解決策であるかどうかについては、正直疑問符が付きます。
> たとえば、以下のような例になります。
> このような場合に、「前年比」の行を取り除きたいと思っています。
> 例がよろしくなかったと思うのですが、
例が例になっていなかったということでしょうか?
実際のデータを簡略化したものを提示された方が回答がつきやすくなるかと思います。
sk.exe様 丁寧にありがとうございます。例が悪く申し訳ございません。たしかに、インデックス列を付与し、奇数のみを Number.IsOdd 関数で判定、絞りこみでうまくできそうな感触です。実際、試してみます。ありがとうございました。
meg_様 ご連絡ありがとうございます。ご提示した例が悪く、申し訳ございません。sk.exe様の回答でうまくいくかもしれませんので、次回以降、ご質問の仕方は工夫いたします。ありがとうございました。
解決しているかもしれませんが、偶数行の削除は、ホーム>行の削除>代替行の削除で、1,1,1とすればいいですよ。M言語でしたら、Table.AlternateRows(x,0,1,1) です。
https://learn.microsoft.com/ja-jp/powerquery-m/table-alternaterows
もし、すでにご解決でしたら自己解決の処理をお願いします。
https://teratail.com/help#resolve-myself

回答1件
あなたの回答
tips
プレビュー