Power BI service の XMLA Endpoint Read / Write をちょろっと試す

現時点では Preview ではあるけれども、 Power BI Service で XMLA Read / Write がサポートされたわけです。[Power BI 勉強会 #17](https://powerbi.connpass.com/event/174039/) でデモなどをしたんだけど、SSMS 使わなかったんよね。

- [Announcing read/write XMLA endpoints in Power BI Premium public preview | Microsoft Power BI Blog | Microsoft Power BI](https://powerbi.microsoft.com/en-us/blog/announcing-read-write-xmla-endpoints-in-power-bi-premium-public-preview/)

このあたりの話は Christian をフォローしておくとよいです。
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Announcing read/write XMLA endpoints in Power BI Premium public preview <a href="https://t.co/2wULJzG4og">https://t.co/2wULJzG4og</a> via <a href="https://twitter.com/MSPowerBI?ref_src=twsrc%5Etfw">@MSPowerBI</a></p>&mdash; Christian Wade (@_christianWade) <a href="https://twitter.com/_christianWade/status/1243263181163622401?ref_src=twsrc%5Etfw">March 26, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Power BI Desktop もサポートされるようなデモもやっていたので興味ある人は見ておいた方がよい。

- [Power BI Premium as a superset of Analysis Services: the XMLA endpoint | Community Webinars - YouTube](https://www.youtube.com/watch?v=Gjnu1yVCby4)


# 環境
Power BI Premium キャパシティが割り当てられた Power BI ワークスペースが必要。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/44c3ea5b-cb64-f733-ccba-2314a1ac8da1.png)

ちょっとしたお試しとしてはPower BI Premium の購入はハードルが高いかも。時間課金の [Power BI Embedded](https://azure.microsoft.com/ja-jp/services/power-bi-embedded/) でも利用可能なのでこちらで試してもよい。よわよわスペックではあるけれども、A1 でも動作するはずです。

# 設定
[Admin portal] - [Capacity settings] - (対象のキャパシティ) - [Workloads] - [XMLA Endpoint]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/3b6cca0d-3863-90ca-1654-a53cc7d63c8e.png)

# 確認
[SQL Server Management Studio(SSMS) | Microsoft Docs](https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms) で接続。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/ad3e2939-ff3c-b60c-200c-52b0280a0956.png)
Server type は "Analysis Services"、Server Name は "powerbi://api.powerbi.com/v1.0/myorg/{ワークスペース名}" って感じになるけれど、リダイレクトされて内部の Analysis Server に接続されるっぽい。

ワークスペースの [Settings] - [Premium] で確認/コピーとか
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/b35ccf4c-06ba-a897-fe94-6748f18d4133.png)
Server property 見るとこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/50a11e48-a6a4-189e-1cde-8253ec1705d1.png)

# クエリを発行して操作
SSMSを使って XMLA Endpoint に クエリを発行する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/cd667f6c-18fc-4b29-5927-c9b45220438b.png)

## Tabular Model Scripting Language (TMSL)
- [Tabular Model Scripting Language (TMSL) Reference | Microsoft Docs](https://docs.microsoft.com/en-us/analysis-services/tmsl/tabular-model-scripting-language-tmsl-reference)

### Create command (TMSL) 
- [Create command (TMSL) | Microsoft Docs](https://docs.microsoft.com/en-us/analysis-services/tmsl/create-command-tmsl)

```json:XMLAQuery(TMSL)
{
  "create": {
    "database": {
      "name": "Demo1",
      "compatibilityLevel": 1500,
      "model": {
        "tables": [
          {
            "name": "Table1",
            "columns": [
              {
                "name": "Column1",
                "dataType": "string",
                "sourceColumn": "Column1"
              }
            ],
            "partitions": [
              {
                "name": "Partition_Table1",
                "source": {
                  "type": "m",
                  "expression": [
                    "let\r",
                    "    Source = #table(\r",
                    "        type table [Column1 = text],\r",
                    "        {\r",
                    "            {\"Apple\"}, {\"Gorilla\"}, {\"Rappa\"}\r",
                    "        }\r",
                    "    )\r",
                    "in\r",
                    "    Source"
                  ]
                }
              }
            ]
          }
        ]
      }
    }
  }
}
```
Power BI データモデル は配置されているので、レポートを作成することは可能。ただ、データがまだない状態。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/491a1579-87c5-bea5-b921-d03a7d62a672.png)
Table に紐づく Partition の Status は "NoData"
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/dcdd8416-ec84-0d52-1e87-92e61ab9418f.png)


### Refresh command (TMSL)
- [Refresh command (TMSL) | Microsoft Docs](https://docs.microsoft.com/en-us/analysis-services/tmsl/refresh-command-tmsl)

Refresh command で各オブジェクト Database, Table, Partition へ適用することができて、ここでは Database オブジェクトに対して実行する。Refresh type に "automatic" を選択することで必要なだけの Refresh を期待した。Status が "Ready" 以外の Partition にも適用されるので。

```json:XMLAQuery(TMSL)
{
  "refresh": {
    "type": "automatic",
    "objects": [
      {
        "database": "Demo1"
      }
    ]
  }
}
```

Table に紐づく Partition の Status は "Ready" に
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/37aff329-045f-b448-bf58-1b2b52cfa932.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/e98f8598-ca91-db39-128e-adb547da1397.png)

### Delete command (TMSL)
- [Delete command (TMSL) | Microsoft Docs](https://docs.microsoft.com/en-us/analysis-services/tmsl/delete-command-tmsl)

Damo1 データセット こと "Demo1" データベース の削除

```json:XMLAQuery(TMSL)
{
  "delete": {
    "object": {
      "database": "Demo1"
    }
  }
}
```

# 思ったこと🙄
まだまだ触れていかないとだなと思った。
SSMS で試すことにはメリットがあって、TMSL ってどんな感じに記述するんだ🙄ってことなんだけど、いろんなところでスクリプトを出力してくれるので、それ見て感じていけばよいだろうと。

# その他
- [Power BI 勉強会 - connpass](https://powerbi.connpass.com/)
- [Power BI Desktop を使い始めるには](http://qiita.com/PowerBIxyz/items/6c4735cb5b5712e70981)
- [Excel で Power Query を使い始めるには](http://qiita.com/PowerBIxyz/items/52e563037b855a099ca9)