- Power BI Desktop による個⼈的なデータ解析・ダッシュボード作成は無料 - Power BI Service でダッシュボードを全インターネットに公開するのも無料 - しかし、組織内に閉じたダッシュボードの公開をしようとするとライセンスが必要 - Power BI Pro → 1,090 円/ユーザー/⽉ - 従業員 1,000 ⼈全員に提供しようと思ったら相当な出費になってしまう § SaaS 利⽤はあきらめてセルフホストでダッシュボードを構築する⽅針に転換
Azure Data Lake にアップロードする - Azure Data Lake の更新をトリガとして Azure Synapse Analytics でデータを集計し、 ダッシュボードのデータソースとなる DB を更新する § Data Lake 内のデータ形式は圧縮 JSONL - JSONL → ⾏区切りの JSON オブジェクトの集合 - 集計⽉ごとに GZIP 圧縮した JSONL ファイルを Data Lake に格納する
のサーバレスプラン - 固定料⾦なし、クエリした分だけで課⾦される DB - とても魅⼒的だが、ユーザーがインタラクティブにクエリを⾏う ダッシュボードには不向きなので採⽤せず § Azure SQL Database Single Database - DTU という性能指標で料⾦が変わる MS SQL - US West 2: Basic プラン B (5 DTU) → 548 円/⽉〜 § Azure Database for PostgreSQL - Grafana の管理 DB をデータソース DB にも流⽤ - US West 2: 1 vCore / 2 GiB → 2,279円/⽉〜
SUM(CASE chargeType WHEN 'Usage' THEN quantity ELSE 0 END) AS quantity, SUM(CASE chargeType WHEN 'Usage' THEN unitPrice*quantity ELSE 0 END) AS referenceCost, SUM(CASE chargeType WHEN 'Purchase' THEN cost ELSE 0 END) AS purchaseCost, SUM(CASE chargeType WHEN 'Usage' THEN cost ELSE 0 END) AS usageCost FROM OPENROWSET( BULK 'banadev-billing/*.json.gz', DATA_SOURCE = 'banadxdashboard1', FORMAT='CSV', FIELDTERMINATOR='0x0b', FIELDQUOTE='0x0b' ) WITH (doc NVARCHAR(MAX)) AS rows CROSS APPLY OPENJSON(doc) WITH ( chargeType NVARCHAR(MAX) '$.properties.chargeType', period DATE '$.properties.billingPeriodStartDate', date DATE '$.properties.date', subscription NVARCHAR(MAX) '$.properties.subscriptionName', product NVARCHAR(MAX) '$.properties.product', unitPrice DECIMAL(28, 10) '$.properties.unitPrice', quantity DECIMAL(28, 10) '$.properties.quantity', cost DECIMAL(28, 10) '$.properties.cost' ) GROUP BY period, date, subscription, product ORDER BY period, date, subscription, product このSQLクエリの意味 Data Lake banadxdashboard1 の banadev-billing/*.json.gz ファイルに含ま れる1件1件の JSON オブジェクトから必要 な要素を取り出してテーブルに変換する