#ごあいさつ
Power BI 大好きな皆様へ
こんにちは、susumutanakaでございます。
突然ですが、みなさんは、
「Odataフィード」って使ってますか?
自分は、業務上、Microsoft Dynamics 365を利用しているので、めっちゃ使います。
僕が知り得る範囲での知識で「Odataフィード」について書かせてもらいます。
#Odataって?
Odataは、
以下URLから引用となりますが
https://qiita.com/Terry3/items/6aa56e49278b1d5f3856
Open Data Protocolの略でRESTfulなWebAPI(Webサービス)プロトコル。
OASISという規定に従って作られたプロトコル。
つまり、OData特有の書き方があるということか。今はマイクロソフトが主導となって進めている模様。
Excelとかでデータ連携する場合にODataがあったりする。
で、そのodataですが、仕様を理解すると大変便利なコネクターです。
便利と思うのが、SQLのように、データ取得する際に、
項目を指定できる(select)
+条件指定(filter)ができる
※SQLだとWhere句ですが、odataだと、filterとなる
ということが、できちゃいます。
これが、できると大量データの読み込みや、不要なデータの読み込みがされないため、
パフォーマンスが劇的に変わります。
特に、テーブルにしこたま、項目がついている場合に、威力を発揮します。
(弊社で利用しているDynamicsもSFDCも大量に項目を保有するので、効果抜群です。)
サンプルソースがあるので皆さんでやってみましょう!
#準備するもの
・SQLServer使いにはおなじみのサンプルデータNorthwindをOdataで取得できるサイト
http://services.odata.org/northwind/northwind.svc/
#とりあえず、普通にodataでデータ取得#
ODataフィードの画面に以下のURLを張り付ける
ナビゲーター画面で「Customers」(顧客)を選択し、「OK」ボタンクリック。
「Customers」(顧客)が取得されている。すべての項目、レコードが取得された状態です。
続きまして、項目を絞った形での取得方法。
#項目を指定し、データ取得してみる#
ODataフィードの画面で「詳細設定」で以下項目を設定
No | 値 | 説明 |
---|---|---|
1 | http://services.odata.org/northwind/northwind.svc/ | URL |
2 | Customers | テーブル名 |
3 | ?$select= | パラメータ |
4 | CustomerID,CompanyName,Country,City | 取得したい項目 |
入力画面はこんな感じ↓
すべて入力が終わると、URLプレビュー欄がこのようになるはずです。
http://services.odata.org/northwind/northwind.svc/Customers?$select=CustomerID,CompanyName,Country,City
取得すると、以下画面のように必要な項目だけが取得された状態となります。
つづいて、条件を指定して、
「City」(都市)が【London】のものだけ取得する方法です
#条件を指定してデータを取得してみる#
ODataフィードの画面で「詳細設定」で以下項目を設定
※前項からNo.5,6が増えるだけです。
No | 値 | 説明 |
---|---|---|
1 | http://services.odata.org/northwind/northwind.svc/ | URL |
2 | Customers | テーブル名 |
3 | ?$select= | 項目選択のパラメータ |
4 | CustomerID,CompanyName,Country,City | 取得したい項目 |
5 | &$filter= | 条件選択のパラメータ |
6 | City eq 'London' | 条件 |
※eqはイコールの略で、Londonのデータを取得する
入力画面はこんな感じ↓
入力したURLプレビューはこんな感じになるはず。
http://services.odata.org/northwind/northwind.svc/Customers?$select=CustomerID,CompanyName,Country,City&$filter=City eq 'London'
データを取得すると、項目と条件で必要なデータのみ取得されている状態になる。
さらに、顧客のデータに、受注のデータを結合して取得する方法です。
(SQLでいうところのJOINです。)
業務上はほぼ別々で取得し、リレーションを張るのでほぼ活用するイメージがないのですが、
ご紹介しておきます。
#とりあえず、受注テーブルが紐づいているかを確認してみる#
前提条件として、
odataが参照しているサービスでリレーションシップが張られていることが前提になります。(たぶん)
とりあえず、顧客と受注テーブルがリレーションシップがあるかを、確認するため、普通にデータ取得してみる
「関連テーブルの選択」をクリック
「Orders」(受注)テーブルが選択されるのがわかりますね!
リレーションがはられているのかを確認するには、ここまで十分です。
念のため、
データを取り込み、リレーションシップを確認すると、「CustomerID」で
つながっているのがわかります。
(「顧客」と「受注」がこれ自体は確認の作業なので、特段意味はないです。
また、PowerBIのリレーションシップの機能で自動判定しているのかは不明)
#受注テーブルを結合してデータを取得#
ODataフィードの画面で「詳細設定」で以下項目を設定
※前項から、2-1,4-1が追加。3がちょっぴり変わるだけ
No | 値 | 説明 |
---|---|---|
1 | http://services.odata.org/northwind/northwind.svc/ | URL |
2 | Customers | テーブル名 |
2-1 | ?$expand=Orders | 結合するテーブルを指定 |
3 | &$select= | 項目選択のパラメータ |
4 | CustomerID,CompanyName,Country,City | 取得したい項目 |
4-1 | ,Orders/OrderID | 結合したテーブルの項目を指定 |
5 | &$filter= | 条件選択のパラメータ |
6 | City eq 'London' | 条件 |
URLはこんな感じ↓
http://services.odata.org/northwind/northwind.svc/Customers?$expand=Orders&$select=CustomerID,CompanyName,Country,City,Orders/OrderID&$filter=City eq 'London'
データ取得すると、ordersテーブルが結合された状態になっている。
必要な項目を展開すればOK
今回は、OrderIDしか、結合しなかったので、表示上もOrderIDしか存在しない。**
#最後に
みなさんどうでしょうか?使えそうなイメージつきましたでしょうか?
もし、Odataが利用できるサービス(Dynamics,SFDCなど)でビジュアル化を検討の方は、
参考していただければと思います。
参考URL:
■英語サイトですが、指定できるパラメータ・サンプルなど載ってます。
https://www.odata.org/documentation/odata-version-2-0/uri-conventions/
補足:
PBIXファイルもUPしたかったのですが・・あげた方がわからず・・汗
もし、必要な方は個別ご連絡ください。