首页 > 解决方案 > 从 MDX 输出返回 'n' 行

问题描述

如何使用以下示例过滤前“n”行的 MDX 输出,然后遍历下一个“n”行,依此类推。

SELECT  
{ [Measures1].members,  [Measures2].members } ON COLUMNS,  
{ [Date].members } ON ROWS  
FROM [cube]

我正在尝试这个,因为我想循环遍历 MDX 输出的每 'n' 行并将结果导出到 excel。

原始查询返回大量记录。这就是我打算遍历记录的原因。

标签: mdxolapmdx-query

解决方案


你可以这样做:首先,只取前 N 名(比如说前 5 名成员),然后取前 10 名成员,前五名除外。之后,除前 10 名外,获得前 15 名成员,依此类推...

这是前 5 个的公式,按 [SomeAmount] 排序,这是多维数据集的度量之一

SELECT  
{ [Measures].[SomeAmount] } ON COLUMNS,  
EXCEPT(TopCount([Date].members, 5,[Measures].[SomeAmount] ),TopCount([Date].members, 0,[Measures].[SomeAmount] ))  ON ROWS  
FROM [cube]

以及接下来的五个(跳过前五个):

SELECT  
{ [Measures].[SomeAmount] } ON COLUMNS,  
EXCEPT(TopCount([Date].members, 10,[Measures].[SomeAmount]  ),TopCount([Date].members, 5,[Measures].[SomeAmount]  ))  ON ROWS  
FROM [cube]

等等...

如果你有 AdventureWorks 多维数据集,你可以在那里尝试这个查询:

SELECT  
{ [Measures].[Internet Order Count] } ON COLUMNS,  
EXCEPT(TopCount([Date].[Calendar].members, 10, [Measures].[Internet Order Count]),
TopCount([Date].[Calendar].members, 5,[Measures].[Internet Order Count] ))  ON ROWS  
FROM [Adventure Works]

而且,对于您的评论中的示例,您有交叉加入:

SELECT 
{Department.members}  on COLUMNS,
EXCEPT(TopCount({[Product].[Status].members}*{Date.[Calendar].members}, 10), 
TopCount({[Product].[Status].members}*{Date.[Calendar].members}, 5)) on ROWS
FROM [Adventure Works]

你也可以在 Adventure Works 上试试这个。

以及评论中的示例:

SELECT EXCEPT(TopCount({dim1.members}*{dim2.members},10), 
TopCount({dim1.members}*{dim2.members},5)) on ROWS, 
{dim3.members} on COLUMNS 
FROM [cube]

希望能帮助到你。


推荐阅读