ExcelのPower Queryで、SAP API Business Hubにアクセスしてデータを取得する方法
手順
Power Queryのエディタを起動
リボンにあるデータの取得ボタンより空のクエリを作成する。ODataのクエリを作るためであるが、Power Queryの標準の方法では認証方法がうまくいかない。M言語を使うため、空のクエリから作成を行う。
[操作]
Excel → データ → データの取得 → その他のデータソース から → 空のクエリ
上記操作の結果、Power Queryのエディタが起動する。
APIキーをパラメータに設定
クエリ本体とAPIキーを分離して管理したい。APIキーをパラメータに設定し、クエリからパラメータを介してAPIキーにアクセスする。APIキー用にパラメータを新規に作る。
[操作]
リボン → パラメータの管理 → 新しいパラメータ → パラメータにAPIキーを設定 → 保存
パラメータ登録画面には、名前と現在の値を入力する。名前は変数名となり、現在の値には実際のAPIキーを入力する。
| 名前 | 現在の値 |
|---|---|
APIKey |
実際のAPIキー |
クエリの編集
クエリが空の状態なので、クエリをM言語で作成する。クエリは詳細エディタより編集できる。
[操作]
ナビゲーションペイン → クエリ1 (右クリック)→ 詳細エディタ → ソースコード(M言語) → 完了
編集前
letと、inが初期状態から存在する。letで変数に値を束縛し、inで用いる。以下は、変数ソースに、空文字列を束縛し、inによってクエリの結果を使う(が、空文字列なので結果は見えない)。
let
ソース = ""
in
ソース
編集後
空文字列の代わりに、OData.Feed関数を右辺に置く。3つ引数をとり、順にサービスURI serviceUri、ヘッダheaders、オプションoptions。オプションは省略可能なので、下記にはない。サービスURIにはSAP Business Accelerator HubのAPIのURLをダブルクオーテーションで囲む。ヘッダにはAPIキーを指定する。
ヘッダは、[]で囲む。ヘッダのKeyとValueをイコール = で結ぶ。[]の中にヘッダのKeyとValueを複数指定できる。複数指定する場合にはカンマ, で区切る。APIKey = APIKey の左辺はヘッダのKeyで、右辺はヘッダのValueで先ほど登録したパラメータ。
let
ソース = OData.Feed("https://sandbox.api.sap.com/s4hanacloud/sap/opu/odata/sap/API_OPLACCTGDOCITEMCUBE_SRV/A_OperationalAcctgDocItemCube?%24inlinecount=allpages&%24top=50", [APIKey = APIKey])
in
ソース
[note]
リファレンスによると、OData.Feedの第3引数となるオプションにとることができるキーとして、ApiKeyNameがある。指定するとクエリ登録時にWeb API キーを認証情報として登録できる。この方法で登録したAPIキーは、URLに追加される。SAPのAPIではヘッダにAPIキーをセットするので、このApiKeyNameは使わない。
認証設定
認証は、「匿名」を用いる。ヘッダに認証情報を入れているので、他の認証情報は不要。