在 MDX 中对来自不同层级的数据使用 CASE 语句
Using CASE statement in MDX for data from different hierarchy level
我创建了以下层次结构:
我写了这个特定的查询来得到我的结果:
WITH MEMBER [Ecotassa] AS
CASE
WHEN [Tempo].[Anno].CurrentMember.MemberValue = '2011' THEN '9114646'
WHEN [Tempo].[Anno].CurrentMember.MemberValue = '2012' THEN '8787551.65'
WHEN [Tempo].[Anno].CurrentMember.MemberValue = '2013' THEN '8435651.26'
WHEN [Tempo].[Anno].CurrentMember.MemberValue = '2014' THEN '8917336.39'
WHEN [Tempo].[Anno].CurrentMember.MemberValue = '2015' THEN '9465533.37'
ELSE NULL
END
SELECT
{ [Measures].[Dato], [Ecotassa] } ON COLUMNS,
{ ([Tempo].[Periodo].[Mese Anno].MEMBERS) } ON ROWS
FROM [AGRO]
WHERE ([TipoMisura].[Tipo Misura].&[1], [TipoAnno].[Tipo Anno].&[2],
[TipoPeriodo].[Tipo Periodo].&[2],
[Mercato].[Mercato].&[1],
[Aziende].[Descrizione Codice Azienda].&[100 - BASF]);
我得到的结果是:
这不是我想要的结果,对于 Ecotassa,我需要获得特定年份的结果。但是我得到 null.
不知道我的查询有误。有人可以帮我解决一下吗?
此 [Tempo].[Anno].CurrentMember
等于脚本中的 All
因此它在 CASE
语句中选择 NULL
。我也很想使用 [Tempo].[Periodo]
作为年份和日期:而不是 [Tempo].[Anno]
:
我还将 [Measures].[y]
放入 select 中,以便我们查看它是否正常工作。
所以试试这个:
WITH
MEMBER [Measures].[y] AS
EXISTS(
[Tempo].[Periodo].[Anno].members,
[Tempo].[Periodo].CurrentMember
).ITEM(0).ITEM(0).Member_Caption
MEMBER [Measures].[Ecotassa] AS
CASE
WHEN [Measures].[y] = '2011' THEN '9114646'
WHEN [Measures].[y] = '2012' THEN '8787551.65'
WHEN [Measures].[y] = '2013' THEN '8435651.26'
WHEN [Measures].[y] = '2014' THEN '8917336.39'
WHEN [Measures].[y] = '2015' THEN '9465533.37'
ELSE NULL
END
SELECT
{
[Measures].[Dato]
,[Measures].[Ecotassa]
,[Measures].[y]
} ON COLUMNS,
[Tempo].[Periodo].[Mese Anno].MEMBERS ON ROWS
FROM [AGRO]
WHERE (
[TipoMisura].[Tipo Misura].&[1]
,[TipoAnno].[Tipo Anno].&[2]
,[TipoPeriodo].[Tipo Periodo].&[2]
,[Mercato].[Mercato].&[1]
,[Aziende].[Descrizione Codice Azienda].&[100 - BASF]
);
测试脚本
这是什么return?
WITH
MEMBER [Measures].[EcotassaTEST] AS
[Tempo].[Anno].CurrentMember.MemberValue
SELECT
{ [Measures].[Dato], [EcotassaTEST] } ON COLUMNS,
{ ([Tempo].[Periodo].[Mese Anno].MEMBERS) } ON ROWS
FROM [AGRO]
WHERE ([TipoMisura].[Tipo Misura].&[1], [TipoAnno].[Tipo Anno].&[2],
[TipoPeriodo].[Tipo Periodo].&[2],
[Mercato].[Mercato].&[1],
[Aziende].[Descrizione Codice Azienda].&[100 - BASF]);
我创建了以下层次结构:
我写了这个特定的查询来得到我的结果:
WITH MEMBER [Ecotassa] AS
CASE
WHEN [Tempo].[Anno].CurrentMember.MemberValue = '2011' THEN '9114646'
WHEN [Tempo].[Anno].CurrentMember.MemberValue = '2012' THEN '8787551.65'
WHEN [Tempo].[Anno].CurrentMember.MemberValue = '2013' THEN '8435651.26'
WHEN [Tempo].[Anno].CurrentMember.MemberValue = '2014' THEN '8917336.39'
WHEN [Tempo].[Anno].CurrentMember.MemberValue = '2015' THEN '9465533.37'
ELSE NULL
END
SELECT
{ [Measures].[Dato], [Ecotassa] } ON COLUMNS,
{ ([Tempo].[Periodo].[Mese Anno].MEMBERS) } ON ROWS
FROM [AGRO]
WHERE ([TipoMisura].[Tipo Misura].&[1], [TipoAnno].[Tipo Anno].&[2],
[TipoPeriodo].[Tipo Periodo].&[2],
[Mercato].[Mercato].&[1],
[Aziende].[Descrizione Codice Azienda].&[100 - BASF]);
我得到的结果是:
这不是我想要的结果,对于 Ecotassa,我需要获得特定年份的结果。但是我得到 null.
不知道我的查询有误。有人可以帮我解决一下吗?
此 [Tempo].[Anno].CurrentMember
等于脚本中的 All
因此它在 CASE
语句中选择 NULL
。我也很想使用 [Tempo].[Periodo]
作为年份和日期:而不是 [Tempo].[Anno]
:
我还将 [Measures].[y]
放入 select 中,以便我们查看它是否正常工作。
所以试试这个:
WITH
MEMBER [Measures].[y] AS
EXISTS(
[Tempo].[Periodo].[Anno].members,
[Tempo].[Periodo].CurrentMember
).ITEM(0).ITEM(0).Member_Caption
MEMBER [Measures].[Ecotassa] AS
CASE
WHEN [Measures].[y] = '2011' THEN '9114646'
WHEN [Measures].[y] = '2012' THEN '8787551.65'
WHEN [Measures].[y] = '2013' THEN '8435651.26'
WHEN [Measures].[y] = '2014' THEN '8917336.39'
WHEN [Measures].[y] = '2015' THEN '9465533.37'
ELSE NULL
END
SELECT
{
[Measures].[Dato]
,[Measures].[Ecotassa]
,[Measures].[y]
} ON COLUMNS,
[Tempo].[Periodo].[Mese Anno].MEMBERS ON ROWS
FROM [AGRO]
WHERE (
[TipoMisura].[Tipo Misura].&[1]
,[TipoAnno].[Tipo Anno].&[2]
,[TipoPeriodo].[Tipo Periodo].&[2]
,[Mercato].[Mercato].&[1]
,[Aziende].[Descrizione Codice Azienda].&[100 - BASF]
);
测试脚本
这是什么return?
WITH
MEMBER [Measures].[EcotassaTEST] AS
[Tempo].[Anno].CurrentMember.MemberValue
SELECT
{ [Measures].[Dato], [EcotassaTEST] } ON COLUMNS,
{ ([Tempo].[Periodo].[Mese Anno].MEMBERS) } ON ROWS
FROM [AGRO]
WHERE ([TipoMisura].[Tipo Misura].&[1], [TipoAnno].[Tipo Anno].&[2],
[TipoPeriodo].[Tipo Periodo].&[2],
[Mercato].[Mercato].&[1],
[Aziende].[Descrizione Codice Azienda].&[100 - BASF]);