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" 列は、"=PATH(EmployeeKey, ParentEmployeeKey)" のように定義されています。
|
|||||||||||||||||||||||||||||||||||||||||
特定のパスにおいて、現在のレベルから最上位の親にいたるまでのレベル数を返します。 次の例の PathLength 列は、"=PATHLENGTH([Path])" のように定義されています。この関数の動作をわかりやすく示すために、Path() 関数の例で用いたすべてのデータを記載しました。
|
|||||||||||||||||||||||||||||||||||||||||
PATH() と同様の結果から、指定した位置にある項目を返します。位置は左から右に数えた結果に基づきます。 次の例の "PathItem - 左から 4 番目" 列は、"=PATHITEM([Path], 4)" のように定義されています。パス文字列の左から 4 番目の位置にある EmployeeKey が返されます。サンプル データは Path() の例で使用したものと同じです。
|
|||||||||||||||||||||||||||||||||||||||||
PATH() と同様の関数の結果から、指定した位置 (position) にある項目を返します。位置は右から左に数えた結果に基づきます。 次の例の "PathItemReverse - 右から 3 番目" 列は、"=PATHITEMREVERSE([Path], 3)" のように定義されています。パス文字列の右から 3 番目の位置にある EmployeeKey が返されます。サンプル データは Path() の例で使用したものと同じです。
|
|||||||||||||||||||||||||||||||||||||||||
指定された item が指定された path に存在する場合に TRUE を返します。 次の例の "PathContains - 従業員 162" 列は、"=PATHCONTAINS([Path], "162")" のように定義されています。指定されたパスに従業員 162 が含まれている場合、TRUE が返されます。 この例では、上の Path() 関数の例で得た結果を使用しています。
|
注意 |
---|
SQL Server 2012 Analysis Services の xVelocity メモリ内分析エンジン (VertiPaq) では、親子階層の定義がサポートされません。ただし、DAX 言語に用意されている一連の関数を使用すると、親子階層を詳しく調査したり、これらの階層を式の中で使用することができます。 |