【问题标题】:Passing Parameters using a Calculated member - MDX使用计算成员传递参数 - MDX
【发布时间】:2012-05-24 18:13:27
【问题描述】:

我正在尝试使用计算成员构建带有参数的查询。

我已经为“硬编码”的司法计数创建了计算成员,并且我创建的参数不会影响每个组的总数。

但是,我需要将每个总计数与工作参数一起列出。如果所选司法类型没有值,则应显示零计数。

我确信有一个简单的方法,但我对 MDX/SSRS 相当陌生。非常感谢任何帮助!

这里是查询:

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。

【问题讨论】:

    标签: ssrs-2008 mdx


    【解决方案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 语句部分满足我的需要。我注意到在选择参数之前,计数不会出现在 SSRS 中。如果 iif 语句的顺序颠倒,则计数最初出现,但在选择参数时消失。我希望计数最初出现并仅在所选参数不匹配时才消失。任何帮助表示赞赏!
    • 您的参数的默认值是多少?如果对您的环境没有更全面的了解,就很难提出解决方案。
    猜你喜欢
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    相关资源
    最近更新 更多