MDX 查询中的 PARALLELPERIOD 错误

PARALLELPERIOD error in MDX Query

我使用下面提到的查询 PARALLAELPERIOD

WITH 
  MEMBER [MEASURES].[DATO AR] AS 
    IIF
    (
      [Measures].[Dato] = 'AT'
     ,NULL
     ,[Measures].[Dato]
    ) 
  MEMBER [MEASURES].[Indice] AS 
    IIF
    (
      ([Tempo].[Mese Anno].[Dic-2011],[Measures].[Dato]) = 0
     ,null
     ,
        [Measures].[DATO AR] / ([Tempo].[Mese Anno].[Dic-2011],[Measures].[Dato])
      * 100
    ) 
SELECT 
  NON EMPTY 
    {
      [MEASURES].[DATO AR]
     ,[MEASURES].[Indice]
    } ON 0
 ,ParallelPeriod
  (
    [Tempo].[Mese Anno].CurrentMember.UniqueName
   ,3
   ,Filter
    (
      Order
      (
        NonEmpty([Tempo].[Periodo].[Mese Anno])
       ,[Tempo].[Periodo].CurrentMember.MemberValue
       ,Bdesc
      )
     ,Instr
      (
        [Tempo].[Periodo].[Mese Anno].CurrentMember.Name
       ,'Dic'
      )
    )
  ) ON 1
FROM AGRO;

我收到如下错误:

The PARALLELPERIOD function expects a member expression for the 3 argument. A tuple set expression was used.

下图显示了正在使用的维度:

可用数据截止到 2016 年 4 月。我只想获取 12 月的最后三个值,即 Dic-2015、Dic-2014 和 Dic-2013

当我们到达 2016 年 12 月时,应该是 Dic-2016、Dic-2015 和 Dic-2014。

有人可以建议更改上述查询吗?

在 AdvWrks 中,我可以做到这一点 - 使用您漂亮的小过滤器创意:

SELECT 
  {} ON 0
 ,Filter
  (
    [Date].[Calendar].[Month]
   ,Instr
    (
      [Date].[Calendar].CurrentMember.Name
     ,'December'
    )
  ) ON 1
FROM [Adventure Works];

这个returns每年12月的一套

所以我们现在可以使用 Tail 来获取最后 3 个:

SELECT 
  {} ON 0
 ,Tail
  (
    Filter
    (
      [Date].[Calendar].[Month]
     ,Instr
      (
        [Date].[Calendar].CurrentMember.Name
       ,'December'
      )
    )
   ,3
  ) ON 1
FROM [Adventure Works];

上面returns这个:

如果我只想要最后3个with数据最好使用NonEmpty函数:

SELECT 
  {} ON 0
 ,Tail
  (
    Filter
    (
      NonEmpty([Date].[Calendar].[Month])
     ,Instr
      (
        [Date].[Calendar].CurrentMember.Name
       ,'December'
      )
    )
   ,3
  ) ON 1
FROM [Adventure Works];

这会将 12 月 3 日更改为以下内容:

为了让事情更具可读性,我更喜欢在 WITH 子句中使用这种逻辑。