Power AutomateでSharePointリストの収集をする際のフィルタや並び替えの書き方

# お詫び

初出時に「Power Automateで読み込める件数は最大100件まで」と書きましたが、これは設定で変更が可能な値でした。該当の個所を修正しました。

また、アクション側の設定で読み込み件数を増やす方法はこちらに記載していますので、併せてご覧ください。

* [Power Automate（旧Microsoft Flow）でSharePointリストを扱う際のフィルタや並び替えの方法まとめ](https://qiita.com/tfunakoshi/items/6c1dcaf8b3159f6b21a2)

# 前書き

Power Automate（旧Microsoft Flow）でSharePointのリスト項目を複数読み込む際、SharePointのアクションでフィルタをかけることができます。

読み込んだ後でPower Automateのフィルタアクションを使うことも出来ますが、あらかじめフィルタして置いたうえで処理したほうが余計な処理が発生せず、早いし無駄がないです。

ただ、フィルタや並び替えはODATAのクエリを使うと書かれており、参考情報もあるのですが、クエリパラメーターのどこまでをPower Automate側で用意してくれていて、どこからを自分で記入すればいいのかがわからなくなりがちなのでまとめてみました。

* [クエリ パラメーターを使用して応答をカスタマイズする](https://docs.microsoft.com/ja-jp/graph/query-parameters)

![2019-07-04_21h40_56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/abd89f48-476b-9c96-bc7b-a78f4520a9a9.png)

# テスト用データ

今回のテスト用リストにはこのようなデータを作ってあります。

| UserID | 表示名 | クラス |
|:-------|--------|----------:|
| 1      | テストユーザー1 | A |
| 2      | テストユーザー2 | B |
| 3      | テストユーザー3 | C |
| 4      | テストユーザー4 | A |
| 5      | テストユーザー5 | B |
| 6      | テストユーザー6 | C |
| 7      | テストユーザー7 | A |
| 8      | テストユーザー8 | B |
| 9      | テストユーザー9 | C |
| 10      | テストユーザー10 | D |


# フィルタークエリ

## 基本

[上記の](https://docs.microsoft.com/ja-jp/graph/query-parameters#filter-parameter)リファレンスを読むとこのように書かれていますが、

`GET https://graph.microsoft.com/v1.0/users?$filter=startswith(displayName,'J')`

この中の、$filter=まではアクション側で用意されていると考えればいいようです。

すなわち、Microsoft FlowのSharePointのアクション内のフィルタクエリとしては以下の内容を書きます。

`startswith(displayName,'J')`

## 日本語列名の問題を解決する

ところが、SharePointの列名を日本語で作成していた場合、列指定の方法に悩まされます。列名を調べる方法は大きく二つあります。

### SharePointで列名を調べる

リストの設定を開き、列名を調べたい列を開きます

![2019-07-04_22h10_48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/ef1841cf-ac04-db60-9ec5-5d2a87acd577.png)

この時、URL末尾の&Field=の後の文字列の先頭に、OData_を追加したものが列名になります。

![2019-07-04_22h12_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/a13fc4aa-52ba-c783-e2fc-36cbceb89401.png)


今回の場合はこちらです。

`OData__x8868__x793a__x540d_`

### Power Automateで列名を調べる

一度、取得するエントリ数を1件などに制限し、フィルタをかけずにPower Automateを実行してみます。結果の出力を確認すると、以下のように列名と値の結果が得られます。

![2019-07-04_22h15_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/3897a1ff-91ff-a6e1-eda0-be71ccb1e099.png)

今回だと以下の値が列名となります。

`OData__x8868__x793a__x540d_`

※ "_"は二つ続くので注意

## 特定の文字で始まるものでフィルタ

今回は表示名が「テストユーザー1」で始まるものでフィルタしてみたいと思います。

`startswith(OData__x8868__x793a__x540d_,'テストユーザー1')`

![2019-07-04_22h30_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/8f0801e1-ba45-244d-8aa3-dc3a6f028d84.png)

今回の場合、以下の2アイテムがフィルタされた結果として得ることが出来ています。

* テストユーザー1
* テストユーザー10

# 並べ替え

## 基本

並べ替えもフィルタ同様の考え方が出来ます。つまり、下記の例だと

`GET https://graph.microsoft.com/v1.0/users?$orderby=displayName`

$orderby=まではアクション側で用意されていると考え、残りのdisplayNameの部分だけ書きます。

## 任意の列で並び替える

「クラス」という列名で並び替えてみます。これも日本語の列名なので、先ほど同様にOData_で始まる列名を取得しておきます。

並び替えは列名を入れるだけなのでこれだけです。

`OData__x30af__x30e9__x30b9_`

![2019-07-04_22h43_27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/4f8d5f5a-0cf2-667b-4ba0-6a33a71b19e4.png)

結果が実感しにくいので、クラスと表示名を並べて結果を自分にメールで送ってみます。

![2019-07-04_22h46_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/a9483168-3062-cdf2-9067-47490fd24f80.png)

ちゃんとクラス順に並び替え出来ました

![2019-07-04_22h47_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/a43f6a6e-6a52-c39a-d81a-fd846895d574.png)

## 昇順と降順を切り替える

並び替えの列名に続いて、いずれかの語句を追記します。

* 昇順の場合:asc
* 降順の場合:desc

とはいえ、既定値が昇順なので、降順にしたいときだけdescを追加、と覚えておけばよいかと思います。

先ほどの結果を降順にしてみます。「並び替え順」に以下のように入力します。

`OData__x30af__x30e9__x30b9_ desc`

![2019-07-04_22h53_52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/47c312d4-7f52-ef1f-af17-5340f4e3a7e4.png)

ちゃんと降順で出力されることを確認しました。

![2019-07-04_22h55_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449038/956c376f-c259-18dc-3c38-8c71b89b1bd7.png)

# おことわり

本記事は2019年7月4日時点の検証結果を元に書いています。今後のアップデートなどで変更が発生する可能性があります。