MDX联盟跨越不同的维度

时间:2014-04-08 19:31:51

标签: union mdx olap aggregation mondrian

我想在列上合并来自不同维度的两个MDX个查询。例如:

Number of Sales/Product Type vs. Gender and State:

      |  CA  |  OR  |  WA  |  Male  |  Female
------------------------------------------------
food  | 125  | 343  | 130  |  570   |   459
------------------------------------------------
drink | 123  | 465  | 135  |  678   |   343

州和性别是各自的维度,我想在不同的产品类型(食品,饮料)中进行一些汇总(例如销售计数)。下面是一些如何工作的想法,虽然查询无法连接,因为它们具有不同的层次结构。我可以如何处理男性和女性,例如,作为此结果中的列?

SELECT

  NON EMPTY 

  { [Store].[Store State].Members, [Gender].[Gender].Members } ON COLUMNS,

  { [Product].[Product Family].Members } ON ROWS

   FROM [Sales] 

WHERE { [Measures].[Sales Count] }

示例错误:
    MondrianEvaluationException: Expressions must have the same hierarchy

有没有办法在MDX中有效地做到这一点?如果是,我可以为每个colunm指定特定的聚合(例如,总销售的总状态数据,按利润划分的性别数据)。

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

我不知道以下是否适用于蒙德里安:

SELECT 
  {[Measures].[Internet Sales Amount]} ON 0
 ,NON EMPTY 
    {
      (
        [Customer].[Gender].[Gender].MEMBERS
       ,[Customer].[Marital Status].[(All)]
      )
     ,(
        [Customer].[Gender].[(All)]
       ,[Customer].[Marital Status].[Marital Status].MEMBERS
      )
    } ON 1
FROM [Adventure Works];

菲利普

答案 1 :(得分:0)

在MDX中,所有轴必须具有相同的维度。最好的方法是运行两个查询,并在客户端工具中将它们显示在一起。

但是,你可以做类似于@Vhteghem_Ph提出的建议:

SELECT

  NON EMPTY 

  [Store].[Store State].Members * { [Gender].[Gender].[(All Gender)] }
  +
  { [Store].[Store State].[(All Store State)] } * [Gender].[Gender].Members 
  ON COLUMNS,

  { [Product].[Product Family].Members } ON ROWS

   FROM [Sales] 

WHERE { [Measures].[Sales Count] }

请注意,此处使用的+是两个集合作为参数,是Union(set1, set2)的缩写形式。同样,Union需要两个集具有相同的维度,在这种情况下,集合的第一个维度是Store States层次结构,第二个维度是Gender层次结构。