次の方法で共有


DAX における親子階層を扱う関数について

DAX には、モデル内で親子階層として表現されたデータを管理するための 5 つの関数が用意されています。 特定の行が持つ親の系列全体、その系列における最上位の親までのレベル数、現在の行から n レベル上位の親、現在の行階層の最上位から n レベル下位の子孫、特定の親が現在の行階層の親かどうかを、これらの関数によって把握できます。

DAX の親子関数

次の表は、EmployeeKey 列と ParentEmployeeKey 列の親子階層を表したものです。以降に示した関数の例は、すべてこの親子階層を前提に説明します。

EmployeeKey

ParentEmployeeKey

112

14

112

3

14

11

3

13

3

162

3

117

162

221

162

81

162

上の表を見ると、従業員 112 には親が定義されていません。また、従業員 14 には上司 (ParentEmployeeKey) として従業員 112 が、従業員 3 には上司として従業員 14 が、従業員 11、13、および 162 には上司として従業員 3 が定義されています。 従業員 112 には上位の上司がいないことから、従業員 112 は、ここに示したすべての従業員の最上位の上司であることがわかります。また、従業員 3 の直属の上司は従業員 14 であり、従業員 11、13、162 の直属の上司は従業員 3 であることもわかります。

次の表は利用可能な関数の一覧です。関数の簡単な説明の他に、上で示したものと同じデータに基づく例が記載されています。

関数

説明/例

PATH 関数 (DAX)

現在の行からたどることができるすべての親の識別子を、最上位を起点とする区切り記号付きの文字列で返します。

次の例の "Path" 列は、"=PATH(EmployeeKey, ParentEmployeeKey)" のように定義されています。

EmployeeKey

ParentEmployeeKey

Path

112

112

14

112

112|14

3

14

112|14|3

11

3

112|14|3|11

13

3

112|14|3|13

162

3

112|14|3|162

117

162

112|14|3|162|117

221

162

112|14|3|162|221

81

162

112|14|3|162|81

PATHLENGTH 関数 (DAX)

特定のパスにおいて、現在のレベルから最上位の親にいたるまでのレベル数を返します。

次の例の PathLength 列は、"=PATHLENGTH([Path])" のように定義されています。この関数の動作をわかりやすく示すために、Path() 関数の例で用いたすべてのデータを記載しました。

EmployeeKey

ParentEmployeeKey

Path

PathLength

112

112

1

14

112

112|14

2

3

14

112|14|3

3

11

3

112|14|3|11

4

13

3

112|14|3|13

4

162

3

112|14|3|162

4

117

162

112|14|3|162|117

5

221

162

112|14|3|162|221

5

81

162

112|14|3|162|81

5

PATHITEM 関数 (DAX)

PATH() と同様の結果から、指定した位置にある項目を返します。位置は左から右に数えた結果に基づきます。

次の例の "PathItem - 左から 4 番目" 列は、"=PATHITEM([Path], 4)" のように定義されています。パス文字列の左から 4 番目の位置にある EmployeeKey が返されます。サンプル データは Path() の例で使用したものと同じです。

EmployeeKey

ParentEmployeeKey

Path

PathItem - 左から 4 番目

112

112

14

112

112|14

3

14

112|14|3

11

3

112|14|3|11

11

13

3

112|14|3|13

13

162

3

112|14|3|162

162

117

162

112|14|3|162|117

162

221

162

112|14|3|162|221

162

81

162

112|14|3|162|81

162

PATHITEMREVERSE 関数 (DAX)

PATH() と同様の関数の結果から、指定した位置 (position) にある項目を返します。位置は右から左に数えた結果に基づきます。

次の例の "PathItemReverse - 右から 3 番目" 列は、"=PATHITEMREVERSE([Path], 3)" のように定義されています。パス文字列の右から 3 番目の位置にある EmployeeKey が返されます。サンプル データは Path() の例で使用したものと同じです。

EmployeeKey

ParentEmployeeKey

Path

PathItemReverse - 右から 3 番目

112

112

14

112

112|14

3

14

112|14|3

112

11

3

112|14|3|11

14

13

3

112|14|3|13

14

162

3

112|14|3|162

14

117

162

112|14|3|162|117

3

221

162

112|14|3|162|221

3

81

162

112|14|3|162|81

3

PATHCONTAINS 関数 (DAX)

指定された item が指定された path に存在する場合に TRUE を返します。

次の例の "PathContains - 従業員 162" 列は、"=PATHCONTAINS([Path], "162")" のように定義されています。指定されたパスに従業員 162 が含まれている場合、TRUE が返されます。 この例では、上の Path() 関数の例で得た結果を使用しています。

EmployeeKey

ParentEmployeeKey

Path

PathContains - 従業員 162

112

112

FALSE

14

112

112|14

FALSE

3

14

112|14|3

FALSE

11

3

112|14|3|11

FALSE

13

3

112|14|3|13

FALSE

162

3

112|14|3|162

TRUE

117

162

112|14|3|162|117

TRUE

注記注意

SQL Server 2012 Analysis Services の xVelocity メモリ内分析エンジン (VertiPaq) では、親子階層の定義がサポートされません。ただし、DAX 言語に用意されている一連の関数を使用すると、親子階層を詳しく調査したり、これらの階層を式の中で使用することができます。