見出し画像

SQLとDAX関数の比較について

自己紹介・今回の内容

 佐賀県の卸・小売業で情シスを行っています。

 社内で、Power BIによるデータ可視化を利用しようと考えており、

 業務システムがSQL Serverを利用していることもあり

 Power BIのDAX関数とSQL構文の比較をまとめてみた。

1.検索条件と合計処理
 カウンタ情報より、カラー枚数の合計を計算

SQLの場合

SQLはWhere文にて条件を指定し実行

合計はSUM関数を使って合計を算出する。 

SELECT 
カラー合計 = SUM(印刷枚数)
FROM COUNTER
WHERE
印刷区分 IN (N'カラー')

DAX関数の場合

DAX関数では、条件はCALCULATE文にて条件を指定して実行

合計はSQLと同様でSUM関数にて実行

カラー合計 = 
CALCULATE(SUM('counter'[印刷枚数]), 
	      'counter'[印刷区分] IN { "カラー" })

検索条件と合計処理 SQLとDAX関数の違い

 条件文がSQLがWHERE、DAX関数がCALCULATEであること以外には、

 合計・条件指定については特に違う点はない。

2.カテゴリ(分類)集計

 処理区分(印刷・コピー・FAX)ごとの集計を抽出する。

SQLの場合

 SQL文では、GROUP BY を使用して、カテゴリごとの集計を抽出

SELECT 
処理区分,
カテゴリ計 = SUM(印刷枚数)
FROM COUNTER
WHERE
印刷区分 IN (N'白黒')

GROUP BY 処理区分

DAX関数の場合

カテゴリの合計の場合には、SUMMARIZE関数を使用し、集計するカテゴリを選択して計算

カテゴリ計 = 
SUMMARIZE( 
	VALUES('counter'[処理区分]),
	"合計",
	CALCULATE(SUM('counter'[印刷枚数]),'counter'[印刷区分] in {"白黒"})
         )

カテゴリ(分類)集計 SQLとDAX関数の相違

構文自体は全く異なるように見えるが、分解してみると、条件・合計は、1の関数に、SQLはGROUP BY、DAX関数はSUMMARIZEをしようして集計なので、

累計の場合(月累計)

SQLの場合

 2のGROUP BYで集計した、結果を一時テーブルに保存し、内部結合にて

 日付を>=にて結合を行い、SUMにて集計する。

SELECT 
日付 = DAY(日付),
印刷枚数 = SUM(印刷枚数)
INTO #TEST 
FROM COUNTER
WHERE 日付 >='2021/05/01'
AND 印刷区分 = N'白黒'
GROUP BY 日付

SELECT A.日付
     ,A.印刷枚数
     ,累計枚数 = SUM(B.印刷枚数)
FROM   #TEST  A
INNER JOIN #TEST  B
ON  A.日付 >= B.日付
GROUP BY A.日付,A.印刷枚数
ORDER BY A.日付

DAX関数の場合

 2のSUMMARIZE関数ではなく、TOTALMTD関数に変更し、参照する日付を選択すれば累計が計算される。

fee_mono_mom =   TOTALMTD(CALCULATE(       SUM('counter'[印刷枚数]), 'counter'[印刷区分] IN { "白黒" }),          'calender'[date])
RETURN MONO_MONTHCUM 

累計(月累計) SQLとDAX関数の相違

 DAX関数については、2のカテゴリ集計(合計)のSUMMARIZE関数からTOTALMTD関数に変更するだけで比較的容易に計算することが可能。

SQLに関しては、内部結合(INNER JOIN)の部分で工夫が必要になる。


まとめ

 Power BIを導入して、簡易な帳票・グラフについては、システム部門以外で行ってもらうためにも、少しずつでもいいので勉強していく。


画像1


この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!