合并两个mdx查询

时间:2014-01-23 12:43:23

标签: mdx

我有两个MDX查询。

首先查询:

SELECT {[Measures].[Actual]} ON 0,
{ DESCENDANTS([Dim Office].[Offices].[Office Level 02].ALLMEMBERS)
*DESCENDANTS([Dim Business Line].[Business Lines].[Business Line Level 02].ALLMEMBERS)
*{[Dim Date].[Fiscal Dim Date Calculations].&[Current Dim Date]}} ON 1
FROM
[BI]

第二个:

SELECT {[Measures].[Actual]} ON 0,
{ DESCENDANTS([Dim Office].[Offices].[Office Level 02].ALLMEMBERS)
*[Dim PNL].[PNL].&[6]
*{[Dim Date].[Fiscal Dim Date Calculations].&[Current Dim Date]}} ON 1
FROM
[BI]

如何获得两个查询的并集?

3 个答案:

答案 0 :(得分:1)

试试这个,

SET1 as
{ DESCENDANTS([Dim Office].[Offices].[Office Level 02].ALLMEMBERS)
*DESCENDANTS([Dim Business Line].[Business Lines].[Business Line Level 02].ALLMEMBERS)
*{[Dim Date].[Fiscal Dim Date Calculations].&[Current Dim Date]}}
SET2 as
{ DESCENDANTS([Dim Office].[Offices].[Office Level 02].ALLMEMBERS)
*[Dim PNL].[PNL].&[6]
*{[Dim Date].[Fiscal Dim Date Calculations].&[Current Dim Date]}}

SET3 as 
Union(SET1,SET2)

select  {[Measures].[Actual]} ON 0,
SET3 on 1
From [BI]

答案 1 :(得分:0)

如果您的意思是想要连接两个查询的结果,这在MDX中是不可能的。 MDX是一种强类型语言,报表必须具有与所有轴上的层次结构相同的结构。并且您的行轴不同:第一个使用[Dim Business Line].[Business Lines]作为第二个层次结构,第二个使用[Dim PNL].[PNL]作为第二个层次结构。

您应该在正在使用的客户端工具中连接两个结果。

答案 2 :(得分:0)

有一种解决方法,你可以使用T-SQL EXEC语句来做这样的事情。请检查我的答案here,以找到从SQL服务器查询AS服务器的方法。简而言之,您只需要两个临时表:

declare @tsqlquery1 varchar(1000) = ...
declare @mdxquery1 varchar(1000) = ''' SELECT {[Measures].[Actual]} ON 0,
 { DESCENDANTS([Dim Office].[Offices].[Office Level 02].ALLMEMBERS)
   *DESCENDANTS([Dim Business Line].[Business Lines].[Business Line Level 02].ALLMEMBERS)
 *{[Dim Date].[Fiscal Dim Date Calculations].&[Current Dim Date]}} ON 1
 FROM
 [BI])'''' + ''' + ')'

 -- same for second mdx
 ...
 -- add temp tables
 create table #t1 (...)
 create table #t2 (...)

 -- insert MDX results into temp table1
 insert into #t1
 EXEC(@tsqlquery1 + @mdxquery1)

 -- insert MDX results into temp table2
 insert into #t2
 EXEC(@tsqlquery2 + @mdxquery2)

 -- get union
 select * from #t1 union select * from #t2