使用计算成员传递参数 - MDX
Posted
技术标签:
【中文标题】使用计算成员传递参数 - MDX【英文标题】:Passing Parameters using a Calculated member - MDX 【发布时间】:2012-05-24 18:13:27 【问题描述】:我正在尝试使用计算成员构建带有参数的查询。
我已经为“硬编码”的司法计数创建了计算成员,并且我创建的参数不会影响每个组的总数。
但是,我需要将每个总计数与工作参数一起列出。如果所选司法类型没有值,则应显示零计数。
我确信有一个简单的方法,但我对 MDX/s-s-rS 相当陌生。非常感谢任何帮助!
这里是查询:
WITH
Member [Measures].[Jud] as
(
[Dim Foreclosure Loan].[Judicial Flag].[1],
[Dim Foreclosure Loan].[FCL Stage].&[Sale Held],
[Measures].[Loan Count]
)
Member [Measures].[Non-Jud] as
(
[Dim Foreclosure Loan].[Judicial Flag].[0],
[Dim Foreclosure Loan].[FCL Stage].&[Sale Held],
[Measures].[Loan Count]
)
Member [Measures].[Total] as
(
[Dim Foreclosure Loan].[Judicial Flag],
[Dim Foreclosure Loan].[FCL Stage].&[Sale Held],
[Measures].[Loan Count]
)
-------------------------------- Query Begins --------------------------------
SELECT NON EMPTY
([Dim Date].[Calendar].[Day].Members)
ON ROWS,
NON EMPTY
(
([Measures].[Jud]),
([Measures].[Non-Jud]),
([Measures].[Total])
) ON COLUMNS
FROM ( SELECT ( STRTOSET(@DimForeclosureLoanJudicialFlag, CONSTRAINED) ) ON COLUMNS
FROM [Foreclosure])
WHERE
(IIF( STRTOSET(@DimForeclosureLoanJudicialFlag, CONSTRAINED).Count = 1,
STRTOSET(@DimForeclosureLoanJudicialFlag, CONSTRAINED),
[Dim Foreclosure Loan].[Judicial Flag].currentmember)
)CELL PROPERTIES VALUE
更新:需要有关提供的 iif 语句的帮助;请参阅下面的 cmets。
【问题讨论】:
【参考方案1】:我不是 100% 清楚你在问什么,但如果我要重申它,我认为这就是你想要做的。我想你想在列上看到 Jud、Non-Jud 和 Total。我认为您正在尝试使用该参数来选择特定的司法标志。不清楚的是参数值是否限制为 1 和 2,如您为度量显示的那样,或者是否存在一个层次结构,其中 1 和 2 有子级。我将假设第一个,因为它最简单解释一下,我们可以从那里开始。
您需要为司法标志 1 和 2 设置措施,以考虑 WHERE
子句中的内容。现在它们是硬编码的,这告诉 SSAS 忽略 WHERE
子句中的任何内容。您需要通过在 Measure 定义中包含 IIF
语句来有条件地使用它。您应该返回一个 NULL
值作为 False 条件,以便 SSAS 可以最佳地执行查询,然后使用 format_string 属性填充零来代替 NULL
(这比在 False 条件中使用 0 更好性能)。但是,列上的NON EMPTY
关键字将消除WHERE
子句中未包含的司法标志,因此您需要将其删除。将其保留在行上,以便仅显示具有 Jud 或 Non-Jud 值的日期。
根据我对您正在尝试做的事情的猜测,这是对您的查询的尝试:
WITH
MEMBER [Measures].[Jud] AS
iif(
[Dim Foreclosure Loan].[Judicial Flag].CurrentMember is
[Dim Foreclosure Loan].[Judicial Flag].[1],
(
[Dim Foreclosure Loan].[Judicial Flag].[1]
,[Dim Foreclosure Loan].[FCL Stage].&[Sale Held]
,[Measures].[Loan Count]
),
NULL), format_string="#;#;0;0"
MEMBER [Measures].[Non-Jud] AS
iif(
[Dim Foreclosure Loan].[Judicial Flag].CurrentMember is
[Dim Foreclosure Loan].[Judicial Flag].[0],
(
[Dim Foreclosure Loan].[Judicial Flag].[0]
,[Dim Foreclosure Loan].[FCL Stage].&[Sale Held]
,[Measures].[Loan Count]
),
NULL), format_string="#;#;0;0"
MEMBER [Measures].[Total] AS
(
[Dim Foreclosure Loan].[Judicial Flag]
,[Dim Foreclosure Loan].[FCL Stage].&[Sale Held]
,[Measures].[Loan Count]
)
SELECT
NON EMPTY
[Dim Date].[Calendar].[Day].MEMBERS
ON ROWS
,
[Measures].[Jud]
,[Measures].[Non-Jud]
,[Measures].[Total]
ON COLUMNS
FROM
(
SELECT
StrToSet
(@DimForeclosureLoanJudicialFlag
,CONSTRAINED
) ON COLUMNS
FROM [Foreclosure]
)
WHERE
IIF
(
StrToSet
(@DimForeclosureLoanJudicialFlag
,CONSTRAINED
).Count
= 1
,StrToSet
(@DimForeclosureLoanJudicialFlag
,CONSTRAINED
)
,[Dim Foreclosure Loan].[Judicial Flag].CurrentMember
)
CELL PROPERTIES VALUE, FORMATTED_VALUE;
【讨论】:
感谢斯塔西亚的帮助!很好地猜测你认为我需要什么。该解决方案非常适合我的需求。我非常感谢您花时间提供如此详细的答案和解释。万事如意! 您好! @Stacia 提供的 iif 语句部分满足我的需要。我注意到在选择参数之前,计数不会出现在 s-s-rS 中。如果 iif 语句的顺序颠倒,则计数最初出现,但在选择参数时消失。我希望计数最初出现并仅在所选参数不匹配时才消失。任何帮助表示赞赏! 您的参数的默认值是多少?如果对您的环境没有更全面的了解,就很难提出解决方案。以上是关于使用计算成员传递参数 - MDX的主要内容,如果未能解决你的问题,请参考以下文章
GroovyGroovy 方法调用 ( Groovy 构造函数中为成员赋值 | Groovy 函数的参数传递与键值对参数 | 完整代码示例 )