Sql server 2008 改进MDX中计数操作的性能

Sql server 2008 改进MDX中计数操作的性能,sql-server-2008,ssas,mdx,Sql Server 2008,Ssas,Mdx,我有一个相当复杂的OLAP数据库,它基本上相当于一个“头”记录,以及大量属于该头的“成员” 我当前的MDX查询获取按年龄段和成员类型划分的成员的聚合和“值”。以下是查询: SELECT ( [Measures].[Member Value] ) ON COLUMNS, NON EMPTY ( { [Header].[Client Hierarchy].[Group Name].&[The Company]&[UK]&[ABC Gr

我有一个相当复杂的OLAP数据库,它基本上相当于一个“头”记录,以及大量属于该头的“成员”

我当前的MDX查询获取按年龄段和成员类型划分的成员的聚合和“值”。以下是查询:

SELECT 
(
    [Measures].[Member Value]
) 
ON COLUMNS, 
NON EMPTY  
( 
    {
       [Header].[Client Hierarchy].[Group Name].&[The Company]&[UK]&[ABC Group],
       [Header].[Client Hierarchy].[Group Name].&[The Company]&[UK]&[DEF Group]
    }
    [Header].[Member Type].[Member Type],
    [Member].[Age Band].[Age Band]
) 
ON ROWS 
FROM [Cube]
WHERE 
(
  [Header].[Another Attribute].&[Something],    
  [Header].[Created Date].&[2010-12-31T00:00:00],
  [Member].[A Boolean Attribute].&[False]
)
我正在尝试向该查询添加另一个度量值,以获取结果集每行中聚合的成员数。我使用这个经过计算的成员实现了这一点:

WITH MEMBER [Measures].[Member Count] AS
COUNT(  
    EXISTING ([Member].[Id].[Id],[Measures].[Member Value])
    ,EXCLUDEEMPTY
)
当然,也将其添加到
列中

SELECT 
(
    [Measures].[Member Value],
    [Measures].[Member Count]
) 
...
但是,这会将查询时间从最初的约1秒缩短到约1:14分钟


我认为这与我的多维数据集结构有关,而不是与查询本身有关。是否有人对我需要在多维数据集结构中更改哪些内容有任何提示,或者是否有更有效的方法来查询相同的内容?我在网上看到过一些使用
SUM
而不是count的例子,但它们更多的是一起使用
count
FILTER

一种可能的解决方案是在多维数据集中添加一个新的度量值来检索此信息

更改事实数据表,添加一个新的列,如果该列不存在,则使用[Member].[Id].[Id]。在此列上创建“不同计数”度量->[成员计数]。现在,此度量值正在检索您要查找的信息,请注意,在事实中,指向[Measures].[Member Value]的列中不能有空值


另一个版本正在使用ssas的作用域功能,不确定这是否会提高性能,但很有可能。

对于记录,我确定我已经有了一个总结记录的度量


member表有一个度量值,表示“此记录所代表的成员数”。对于我所查看的所有记录(单个成员),该度量值中有一个1。只需添加此度量值,就可以将我的数据片中的值相加。

谢谢您的建议。找到了另一个解决方案。事实上,这和我建议的类似吗?这是不是一种不送出赏金的方式;-)废话,忘了赏金了。。。当然这是你的。谢谢你的帮助。