基于上一个问题,我正在尝试实现以下结果集,以便在 SSRS 2008 报告中使用。
Utilisation New Measure
Apr-12 70.7% 70.7%
May-12 74.5% 74.5%
Jun-12 74.6% 74.6%
Jul-12 76.7% 76.7%
Aug-12 79.5% 79.5%
Sep-12 78.5% (null)
Oct-12 79.0% (null)
Nov-12 79.6% (null)
Dec-12 78.9% (null)
Jan-13 79.7% (null)
Feb-13 79.0% (null)
Mar-13 79.4% (null)
到目前为止,我的MDX查询如下:
WITH MEMBER [Measures].[New Measure]
AS IIF(
ISEMPTY(
EXISTS(
[Date].[Fiscal Year-Month].[Fiscal Month].CurrentMember
, {[Date].[Fiscal Year-Month].[Fiscal Month].&[2012/13]&[1]
:[Date].[Fiscal Year-Month].[Fiscal Month].&[2012/13]&[5]}
)
)
, NULL
, [Measures].[Utilisation]
)
, FORMAT_STRING = "0.0%"
SELECT {
[Date].[Fiscal Year-Month].[2012/13].children
} ON ROWS
,
{
[Measures].[Utilisation]
, [Measures].[New Measure]
} ON COLUMNS
FROM [Elective]
尽管新度量值返回的结果与利用率度量值相同,并且在我不想要值的月份不返回 Null。
你很接近,但语法不太正确。试试这个:
WITH MEMBER [Measures].[New Measure]
AS IIF(
EXISTS(
{[Date].[Fiscal Year-Month].[Fiscal Month].&[2012/13]&[1]
:[Date].[Fiscal Year-Month].[Fiscal Month].&[2012/13]&[5]},
[Date].[Fiscal Year-Month].[Fiscal Month].CurrentMember
).Count = 1
, [Measures].[Utilisation]
, NULL
)
, FORMAT_STRING = "0.0%"
SELECT {
[Date].[Fiscal Year-Month].[2012/13].children
} ON ROWS
,
{
[Measures].[Utilisation]
, [Measures].[New Measure]
} ON COLUMNS
FROM [Elective]
使用 EXISTS 函数时,第一个参数是要检查的完整参数集 - 您希望显示值的日期范围 - 第二个参数是行上的当前成员,因此您需要执行与最初尝试相反的操作。EXISTS 函数返回一个集合,因此您可以使用 COUNT 函数查看集合是否具有某些内容(当前成员),当存在匹配项时,该成员应仅为 1。ISEMPTY 不适合您的原因是 MDX 在计算中包含当前度量值,当当前日期成员和利用率度量值的值存在时,表达式解析为 false 并返回利用率。
您可以使用 Rank 函数:
WITH MEMBER [Measures].[New Measure]
AS IIf(Rank(([Date].[Fiscal Year-Month].[Fiscal Month].CurrentMember)
, [Date].[Fiscal Year-Month].[Fiscal Month].&[2012/13]&[1]:[Date].[Fiscal Year-Month].[Fiscal Month].&[2012/13]&[5]
) < 1
, NULL
, [Measures].[Utilisation]
)