LoginSignup
9
5

More than 5 years have passed since last update.

テーブルの先頭から不要な行を削除する には

Posted at

データソースには集計に必要としない情報が含まれていることが多くある。Power BI Desktop や Excel のクエリ エディター でその処理を施すのだけど、さて、どうしようかな:rolling_eyes: と、いうこともあろうかと。クエリ エディターの UI 操作のみで解決することは多いが、そうもいかないときは、Power Query(M言語)を記述しなければならない。難しいことではないですが、Power Query M function reference とにらめっこする時間が必要かも。

先日開催した Power BI 勉強会 でご質問いただいた内容のうちのひとつです。

行を削除したい、いくつかのパターン

クエリ エディター - [ホーム] - [行の削除] からの操作で多くの場合で操作ができるはず。
クエリエディター リボン

上位の行の削除 - 特定の行数

クエリ1
削除対象となる行は明らかであったり特定できる場合は、不要な行数を指定し削除することができる。このとき、中の人は Table.Skip - Table functions を使用する。ダイアログで 行数 を投入することで 先頭から行の削除。

ダイアログ 上位の行の削除

該当のステップ
    RemovedTopRows = Table.Skip( PreviousStep , 2) // 先頭の2行をスキップ(削除)

てっきり、Table.RemoveFirstN - Table functions を使っているものと思い込んでいたので確かめていてよかった。同じ結果を得られるはずだけど、中の人が使っているのだからなんらか都合がよいのかもかな。

上位の行の削除 - 特定できない行数

csvでデータを入手できるラッキーと思ったら まれによくある。サマリ的なものやステータスのようなものがあったりして。
クエリ2

クエリ エディター上のクエリとして読み込み、[列1] の値に "A"(text) が出現する以前の行を削除対象とするとき以下の通りになる。

該当のステップ
    RemovedTopRows = Table.Skip( PreviousStep , each [列1] <> "A" ) // 列1 が "A"ではないときスキップ(削除)
構文:Table.Skip
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" )
    )

その他

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5