LoginSignup
7
4

More than 5 years have passed since last update.

空白行を削除する をよく読んでみる

Posted at

Power BI Desktop や Excel のクエリ エディターで変換加工をするとき、不要な行の除外としてテーブルから [空白行を削除する]ことがあるのだけど、そのこと自体より クエリ エディター から出力された式が結構イケてるなぁと思ったので。

テーブルから空白行を削除
Table.SelectRows(
    PreviousStep_table,
    each not List.IsEmpty(
        List.RemoveMatchingItems(
            Record.FieldValues(_),
            {"", null}
        )
    )
)
  • テーブルの列名を参照したり指定することなく
  • すべての列の値を行ごとに検証

していて、リスト(list)をうまく使う工夫だなと思うのです。

整理してから考える

関数が入れ子になっているので違う記述をしてみる。そして、順を追って考える。

テーブルから空白行を削除
Table.SelectRows(
    Table_PreviousStep,
    ( CurrentRow ) =>
        let
            List_CurrentValues = Record.FieldValues( CurrentRow ),
            List_RemovedValues = List.RemoveMatchingItems( List_CurrentValues, { "", null } ),
            Logical_IsEmptyList = List.IsEmpty( List_RemovedValues )
        in
            not Logical_IsEmptyList
)

処理に必要な関数を入れ子にしなくても記述できるのです。

Record.FieldValues

構文:Record.FieldValues
Record.FieldValues(
    record as record
) as list
Record.FieldValues( [ 列1 = "A", 列2 = 10 ] ) // { "A", 10 }

テーブルの各行をそれぞれ参照するとき、その値(value)の型は record。Record.FieldValues 関数 で レコードからフィールドの値だけの list に変換する。このあと、すべての列の 値だけ を参照することでことたりるし、列名などで参照することがないので、どれだけの列が存在する テーブル であっても同様の処理をすることができる。

List.RemoveMatchingItems

構文:List.RemoveMatchingItems
List.RemoveMatchingItems(
    list as list,
    values as list,
    optional equationCriteria as any
) as list
List.RemoveMatchingItems( {"A", "B", "C", "A", "D"}, {"A", "C"} ) // {"B", "D"}

リストから特定の値のアイテムを削除する。[空白行を削除する] という処理では、長さ 0 の文字列と null をリストから削除。削除対象は、{ "", null } というリストで表現されているから、ここを変更すれば空白行とはならないけれども違った条件での[行の削除]ができるようになる。

List.IsEmpty

構文:List.IsEmpty
List.IsEmpty(
    list as list
) as logical 
List.IsEmpty( {"A", "B", "C"} ) // false
List.IsEmpty( {} ) // true

リストから長さ 0 の文字列 と null を削除した結果、アイテム数 0 のリストになったとき、その行のすべての列の値は、長さ 0 の文字列 と null のいずれかということなので、該当する行は"空白行"ということになる。

その他

7
4
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
7
4