从MDX输出返回'n'行

时间:2019-03-11 08:51:21

标签: mdx olap mdx-query

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

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

我正在尝试此操作,因为我想遍历MDX输出的每'n'行并将结果导出到excel。

原始查询返回非常多的记录。这就是我计划遍历记录的原因。

1 个答案:

答案 0 :(得分:1)

您可以这样操作:首先,仅获得前N名(假设前5名成员),然后获得除前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]

希望有帮助。