了解 DAX 中父子层次结构的函数

DAX 提供了五个函数,以帮助用户管理在其模型中显示为父子层次结构的数据。 使用这些函数,用户可以获取某行具有的父项的整个沿袭、多少个级别具有到顶层父项的沿袭、谁是当前行上方 n 级的父项,谁是从当前行层次结构的顶部算起的第 n 个后代,以及谁是当前行层次结构中的某个特定父项。

DAX 中的父子函数

下表包含以下各列上的父子层次结构:在所有函数示例中使用的 EmployeeKeyParentEmployeeKey

EmployeeKey

ParentEmployeeKey

112

14

112

3

14

11

3

13

3

162

3

117

162

221

162

81

162

在上表中,您可以看出员工 112 没有定义父级,员工 14 有员工 112 作为经理 (ParentEmployeeKey)、员工 3 具有员工 14 作为经理,而员工 11、13 和 162 具有员工 3 作为经理。 上述内容使我们可以看出员工 112 的上面没有经理,因此她/他就是此处所示的所有员工的最高级经理;此外,员工 3 对员工 14 负责,而员工 11、13、162 对员工 3 负责。

下表显示了可用的函数、函数的简要说明以及对上面显示的相同数据执行函数的示例。

函数

说明/示例

PATH 函数 (DAX)

返回分隔的文本以及当前行的所有父项的标识符,按最早(或最高)到最新的顺序排列。

在下面的示例列中,“Path”定义为“=PATH(EmployeeKey, ParentEmployeeKey)”

EmployeeKey

ParentEmployeeKey

路径

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)

返回给定 PATH() 中的级别数,从当前级别开始,直至最早或最顶层的父级别。

在下面的示例中,列 PathLength 定义为“=PATHLENGTH([Path])”;此示例包含 Path() 示例中的所有数据,以帮助理解此函数的工作方式。

EmployeeKey

ParentEmployeeKey

路径

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 - 4th from left 定义为“=PATHITEM([Path], 4)”;此示例使用 Path() 示例中的相同示例数据,返回 Path 字符串中从左开始的第四个位置的 EmployeKey。

EmployeeKey

ParentEmployeeKey

路径

PathItem - 4th from left

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 - 3rd from right 定义为“=PATHITEMREVERSE([Path], 3)”;此示例使用 Path() 示例中的相同示例数据,返回 Path 字符串中从右开始的第三个位置的 EmployeKey。

EmployeeKey

ParentEmployeeKey

路径

PathItemReverse - 3rd from right

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)

如果指定的 path 中存在指定的 item,则返回 TRUE。

在以下示例中,列 PathContains - employee 162 定义为“=PATHCONTAINS([Path], "162")”;如果给定路径包含员工 162,则此示例返回 TRUE。 该示例使用上述 Path() 示例中的结果。

EmployeeKey

ParentEmployeeKey

路径

PathContains - employee 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 语言提供了一组函数,使用户可以浏览父子层次结构,并在公式中使用这些层次结构。