Mdx 查询显示除今年以外所有年份的年份级别数据

Mdx Query Show Year Level Data for all years except This Year

SELECT 
  NON EMPTY 
    {[Measures].[AMOUNTCUR]} ON 0
 ,NON EMPTY 
    {
      NULL : [PRX_UE_DATE].[Calender].[Year].&[2015]
     ,[PRX_UE_DATE].[Calender].[Year].&[2017]
     ,Descendants
      (
        [PRX_UE_DATE].[Calender].[Year].&[2016]
       ,[PRX_UE_DATE].[Calender].[Month]
      )
    } ON 1
FROM [PRX_SalesDataModel];

我有一个类似上面的查询。它的工作 returns 2016 年以月为基础,其他年份以年为基础。

现在我必须在这个 mdx 上添加更多维度但是当我尝试它时

SELECT 
  NON EMPTY 
    {[Measures].[AMOUNTCUR]} ON 0
 ,NON EMPTY 
    {
      NULL : [PRX_UE_DATE].[Calender].[Year].&[2015]
     ,[PRX_UE_DATE].[Calender].[Year].&[2017]
     ,
        Descendants
        (
          [PRX_UE_DATE].[Calender].[Year].&[2016]
         ,[PRX_UE_DATE].[Calender].[Month]
        )
      * 
        [PRX UE CLIENT].[SEGMENTID].ALLMEMBERS
    } ON 1
FROM [PRX_SalesDataModel];

我收到错误成员、元组或集合必须在函数中使用相同的层次结构。

您只需要将所有日期维度内容保留在大括号中 {...}:

SELECT 
  NON EMPTY 
    {[Measures].[AMOUNTCUR]} ON 0
 ,NON EMPTY 
    {
      NULL : [PRX_UE_DATE].[Calender].[Year].&[2015]
     ,[PRX_UE_DATE].[Calender].[Year].&[2017]
     ,
        Descendants
        (
          [PRX_UE_DATE].[Calender].[Year].&[2016]
         ,[PRX_UE_DATE].[Calender].[Month]
        ) 
     }
     * [PRX UE CLIENT].[SEGMENTID].ALLMEMBERS
     ON 1
FROM [PRX_SalesDataModel];

您甚至可以通过 WITH 子句将日期内容移动到命名集中,从而使其更具可读性:

WITH SET [DatesSet] AS
    {
      NULL : [PRX_UE_DATE].[Calender].[Year].&[2015]
     ,[PRX_UE_DATE].[Calender].[Year].&[2017]
     ,
        Descendants
        (
          [PRX_UE_DATE].[Calender].[Year].&[2016]
         ,[PRX_UE_DATE].[Calender].[Month]
        ) 
     }
SELECT 
  NON EMPTY 
    {[Measures].[AMOUNTCUR]} ON 0
 ,NON EMPTY 
    [DatesSet]
     * [PRX UE CLIENT].[SEGMENTID].ALLMEMBERS
     ON 1
FROM [PRX_SalesDataModel];

你已经从@whytheq 那里得到了关于为什么会出现错误的答案。我觉得只有一个部分还没有处理。您正在手动构建年份集。取而代之的是,它可以像下面这样动态化 -

with set AllYearsExceptCurrent as
filter(
       [PRX_UE_DATE].[Calender].[Year].members as yr,
       yr.current.item(0).member_value <> Format(Now(), "yyyy")
      )