PowerBI

DAX Query を記述して メジャーを試す

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
EVALUATE
    <table>  // テーブル名 もしくは テーブル式

[ORDER BY
    <expression> [{ ASC | DESC }]}[, …] ] // 列 もしくは 式 

EVALUATE で得られる結果は テーブル のみなので、テーブル名 もしくは テーブルを返す式を記述

テーブルを指定

例1
EVALUATE
    '商品'
例1:SQLで表現すると
SELECT * FROM '商品'

得られる結果にソートを指定する場合 ORDER BY で指定

例2
EVALUATE
    '商品'
ORDER BY
    '商品'[区分ID] ASC    
例2:SQLで表現
SELECT * FROM '商品' ORDER BY '商品'[区分ID] ASC

テーブル式

テーブルを返す式を記述する。結果にテーブルを返す関数
SELECTCOLUMNS
ADDCOLUMS
SUMMARIZE
SUMMARIZECOLUMNS
FILTER
VALUES
で、ひとまずこと足りるかと。よくつかう関数なのでおのずと覚えてしまいますけど。

列の選択

例3:列の選択
EVALUATE
    SELECTCOLUMNS(
        '商品'
      , "商品ID", '商品'[商品ID]
      , "商品名", '商品'[商品名]
    )
例3:SQLで表現
SELECT
    '商品'[商品ID] as "商品ID"
  , '商品'[商品名] as "商品名" 
FROM
    '商品'

列の追加

例4:列の追加
EVALUATE
    ADDCOLUMNS(
        '商品'
      , "区分ID-区分名", '商品'[区分ID] & "-" & '商品'[区分名]
    )
例4:SQLで表現
SELECT
    *
  , '商品'[区分ID] & "-" & '商品'[区分名] as "区分ID-区分名" 
FROM
    '商品'

集計

例5:集計
EVALUATE
    SUMMARIZE(
        '商品', '商品'[区分ID]
      , "Count of 商品", COUNTROWS( '商品' )        
    )
例5:SQLで表現
SELECT
    '商品'[区分ID]
   , COUNT(*) as "Count of 商品"
FROM
    '商品'
GROUP BY
    '商品'[区分ID]

条件

例6:条件
EVALUATE
    FILTER(
        '商品',
        '商品'[区分ID] = 1
    )
例6:SQLで表現
SELECT
    *
FROM
    '商品'
WHERE
    '商品'[区分ID] = 1

DEFINE

セッション内で利用できる メジャー(measure) と変数(named variable)は DEFINE 句 で定義

MEASURE

構文:MEASURE
MEASURE
    <tableName>[measureName] = <expression>

VAR

構文: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 使うとよいですよ。
image.png

その他