DAX workout - Calculation groups

Power BI Desktop でも Calculation groups の追加編集ができるようになったので。
Power BI Desktop の編集機能がプレビューなだけで、Power BI の前身ともいえる Azure Analysys Services  / SQL Server Analysis Services から利用できる機能。Premium 機能ではない。

https://learn.microsoft.com/en-us/analysis-services/tabular-models/calculation-groups

https://learn.microsoft.com/en-us/power-bi/transform-model/model-explorer

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/72ab2171-235f-de4f-9fae-d5bc5abf7814.png)
暗黙のメジャーの使用には制限が追加される。データモデル対するこの変更は、Power BI Desktop では元に戻すことができない。暗黙のメジャーに関する制限は他の機能でも起きるので、常に明示的にメジャーを定義することが優先となる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/1e7492a9-b7c5-1766-b77c-769503e72fae.png)
暗黙のメジャーはビジュアルに列を配置し計算の種類を選択する手段。Excel ピボットテーブルの計算の種類と同じような動作だ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/b6603034-d4a8-2f67-cb4b-a3b9b8f1c668.png)

# 動作を知る
使い方を参考にしたり、導入を検討する前に動作を把握しておくとよい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/65365e4e-c2e3-f7c2-a855-9df4a81026f9.png)
追加した Calculation group に計算アイテム`Always zero`をひとつ追加。
```text:Calculation item (DAX)
Always zero = 0
    // SELECTEDMEASURE()
```
ふたつのメジャーとビジュアル(テーブルとカード)、そして 計算アイテム列 `Show as` をスライサで配置
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/c430b104-33b3-8eec-ed52-b370b5d9cf8f.png)
```text:DAX Query (テーブル ビジュアル)
DEFINE
	VAR __DS0Core = 
		SUMMARIZECOLUMNS(
			ROLLUPADDISSUBTOTAL('Product'[区分名], "IsGrandTotalRowTotal"),
			"Amount", 'Sales'[Amount] // 👈 ココ
		)

	VAR __DS0PrimaryWindowed = 
		TOPN(502, __DS0Core, [IsGrandTotalRowTotal], 0, 'Product'[区分名], 1)

EVALUATE
	__DS0PrimaryWindowed

ORDER BY
	[IsGrandTotalRowTotal] DESC, 'Product'[区分名]

```
スライサで選択した計算アイテム列 `Show as` の作用により、すべてのメジャーは `Always zero` として評価される。すべてのメジャーを置き換えるような動作だ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/b2d46d7f-4542-7dde-9257-570e6f4178ef.png)
テーブル ビジュアルが発行する DAX クエリを観察すると、フィルタ テーブルが追加されているだけでメジャーを置き換えるような所作は確認できない。メジャーの定義されている式、評価される式だけを変更するという動作ということになる。
```text:DAX Query (テーブル ビジュアル)
DEFINE
	VAR __DS0FilterTable = 
		TREATAS({"Always zero"}, 'Calculation group'[Show as])

	VAR __DS0Core = 
		SUMMARIZECOLUMNS(
			ROLLUPADDISSUBTOTAL('Product'[区分名], "IsGrandTotalRowTotal"),
			__DS0FilterTable,
			"Amount", 'Sales'[Amount] // 👈 ココ
		)

	VAR __DS0PrimaryWindowed = 
		TOPN(502, __DS0Core, [IsGrandTotalRowTotal], 0, 'Product'[区分名], 1)

EVALUATE
	__DS0PrimaryWindowed

ORDER BY
	[IsGrandTotalRowTotal] DESC, 'Product'[区分名]

```
フィールド パラメータ機能でビジュアルへのメジャーの配置を変更することはできるけれども、この動作はビジュアルに依存する機能。なので、Power BI レポートでのみ利用できるということ。

https://learn.microsoft.com/en-us/power-bi/create-reports/power-bi-field-parameters

Calculation groups はデータモデルのみで機能を実現するので、Power BI レポートのみということにはならない。Analyze in Excel でも動作する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193509/6d8b4aad-6e69-bfbf-41f2-9f0483f1a3a5.png)

# 思ったこと🙄
なぜ SELECTEDMEASURE 関数を使うことになるのか。よくわかる。

https://learn.microsoft.com/en-us/dax/selectedmeasure-function-dax

動作を知っていれば難しいことはないはずだ。

# その他
https://powerbi.connpass.com/

- [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)