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
は使わない。
認証設定
認証は、「匿名」を用いる。ヘッダに認証情報を入れているので、他の認証情報は不要。