Power Query 関数の一覧を参照する

Power Queryでも関数を覚えておいた方がよいと思うのです。Power Query エディター で データを加工変換しようとするとき、GUI操作でもそこそこのことができますけどね。よく使う関数だけでも覚えておくのはとても大事。Excel を使うときワークシート関数を覚えておいた方がよいのと同じ。

# Power Query の関数
## 関数名
テーブル(table) を処理する関数、リスト(list)を処理する関数とかろいろあるけれども、関数名には特徴があるのでまずは覚えやすいかなと。

たとえば、
テーブルを対象とする関数では、接頭辞 "Table" となっていてどのような処理がするかで関数名になっていている。Table.SelectRows は テーブルの行を選択(condition が true) / 除外(condition が false)する。
オンラインサービスなどのデータソースアクセスする特定のコネクタもだいたい同じ命名。
    
## 関数の一覧
関数の一覧でどんな関数あるのかなって探すのだけど何を使うか

### MSDN
[Power Query M function reference | Microsoft Docs](https://msdn.microsoft.com/query-bi/m/power-query-m-function-reference)
関数のカテゴリごとで別れているので、どれだっけなぁと探したり、似たような関数を比較してみたりして使うことは多い。翻訳は提供されないだろうけど、さほど難解な記述はないので何とかなるレベルなはず。ただ、更新や追加がどのような頻度になるか？はわからないけど、コンテンツの"更新日時"は見ておけばよいか。

### Power Query エディター
関数など順次追加されていくし、翻訳されたコンテンツが必要であれば、Power Query エディターで準備してしまえばよい。
そもそも Power Query の関数には、関数についてのコンテンツは用意されていて、使い方によってはパラメーターの投入するなどできるのだけど、
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193509/cb94ca2c-e4d6-bd60-e3c7-a80ecc0ff067.png)
これを一覧っぽく見れるようになっていればという感じのもの。

```text:Power_Queryの関数
let
    ExceptSection1 = Record.ToTable(
        Record.Combine(
            {
                Record.RemoveFields(
                    #shared,
                    Record.FieldNames(#sections[Section1])
                ),
                [
                    #"#table" = #table,
                    #"#date" = #date,
                    #"#time" = #time,
                    #"#datetime" = #datetime,
                    #"#datetimezone" = #datetimezone,
                    #"#duration" = #duration,
                    #"#binary" = #binary
                ]
            }
        )
    ),
    SelectType =
        Table.SelectRows(
            ExceptSection1,
            each
                Type.Is(
                    Value.Type( [Value] ),
                    Function.Type  // Type.Type にすれば 定義された Typeの一覧に
                )
        ),
    AddedDescription = 
        Table.AddColumn(
            SelectType,
            "Description",
            each
                Value.Metadata(
                    Value.Type([Value])
                )[Documentation.Description]?,
            type text),
    SortedRows = Table.Sort(
            AddedDescription,
            { "Name", Order.Ascending }
        )
in
    SortedRows
```
構文や例を参照することができる。テーブルにしているので関数名で検索したりとか。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193509/fcd9e0c6-3478-d05e-a169-b045db76d72f.png)

**構文について**
パラメーター、戻り値の Type(データ型)についても少しだけ。

例：Text.Remove( text as nullable text, removeChars as any ) as nullable text
いきなり日本語訳はいまふたつなのだけど、このあたりは汲み取ってあげたとして、
引数 **text**(Text.Type / null許容) から removeChars の文字を削除した **nullable text**(Text.Type / null許容)を戻り値とする。で、removeChars が **any**(Any.Type)。複数のTypeを受け付けるので any。

```text:Any.Typeのパラメータ
Text.Remove("aaaBCaaa", {"B", "C"} ) = "aaaaaa" // true  list で指定
Text.Remove("aaaBaaa", "B" ) = "aaaaaa" // true  text(文字列リテラル)で指定
```

# その他
- [Power BI 勉強会 - connpass](https://powerbi.connpass.com/)
- [Power BI Desktop を使い始めるには](http://qiita.com/PowerBIxyz/items/6c4735cb5b5712e70981)
- [Excel で Power Query を使い始めるには](http://qiita.com/PowerBIxyz/items/52e563037b855a099ca9)