【问题标题】:Range parameter on the MDX-queryMDX 查询上的范围参数
【发布时间】:2012-02-17 04:12:27
【问题描述】:

我有一个正确的 MDX 查询:

SELECT NON EMPTY { [Measures].[IssueOpened] } ON COLUMNS, 
NON EMPTY { ([Projects].[Id].[Id].ALLMEMBERS * [Priorities].[Id].[Id].ALLMEMBERS ) } ON ROWS 
FROM [Reports]
WHERE [CreatedOn].[Date].&[2010-01-01T00:00:00]:[CreatedOn].[Date].&[2010-02-01T00:00:00]

我需要在 CreatedOn 维度上创建带有过滤器的 SSRS 报告。

这是我的非工作解决方案:

  • 我将查询转换为:

    SELECT NON EMPTY { [Measures].[IssueOpened] } ON COLUMNS, 
    NON EMPTY { ([Projects].[Id].[Id].ALLMEMBERS * [Priorities].[Id].[Id].ALLMEMBERS ) } ON ROWS 
    FROM (SELECT (STRTOSET(@CreatedOnDate, CONSTRAINED) ) ON COLUMNS
    FROM [Reports])
    
  • CreatedOnDate 参数(类型 = 日期时间)

  • 将 CreatedOnDate 参数的值设置为值:

    ="[CreatedOn].[Date].[" + Format(CDate(Parameters!CreatedOnDate.Value), "yyyy-MM-dd") + "T00:00:00]"
    

但是当我运行报告时,我得到:

The restriction imposed by the CONSTRAINED flag in the STRTOSET function were violated

【问题讨论】:

    标签: sql-server reporting-services


    【解决方案1】:

    不知何故,参数不是你想的那样。如果在使用StrToSet MDX function 时字符串不是成员,CONSTRAINED 标志将强制生成错误(检查失败示例):

    您可以尝试不使用 CONSTRAINED 标志或找出参数的值:

    WITH 
     MEMBER myParam AS "[CreatedOn].[Date].[" + 
                       Format(CDate(Parameters!CreatedOnDate.Value), "yyyy-MM-dd") 
                       + "T00:00:00]"
    SELECT
      [Measures].[myParam] on 0
    FORM [Reports]
    

    稍微尝试一下应该会更容易发现问题。

    【讨论】:

      【解决方案2】:

      如果您对范围的每一侧使用 STRTOMEMBER,它应该可以工作

      STRTOMEMBER("[CreatedOn].[Date].&[2010-01-01T00:00:00]", constrained):STRTOMEMBER("[CreatedOn].[Date].&[2010-02-01T00:00:00]", constrained)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多