データソースには集計に必要としない情報が含まれていることが多くある。Power BI Desktop や Excel のクエリ エディター でその処理を施すのだけど、さて、どうしようかな と、いうこともあろうかと。クエリ エディターの UI 操作のみで解決することは多いが、そうもいかないときは、Power Query(M言語)を記述しなければならない。難しいことではないですが、Power Query M function reference とにらめっこする時間が必要かも。
先日開催した Power BI 勉強会 でご質問いただいた内容のうちのひとつです。
行を削除したい、いくつかのパターン
クエリ エディター - [ホーム] - [行の削除] からの操作で多くの場合で操作ができるはず。
上位の行の削除 - 特定の行数
削除対象となる行は明らかであったり特定できる場合は、不要な行数を指定し削除することができる。このとき、中の人は Table.Skip - Table functions を使用する。ダイアログで 行数 を投入することで 先頭から行の削除。
RemovedTopRows = Table.Skip( PreviousStep , 2) // 先頭の2行をスキップ(削除)
てっきり、Table.RemoveFirstN - Table functions を使っているものと思い込んでいたので確かめていてよかった。同じ結果を得られるはずだけど、中の人が使っているのだからなんらか都合がよいのかもかな。
上位の行の削除 - 特定できない行数
csvでデータを入手できるラッキーと思ったら まれによくある。サマリ的なものやステータスのようなものがあったりして。
クエリ エディター上のクエリとして読み込み、[列1] の値に "A"(text) が出現する以前の行を削除対象とするとき以下の通りになる。
RemovedTopRows = Table.Skip( PreviousStep , each [列1] <> "A" ) // 列1 が "A"ではないときスキップ(削除)
Table.Skip(table as table, optional countOrCondition as any) as table
Remarks
* Table.Skip is similar to List.Skip but requires a table as input.
* If countOrCondition is a number, that many rows (starting at the top) will be skipped.
* If countOrCondition is a condition, the rows that meet the condition will be skipped until a row does not meet the condition.
引数名からも解りますけど、第2引数 countOrCondition が number ではないんですね。
引数:countOrCondition が
- number(行数) であるとき、該当する行数を先頭からスキップ
- condition(真偽) であるとき、評価が true である限り先頭からスキップ
別の解
何行目までが該当するかカウントする方法も念のため。検証する列を限定してしまうけど。
RemovedTopRows = Table.Skip(
PreviousStep ,
List.PositionOf( PreviousStep[列1], "A" )
)