PowerBIではAzureのコストについても連携させることが可能なのですが、「Microsoft 顧客契約」または 「Enterprise Agreement (EA)」が対象であり、個人で利用する従量課金のAzure契約ではPowerBIから直接コストデータを取得することが現状できません。
そこで、サブスクリプションにあるコストをストレージアカウントに自動的にエクスポートする機能を利用し、PowerBIでそのストレージアカウントにエクスポートされたコストデータを取り込むことでAzureのコスト状況を可視化してみました。
Azureのコストをストレージアカウントに自動的にエクスポートさせる
サブスクリプションの設定でAzureのコストをストレージアカウントに自動的にエクスポートさせます。
・Azureポータルにログインし、「サブスクリプション」の [コスト分析] 画面から [サブスクリプションの構成] をクリックします。
![[サブスクリプションの構成] をクリック](https://bonjiri-blog.com/wp-content/uploads/visualize-cost-of-azure-using-powerbi-desktop-with-pay-as-you-go-contract-050-800x320.png)
・「エクスポート」をクリックします。

・「追加」をクリックします。

・パラメータを入力し「作成」をクリックして、エクスポート設定を作成します。

今回は日単位で情報を取得するために以下のような設定を入れ、ストレージアカウントは既存のものを利用しました。
- メトリック:実績コスト(使用量と購入額)
- エクスポートの種類:月度累計コストの日単位のエクスポート
ちなみにエクスポートの種類には以下の4種類があり、

「先月のコストに関する月単位のエクスポート」とした場合、毎月5日に自動的にエクスポートされるらしく、その日にちは固定されているようでした。

・エクスポート設定作成後、一番右の[…]より「今すぐ実行」をクリックしてエクスポートを実行させます。 ※「次の実行」に記載されている時間まで待っても構いません。
![一番右の[…]をクリック](https://bonjiri-blog.com/wp-content/uploads/visualize-cost-of-azure-using-powerbi-desktop-with-pay-as-you-go-contract-056-02-800x177.png)

※ちなみにストレージアカウントにエクスポートされるまで最長で1時間ほど時間がかかるそうですが、私が実施したときは約10分後にはエクスポートされていました。
・最後に [ストレージアカウント名] と [ストレージアカウントのアクセスキー] を取得しておきます。
PowerBIでデータを読み込む際に利用します。
![[ストレージアカウント名] と [ストレージアカウントのアクセスキー] を取得](https://bonjiri-blog.com/wp-content/uploads/visualize-cost-of-azure-using-powerbi-desktop-with-pay-as-you-go-contract-059-800x433.png)
これにてストレージアカウントへのエクスポート設定は完了です。
ストレージアカウントからPowerBI-Desktopにデータを取り込む
PowerBI-Desktopでストレージアカウントからデータを読み込ませます。
・PowerBI-Desktopを起動させます。
※起動時に以下のようなポップアップが出てきたりするので一旦、右上の [×] ボタンを押して消してしまって問題ありません。


・「データを取得」もしくは「別のソースからデータを取得する→」をクリックします。

・取得するソース元の一覧がポップアップで出てくるので「Azure」→「Azure Blob Storage」と選択して「接続」をクリックします。

・ストレージアカウント名を求められるので先ほど取得した [ストレージアカウント名] を入力します。
![[ストレージアカウント名] を入力](https://bonjiri-blog.com/wp-content/uploads/visualize-cost-of-azure-using-powerbi-desktop-with-pay-as-you-go-contract-062-800x259.png)
・続けてストレージアカウントのアクセスキーを求められるので先ほど取得した [ストレージアカウントのアクセスキー] を入力します。
![[ストレージアカウントのアクセスキー] を入力](https://bonjiri-blog.com/wp-content/uploads/visualize-cost-of-azure-using-powerbi-desktop-with-pay-as-you-go-contract-063-800x303.png)
・「ナビゲーター」画面が表示されるので読み込みたいコンテナーに [チェック]を入れ、「データの変換」をクリックします。
※この時点では「コンテナに格納されているファイル一覧」を読み込もうとしているので、「コンテナに格納されているファイルの中身」を読み込むようにするためです。
![コンテナーに [チェック]を入れ、「データの変換」をクリック](https://bonjiri-blog.com/wp-content/uploads/visualize-cost-of-azure-using-powerbi-desktop-with-pay-as-you-go-contract-064-01-800x648.png)
・「PowreQueryエディター」が表示されるので、その中にある拡張子が[.csv]の「Binary」をクリックします。

・すると以下のように「コンテナに格納されているcsvファイルの中身」を取得できるようになるので、「閉じて適用」をクリックしてPowerBIにデータを読み込ませます。

・読み込み中の表示が出てきますが、読み込み完了後に消えるので表示が消えるまで少し待ちます。

・読み込み完了後、左側にあるテーブルのアイコンをクリックするとデータが読み込まれていることが確認できます。

これでデータの取り込みは完了です。
グラフを作成して日ごとのコストを可視化してみる
最後に日ごとのコストを表示させるグラフを作成してみます。
・[積み上げ縦棒グラフ] を選択して、X軸に「date(日)」、Y軸に「costInBillingCurrency」を入れると、日ごとのコストを表示できます。
※「costInBillingCurrency」がコストを指し示す項目となっています。

また、凡例に「meterCategory」や「meterName」といった、コストを分類するような項目を入れることでコストの内訳が分かります。
「meterCategory」を凡例に入れた場合
凡例を入れると、グラフの色が凡例によって色分けされます。
「meterCategory」はAzureの大まかなカテゴリーを示す項目なので、「Storage」や「Network」、「Virtual Machine」などに分類することができます。
今回だと、カーソルを当てている赤の色分け項目は「Storage」を示しています。

「meterName」を凡例に入れた場合
「meterName」は「meterCategory」よりもさらに細かいカテゴリを示す項目です。
「Network」ではなく「Static Public IP」、「Storage」ではなく「S10 Disks」などといった形です。
今回だと、カーソルを当てている黄緑の色分け項目は「Static Public IP」を示しています。

[難点] 最新のデータに更新することが簡単にはできない
今回は日ごとにコストの情報をストレージアカウントにエクスポートする設定にしたので、
翌日にはBlobに新しいcsvデータが格納されている状態です。
ですが、上記の手順でも実施しましたが、今回PowerBIで読み込んでグラフにしたデータは「コンテナーに格納されているcsv」のデータです。
つまり「ある日付までのコスト情報がエクスポートされた1つのcsvファイルを読み込んでいる」という状況です。
なので、私が上記で紹介した手順では、翌日以降のコストデータが格納された新しいcsvファイルを読み込むためには、PowerBI側で再度csvファイルを指定して読み込まなければなりません。
これは非常にめんどくさいのでなんとか改善をしたいところです。
ですが、現状の私の知識ではこれ以上のことはできないので、この点についてはもっと良いやり方がないかを引き続き探してみたいと思います。