31
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Odataフィードについて

Last updated at Posted at 2018-12-20

#ごあいさつ
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を張り付ける

1.png

ナビゲーター画面で「Customers」(顧客)を選択し、「OK」ボタンクリック。

2.png

「Customers」(顧客)が取得されている。すべての項目、レコードが取得された状態です。

image.png

続きまして、項目を絞った形での取得方法。

#項目を指定し、データ取得してみる#
ODataフィードの画面で「詳細設定」で以下項目を設定

No 説明
1 http://services.odata.org/northwind/northwind.svc/ URL
2 Customers テーブル名
3 ?$select= パラメータ
4 CustomerID,CompanyName,Country,City 取得したい項目

入力画面はこんな感じ↓

image.png

すべて入力が終わると、URLプレビュー欄がこのようになるはずです。

http://services.odata.org/northwind/northwind.svc/Customers?$select=CustomerID,CompanyName,Country,City

取得すると、以下画面のように必要な項目だけが取得された状態となります。

image.png

つづいて、条件を指定して、
「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のデータを取得する

入力画面はこんな感じ↓

image.png

入力したURLプレビューはこんな感じになるはず。

http://services.odata.org/northwind/northwind.svc/Customers?$select=CustomerID,CompanyName,Country,City&$filter=City eq 'London'

データを取得すると、項目と条件で必要なデータのみ取得されている状態になる。

image.png

さらに、顧客のデータに、受注のデータを結合して取得する方法です。
(SQLでいうところのJOINです。)

業務上はほぼ別々で取得し、リレーションを張るのでほぼ活用するイメージがないのですが、
ご紹介しておきます。

#とりあえず、受注テーブルが紐づいているかを確認してみる#

前提条件として、
odataが参照しているサービスでリレーションシップが張られていることが前提になります。(たぶん)

とりあえず、顧客と受注テーブルがリレーションシップがあるかを、確認するため、普通にデータ取得してみる

image.png

「関連テーブルの選択」をクリック

image.png

「Orders」(受注)テーブルが選択されるのがわかりますね!
リレーションがはられているのかを確認するには、ここまで十分です。

念のため、
データを取り込み、リレーションシップを確認すると、「CustomerID」で
つながっているのがわかります。
(「顧客」と「受注」がこれ自体は確認の作業なので、特段意味はないです。
また、PowerBIのリレーションシップの機能で自動判定しているのかは不明)

image.png

#受注テーブルを結合してデータを取得#

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' 条件

イメージはこんな感じ↓
image.png

URLはこんな感じ↓

http://services.odata.org/northwind/northwind.svc/Customers?$expand=Orders&$select=CustomerID,CompanyName,Country,City,Orders/OrderID&$filter=City eq 'London'

データ取得すると、ordersテーブルが結合された状態になっている。

image.png

必要な項目を展開すればOK
今回は、OrderIDしか、結合しなかったので、表示上もOrderIDしか存在しない。**

image.png

#最後に
みなさんどうでしょうか?使えそうなイメージつきましたでしょうか?

もし、Odataが利用できるサービス(Dynamics,SFDCなど)でビジュアル化を検討の方は、
参考していただければと思います。

参考URL:
■英語サイトですが、指定できるパラメータ・サンプルなど載ってます。
https://www.odata.org/documentation/odata-version-2-0/uri-conventions/

補足:
PBIXファイルもUPしたかったのですが・・あげた方がわからず・・汗
もし、必要な方は個別ご連絡ください。

31
17
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
31
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?