MDX 中的前 10 条记录

Top 10 records in MDX

如何从以下查询中获取前 10 条记录?此查询抛出内存不足异常。

SELECT 
  [Build].[Build ID] ON 0
 ,
    [Build].[Build Definition Name].MEMBERS*
    [Build].[Build].MEMBERS*
    [Build].[Build Start Time].MEMBERS*
    [Build Status].[Build Status] ON 1
FROM Build

根据MSDN,您使用TOPCOUNT函数获取前N个值,其定义为

TopCount(Set_Expression,Count [ ,Numeric_Expression ] )

你想要前 10 名基于什么? 在没有任何衡量标准的情况下,它会根据默认衡量标准让你进入前 10 名。

WITH SET TOP10BuildID
AS

TopCount(([Build].[Build ID].MEMBERS*
    [Build].[Build Definition Name].MEMBERS*
    [Build].[Build].MEMBERS*
    [Build].[Build Start Time].MEMBERS*
    [Build Status].[Build Status]),10)


SELECT 
  TOP10BuildID ON 0
  [Measures].SomeMeasure 
 ON 1
FROM [Build]

这与 Sourav 的答案完全相同,但在没有创建自定义集的情况下稍微简单一些:

SELECT 
  [Build].[Build ID] ON 0
 ,TopCount
  (
      [Build].[Build Definition Name].MEMBERS*
      [Build].[Build].MEMBERS*
      [Build].[Build Start Time].MEMBERS*
      [Build Status].[Build Status]
   ,10
  ) ON 1
FROM Build;

我刚刚针对 AdvWrks 进行了测试,因为我对您的错误消息很感兴趣。

此脚本在我的机器上使用热缓存需要 11 秒:

SELECT [Measures].[Internet Order Quantity] ON 0,
NON EMPTY

[Date].[Date].MEMBERS
*
[Product].[Subcategory].MEMBERS
*
[Geography].[Country].MEMBERS
*
[Customer].[Gender].MEMBERS

ON 1
FROM
[Adventure Works]

而这是瞬时的:

SELECT [Measures].[Internet Order Quantity] ON 0,
NON EMPTY
TOPCOUNT(
  [Date].[Date].MEMBERS
  *
  [Product].[Subcategory].MEMBERS
  *
  [Geography].[Country].MEMBERS
  *
  [Customer].[Gender].MEMBERS
, 10
)
ON 1
FROM
[Adventure Works]

您的错误可能是因为它试图 return 并在您的结果面板中呈现一个非常大的 table。