总结SSAS中的多个MDX查询

时间:2011-07-27 22:11:00

标签: sql-server sql-server-2005 reporting-services ssas mdx

我需要汇总多个查询的结果。

我遇到的挑战是每个查询都定义了成员(计算日期范围)

我需要能够跨多个mdx查询组合/总结这些成员

WITH Member [M1] AS Sum(DateRange, Measure)

SELECT [M1]

FROM [Cube]

WHERE {[x].&[y]}



WITH Member [M1] AS Sum(Different DateRange, Measure)

SELECT [M1]

FROM [Cube]

WHERE {[z].&[q]}

每个查询根据不同的条件选择相同的成员。

我能想到这样做的唯一方法是UNION而不是SUM([M1]),但不知道MDX中的可行性如何

UPDATE - 在回复icCube问题时,这就是为什么我需要为每个查询都有一个单独的WHERE子句:

我需要为每个查询单独的WHERE部分,因为我需要聚合不同切片的结果。我的切片由n个维度定义。我根据用户配置输入动态地为每个切片发出mdx查询(并动态构造我的WHERE子句以按用户首选项进行过滤)。允许用户配置重叠切片(这些是我需要总结的部分)。然后我需要将这些切片行计数组合成一个报告。我正在做的方法是将带有MDX查询的字符串传递给报表。但是因为我想不出一种方法来将多个查询放入一个可执行字符串中,(我也不知道会有多少查询)这种方法不再可行(除非有某种方法可以将它们联合起来。 / p>

我现在想到实现这一目标的唯一方法是使用额外的批处理步骤来迭代所有查询,将它们(使用Adomd.net)处理为 staging table,然后我可以使用SQL sum(..)将它们聚合到一个报告中。这种方法的最大缺点是需要维护额外的系统,以及报告中的数据过时的可能性。

3 个答案:

答案 0 :(得分:3)

不确定这是否是您正在寻找的

WITH Member [M1] AS Sum(Different DateRange, ([z].&[q],Measure) ) + 
                    Sum(DateRange, ([x].&[y],Measure))

SELECT [M1]

FROM [Cube]

WITH Member [M1] AS Sum(Different DateRange * {[z].&[q]}, Measure ) + 
                    Sum(DateRange * {[x].&[y]}, Measure)

SELECT [M1]

FROM [Cube]

我不知道在MDX中添加两个选择的结果...

答案 1 :(得分:0)

我相信你需要Aggregate()而不是总和。

答案 2 :(得分:0)

您可以通过以下方式使用SubCubes在MDX中实现UNION行为:

Select
{...} On Columns,
{...} On Rows
From (
     Select 
            {
              {Dimension1.Level.Members * Dimension2.&[1] * Dimension3.&[2]},
              {Dimension1.&[X] * Dimension2.Members * Dimension3.&[5]}  
            } On Columns
     From [Cube]
     )