MDX Tail 函数用于从源数据的底部选择所需数量的记录。例如,如果您想查找表现最差的 10 个产品。或者,查找销售额最低的 10 个区域,或计算最低工资,请将此 Tail 函数与 Order 函数一起使用。
MDX Tail 函数语法
Tail 函数只允许两个参数。Multidimensional Expression 中此 TAIL 函数的基本语法如下所示
TAIL (Set_Expression, Count)
- Set_Expression:您想检查的任何 Multidimensional Expression 或属性。
- Count: 您想要检索的记录数。
如何编写 MDX TAIL 函数以从 Adventure Works Cube 的 Geography 维度中提取底部 7 个州,并且这些州的总销售额低于其他州?对于这个 TAIL 示例,我们将使用下面显示的数据。

MDX Tail 函数示例
在本例中,我们将展示如何编写 Tail 函数。以下查询将返回上述源数据中的最后七条记录,顺序与它们在源数据中的出现顺序相同。
SELECT {[Measures].[Reseller Sales Amount]} ON COLUMNS,
TAIL (
[Geography].[Geography].[State-Province]
,7
) ON ROWS
FROM [Adventure Works]
在上面的 MDX 查询中,我们在列中选择了 [Reseller Sales Amount] 度量,在行中选择了 Geography 维度中存在的 [State Province] 属性。接下来,Tail 函数将选择底部 7 条记录,而不考虑它们的测量值。
没有人会接受以上结果,因为它们是全球表现最差的州。它们仅仅是底部 7 条记录。
在 MDX Tail 函数中使用 Order 函数
在本例中,我们将向您展示,添加 MDX Order 函数时会发生什么。
SELECT {[Measures].[Reseller Sales Amount]} ON COLUMNS,
ORDER (
TAIL ([Geography].[Geography].[State-Province], 7)--Already Picked Data
,[Measures].[Reseller Sales Amount], DESC
) ON ROWS
FROM [Adventure Works]

首先,MDX Tail 函数将使用以下语句选择源数据中的最后 7 条记录。
TAIL ([Geography].[Geography].[State-Province], 7)
接下来,Tail 函数外部的 Order 函数将使用其 Reseller Sales Amount 按降序对已选择的数据进行排序。
ORDER (
TAIL ([Geography].[Geography].[State-Province], 7)
,[Measures].[Reseller Sales Amount], DESC
) ON ROWS
这意味着我们正在按降序获取源数据中的最后七条记录。
让我们更改上面的 MDX 代码。
SELECT {[Measures].[Reseller Sales Amount]} ON COLUMNS,
TAIL (
ORDER (
[Geography].[Geography].[State-Province]
,[Measures].[Reseller Sales Amount]
,BDESC
)
,7
) ON ROWS
FROM [Adventure Works]

首先,Order 函数将使用 Reseller Sales Amount 按降序对 State Province 数据进行排序。我们使用 BDESC 来打破层次结构,同时对数据进行排序。
ORDER (
[Geography].[Geography].[State-Province]
,[Measures].[Reseller Sales Amount]
,BDESC
)
接下来,Tail 函数将从已排序的数据中选择最后 7 条记录。
TAIL (
ORDER (
[Geography].[Geography].[State-Province]
,[Measures].[Reseller Sales Amount]
,BDESC
)
,7
) ON ROWS
现在,我们得到了表现最差的 7 个州,也就是表现最差的州。
注意:请在 ORDER 函数中使用适当的度量作为第二个参数。否则,您将得到错误的结果。
在 MDX Tail 函数中使用 NON EMPTY
在本例中,我们将使用 Non Empty 关键字来删除 NULL 值。
SELECT {[Measures].[Reseller Sales Amount]} ON COLUMNS,
NON EMPTY
TAIL (
ORDER (
[Geography].[Geography].[State-Province]
,[Measures].[Reseller Sales Amount]
,BDESC
)
,7
) ON ROWS
FROM [Adventure Works]
如果您观察上面的屏幕截图,我们使用的 MDX Non Empty 关键字删除了那些 Null 记录。现在,它看起来不错且易于理解 :)


评论已关闭。