LoginSignup
26
22

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-01-23

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

その他

26
22
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
22