PowerBI DesktopとAzure ApplicationInsights

#はじめに
Advent Calendar 2016、17日目の投稿。
そしてその内容は・・・またPowerBI。

今回はPowerBI Desktop(以下PowerBI)にAzureのApplicationInsights(以下AppInsights)の
データを取り込んで表示する方法について簡単に説明します。

##PowerBIとは
前回の記事をご参照ください。
[PowerBI DesktopとAzure DocumentDB](http://qiita.com/nskhara/items/3165ec5c240af7d5a3be)

##Azure ApplicationInsightsとは
APM(Application Performance Monitor)です。
特色としてはVisualStudioとの親和性があったり、色んな情報が
Azure管理ポータル上で見れるよ、という点ですかね。
[ApplicationInsightsへのリンク](https://azure.microsoft.com/ja-jp/services/application-insights/)

#さて
AppInsightsにはパフォーマンスカウンターを送っています。
今回はAppInsightsからそのパフォーマンスカウンターをPowerBIに取り込むまでをやってみましょう。

AppInsightsはWebAPIを提供していますが、PowerBIはそのようなデータソースも
取り込めるようになっています。

PowerBIを開き、「データを取得」を開いて「その他」の「空のクエリ」を
選択しましょう。
![WS000007.JPG](https://qiita-image-store.s3.amazonaws.com/0/150006/142f8086-4d40-b044-6571-80bd943c303e.jpeg)

クエリ編集画面が開きますので、そこから「詳細エディター」を開きます。
![WS000008.JPG](https://qiita-image-store.s3.amazonaws.com/0/150006/d8d850a3-11fe-d281-24c8-fd9a5a33c8e7.jpeg)

クエリを入力する画面が開きました。

![WS000009.JPG](https://qiita-image-store.s3.amazonaws.com/0/150006/ecf05b4b-4f39-b4cb-2d53-17e3bfcc84eb.jpeg)

あとはAppInsightsにアクセスしてパフォーマンスカウンターを取得するクエリを
貼り付ければOKです。
次はそのクエリをどうやって取得するのかをご紹介しましょう。

#AppInsightsからPowerBI用のクエリを取得する
Azure管理ポータルからAppInsightsを開きましょう。
上の方に「Analytics」というボタンがあるので、それを押します。

![WS000000.JPG](https://qiita-image-store.s3.amazonaws.com/0/150006/91b5a15a-c986-5eda-d531-574246776b59.jpeg)

そうするとAnalytics ExplorerというAppInsights用のクエリ画面が開きます。
まずは「Home Page」タブの右にある「＋」ボタンを押して新しいクエリ画面を開きましょう。

![WS000001.JPG](https://qiita-image-store.s3.amazonaws.com/0/150006/42fbb166-96a5-ab6d-4683-4c7740b1f753.jpeg)

ここにクエリを入力すればAppInsightsにある好きなデータを取得することができます。
左ペインに取得できる項目の一覧があるので「performanceCounters」をダブルクリックします。

![WS000002.JPG](https://qiita-image-store.s3.amazonaws.com/0/150006/c6d26753-7066-8788-bca6-24c50080dd49.jpeg)

クエリエディタに「performanceCounters」が挿入されました。

![WS000003.JPG](https://qiita-image-store.s3.amazonaws.com/0/150006/b26eda1c-b135-df5a-6c57-d7c7ab843397.jpeg)

今回はとりあえず直近1時間のデータを取得するようにしましょう。
右上にある「GO」ボタンを押してデータが取得できることを確認します。
※クエリ構文の詳細については省きます。

![WS000004.JPG](https://qiita-image-store.s3.amazonaws.com/0/150006/1f5ec234-39e8-4e9e-4b66-679a3bed52ae.jpeg)

クエリが大丈夫なことは確認できたので次は「Export」メニューを開いてください。

![WS000005.JPG](https://qiita-image-store.s3.amazonaws.com/0/150006/0ff46036-1cfe-bb97-66cb-28ca795b2f80.jpeg)

そうするとその中に「Power BI Query (M)」というメニューがあります。
それを押すことによりPowerBI用のクエリがダウンロードできます。

![WS000006.JPG](https://qiita-image-store.s3.amazonaws.com/0/150006/65f0897a-13f8-faf5-3454-39af7eb7800a.jpeg)

ダウンロードしたら下記クエリテキストが取得できますので、このクエリをPowerBIに適用しましょう。

```
/*
The exported Power Query Formula Language (M Language ) can be used with Power Query in Excel 
and Power BI Desktop. 
For Power BI Desktop follow the instructions below: 
    1) Download Power BI Desktop from https://powerbi.microsoft.com/desktop/ 
    2) In Power BI Desktop select: 'Get Data' -> 'Blank Query'->'Advanced Query Editor' 
    3) Paste the M Language script into the Advanced Query Editor and select 'Done'
*/

let AnalyticsQuery =
let Source = Json.Document(Web.Contents("https://management.azure.com/subscriptions/{・・・省略・・・}/api/query?api-version=2014-12-01-preview", 
[Query=[#"csl"="performanceCounters | where timestamp >= ago(1h) ",#"x-ms-app"="AAPBI"],Timeout=#duration(0,0,4,0)])),
TypeMap = #table(
        { "DataType", "Type" }, 
        { 
            { "Double",   Double.Type },
            { "Int64",    Int64.Type },
            { "Int32",    Int32.Type },
            { "Int16",    Int16.Type },
            { "UInt64",   Number.Type },
            { "UInt32",   Number.Type },
            { "UInt16",   Number.Type },
            { "Byte",     Byte.Type },
            { "Single",   Single.Type },
            { "Decimal",  Decimal.Type },
            { "TimeSpan", Duration.Type },
            { "DateTime", DateTimeZone.Type },
            { "String",   Text.Type },
            { "Boolean",  Logical.Type },
            { "SByte",    Logical.Type }
        }),
DataTable = Source[Tables]{0},
Columns = Table.FromRecords(DataTable[Columns]),
ColumnsWithType = Table.Join(Columns, {"DataType"}, TypeMap , {"DataType"}),
Rows = Table.FromRows(DataTable[Rows], Columns[ColumnName]),
Table = Table.TransformColumnTypes(Rows, Table.ToList(ColumnsWithType, (c) => {c{0}, c{3}}))
in
Table
in AnalyticsQuery
```

#取得したクエリをPowerBIに適用する
取得したクエリを先ほどのPowerBIの詳細エディターに貼り付けて「完了」ボタンを押します。

![WS000010.JPG](https://qiita-image-store.s3.amazonaws.com/0/150006/78f75d29-2e94-fa6f-8396-3406567e8004.jpeg)

そうすると「接続方法を指定してください。」という警告メッセージが出ますので、隣にある「資格情報の編集」ボタンを
押して資格情報を入力していきます。

![WS000011.JPG](https://qiita-image-store.s3.amazonaws.com/0/150006/638a4d53-35f2-b796-ba06-097842c9b1e3.jpeg)

「組織アカウント」タブを開き、「サインイン」ボタンを押してください。

![WS000014.JPG](https://qiita-image-store.s3.amazonaws.com/0/150006/2f3810eb-9e1d-5883-ed8e-5f87a50d60d5.jpeg)

そうするとOffice365のログイン画面が開きますので、Azure管理ポータルにログインする時と同じMSアカウント情報を入力して
ログインしましょう。
ちなみに「組織アカウント」と言っていますが、この画面で出てくる「個人のアカウント」を選択しても問題ありません。

![WS000015.JPG](https://qiita-image-store.s3.amazonaws.com/0/150006/2e112eb3-dc3f-4a08-5831-e7aea015c901.jpeg)

無事サインインできると元の画面に戻るので「接続」ボタンを押します。

![WS000016.JPG](https://qiita-image-store.s3.amazonaws.com/0/150006/b95ca9b8-bba6-c45d-432b-904509b601b1.jpeg)

データが取得できましたね。この状態で「閉じて適用」を押せば後はいつもの通りです。

![WS000018.JPG](https://qiita-image-store.s3.amazonaws.com/0/150006/ffce4916-1bbf-1c6b-6ef9-6bebfcc38217.jpeg)

右側にパフォーマンスカウンターの項目があるので、後は好きな分析をやっていっていただければ問題ありません。

![WS000019.JPG](https://qiita-image-store.s3.amazonaws.com/0/150006/0cf9e396-efeb-b084-e308-3104fdc055ef.jpeg)

#おわりに

いかがでしたでしょうか。割と簡単にPowerBIでAppInsightsのデータが見れますよね。

特にAppInsightsを複数持っている場合でも、クエリを追加していけば一つのレポートに表示できるので、
そういう人にとっても大変有用なのではないでしょうか。
ぜひご活用ください。

ではでは。