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
子句中使用这种逻辑。
我使用下面提到的查询 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
子句中使用这种逻辑。