モチベーション
- 任意のDBアクセスや機械学習、計算処理などをAPIにして、PowerBIからAPIをたたけば、ダッシュボードと複雑な計算処理を組み合わせることができ、色々なことがローコードで実現できるのではないか?
- PowerBIのカスタマイズ性を活かしつつ、計算処理はAPI側に任せることで、柔軟性・高機能のダッシュボードを作成できるのではないか?
- 社内政治的にローカルPCからDBサーバーへの直接接続が禁止されているため、APIサーバー(APIには認証機能を搭載することが前提)を介することで1つの解決策を提供できるのではないか?
この記事の前提
- 開発者はPython環境、PowerBI環境をすでに入手していること。
- PowerBIからAPIサーバを介してデータにアクセスする。
- APIサーバーはFastAPIで作る。
- FastAPIやPowerBIの詳しい使い方は解説しない。あくまで連携の手順のみ。
※API開発はFastAPIでなくても良いが、業務で使い始めた都合でここではFastAPIを使っている。
OS・Python・ライブラリのバージョン情報
Windows 11
python==3.6.12
fastapi==0.75.0
uvicorn==0.16.0
pydantic==1.9.0
FastAPIのコード
- 3レコードが保持されたDBにアクセスする例。
main.py
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List
class Item(BaseModel):
name: str
description: Optional[str] = None
price: float
tax: Optional[float] = None
app = FastAPI()
@app.get("/items/", response_model=List[Item])
async def get_item():
item = [
{
"name": "foo",
"description": None,
"price": 458,
"tax": 0.1,
},
{
"name": "paa",
"description": None,
"price": 781,
"tax": 0.1,
},
{
"name": "pee",
"description": None,
"price": 412,
"tax": 0.05,
}
]
return item
Fast APIの実行
-
main.pyのあるディレクトリに移動。
-
ターミナルから以下を実行。
uvicorn main:app --reload
PowerBIでの接続手順
-
PowerBIを起動。
-
「データを取得」⇒「Web」と選択。
-
ここまでできることを確認できたら、後は普段通りにPowerBIを操作していけばOK。
今後どんなことに活用してみたいか
- API内部に機械学習の学習処理、推論処理を入れて、PowerBIに結果を出力して可視化する。
- ローカルでは処理に時間がかかる計算を高性能のAPIサーバーで計算させる。
- APIに認証を入れてDBへのアクセス権限を管理する(もはやPowerBI関係ない)。
次の予定
- PowerBIからAPIへPOSTする方法を調べる。