DAX Query で Power BI や SSAS(SQL Server Analysis Service)、PowerPivot for Excel など xVelocity メモリ内分析エンジン(xVelocity in-memory analytics engine) を使用するデータベースからデータ検索することができる。Power BI Desktop でのモデリング(メジャーやテーブルの追加など)の作業をするとき、DAX Studio で試行錯誤しながら作業することもできるし、DAX を学習することにとても役立つ。
構文など基本的なこと
構文はとてもシンプル、DEFINE / EVALUATE のふたつだけ。あとは DAX 関数を理解するだけ。
DEFINE で メジャーを定義して、EVALUATE で 評価する 簡単なおシゴト
EVALUATE
EVALUATE
<table> // テーブル名 もしくは テーブル式
[ORDER BY
<expression> [{ ASC | DESC }]}[, …] ] // 列 もしくは 式
EVALUATE で得られる結果は テーブル のみなので、テーブル名 もしくは テーブルを返す式を記述
テーブルを指定
EVALUATE
'商品'
SELECT * FROM '商品'
得られる結果にソートを指定する場合 ORDER BY で指定
EVALUATE
'商品'
ORDER BY
'商品'[区分ID] ASC
SELECT * FROM '商品' ORDER BY '商品'[区分ID] ASC
テーブル式
テーブルを返す式を記述する。結果にテーブルを返す関数
SELECTCOLUMNS
ADDCOLUMS
SUMMARIZE
SUMMARIZECOLUMNS
FILTER
VALUES
で、ひとまずこと足りるかと。よくつかう関数なのでおのずと覚えてしまいますけど。
列の選択
EVALUATE
SELECTCOLUMNS(
'商品'
, "商品ID", '商品'[商品ID]
, "商品名", '商品'[商品名]
)
SELECT
'商品'[商品ID] as "商品ID"
, '商品'[商品名] as "商品名"
FROM
'商品'
列の追加
EVALUATE
ADDCOLUMNS(
'商品'
, "区分ID-区分名", '商品'[区分ID] & "-" & '商品'[区分名]
)
SELECT
*
, '商品'[区分ID] & "-" & '商品'[区分名] as "区分ID-区分名"
FROM
'商品'
集計
EVALUATE
SUMMARIZE(
'商品', '商品'[区分ID]
, "Count of 商品", COUNTROWS( '商品' )
)
SELECT
'商品'[区分ID]
, COUNT(*) as "Count of 商品"
FROM
'商品'
GROUP BY
'商品'[区分ID]
条件
EVALUATE
FILTER(
'商品',
'商品'[区分ID] = 1
)
SELECT
*
FROM
'商品'
WHERE
'商品'[区分ID] = 1
DEFINE
セッション内で利用できる メジャー(measure) と変数(named variable)は DEFINE 句 で定義
MEASURE
MEASURE
<tableName>[measureName] = <expression>
VAR
VAR <varName> = <expression>
いくつかの例
日付テーブル
EVALUATE
ADDCOLUMNS(
CALENDARAUTO()
, "年", YEAR( [Date] )
, "年月", FORMAT( [Date], "yyyy年mm月" )
, "月", YEAR( [Date] )
, "年度"
, SWITCH(
TRUE()
, MONTH( [Date] ) < 4, YEAR( [Date] ) -1
, YEAR( [Date] )
)
)
メジャーの定義と結果
DEFINE
MEASURE
'受注'[受注額] = SUMX( '受注', [数量] * RELATED( '商品'[単価] ) )
MEASURE
'受注'[受注額 LY] = CALCULATE( [受注額], SAMEPERIODLASTYEAR( 'カレンダー'[Date] ) )
MEASURE
'受注'[受注額 vs LY] = DIVIDE( [受注額], [受注額 LY] )
EVALUATE
SUMMARIZECOLUMNS(
'カレンダー'[年月]
, "受注額", [受注額]
, "受注額 LY", [受注額 LY]
, "受注額 vs LY", [受注額 vs LY]
)
EXCEL ワークシートに出力とかでもできるので DAX Studio 使うとよいですよ。