MDX中的十大记录

时间:2015-02-19 10:33:49

标签: sql ssas 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

2 个答案:

答案 0 :(得分:1)

这与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]

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

答案 1 :(得分:0)

根据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]