【问题标题】:Using Drill through reports and Analysis Service as Data source in SSRS在 SSRS 中使用钻取报表和分析服务作为数据源
【发布时间】:2017-03-13 15:38:14
【问题描述】:

我希望能够创建一个报告,您可以在其中提供一个商店密钥作为参数,它将创建一个仅包含该商店销售额的表格。为此,我创建了一个名为“StoreKey”的参数和一个提供数据集的查询:

"SELECT NON EMPTY {
   [Measures].[Quantity] -- NOTE there are many more columns in reality
   } ON COLUMNS,
NON EMPTY {
            (
                [Dim Date].[Calender].[Date].[2014-11-20]:[Dim Date].[Calender].[Date].[2014-11-30]
            )
        } on rows
FROM [cube] 
WHERE WHERE ( STRTOMEMBER("[Dim Store2].[Store Key].&["+ @StoreKey + "]",CONSTRAINED))

但这为我提供了关于查询开头的= 符号的错误(我已经测试了许多不同的技术,例如STRTOMEMBERSTRTOSET 等,但似乎都没有用)

此数据集将用于创建一个表,我在其中对WeeksDates 进行分组,这样当您按下某个日期时,将创建一个包含更详细数据的钻取报告那天和商店。

我希望使用StoreKey 生成子报告,Date 用于打开钻取报告。我希望 StoreKey 参数在主报表和子报表中具有相同的值。

对于后者,我配置了一个Action 以在主报告中创建一个新报告,它应该使用StoreKey 变量和Date 变量来生成新报告。

在我的Subreport 中,我想像这样创建第一个数据集:

 SELECT 
    NON EMPTY { 
        [Measures].[Quantity] 
        , [Measures].[Total Price]
        , [Measures].[Contribution Margin]
        , [Measures].[Profit Margin] 
    } ON COLUMNS, 
    NON EMPTY { 
        (
            [Dim Time].[Open Hour Bucket].[Open Hour Bucket].ALLMEMBERS
, [Dim Product2].[Product Group].[Product Group].ALLMEMBERS
, [Dim Product2].[Summary].[Summary].ALLMEMBERS 
        ) 
    } ON ROWS
        FROM [DSV_FactStoreSales 1] 
    WHERE ( STRTOMEMBER("[Dim Store2].[Store Key].&["+ @StoreKey + "]",CONSTRAINED))

但随后 SSRS 告诉我,如果我使用 MDX 或 DAX,则无法理解。

我希望这不是一个太宽泛的问题,但我已经尝试让它工作了很多很多小时,所以希望我能朝着正确的方向前进。这太令人困惑了——有时论坛用户说应该使用StrToMember,有时应该使用Parameters!StoreKey.value

我使用 Preview 选项在 Visual Studios 的 SSRS 中进行 all 测试。 Main Report 中的变量 StoreKey 已显示,Generated drill through report 中的 StoreKeyDate 是内部变量。我已经在Default valuesavailable values 等处使用不同的值进行了测试。目前我设置为None

编辑:

我终于得到了一个真正“有效”的代码,如下所示:

SELECT 
NON EMPTY 
    {
        [Measures].[Quantity]
        ,[Measures].[Total Price]
        ,[Measures].[Contribution Margin]
        ,[Measures].[Profit Margin]
    } ON COLUMNS,
NON EMPTY 
    { 
        (
            [Dim Date].[Calender].[Date].[2014-11-20]:[Dim Date].[Calender].[Date].[2014-11-30])
            ,STRTOMEMBER("[Dim Store2].[Store Key].&[" + @StoreKey + "]")
    } on rows
from [DSV_FactStoreSales 1] 

但是,我的问题是,如果我将此语句复制到管理工作室并将变量表达式替换为硬编码值,如下所示:

STRTOMEMBER('[Dim Store2].[Store Key].&[1024]')

我收到维度的层次结构必须匹配的错误,因此我将代码调整为:

    NON EMPTY { ([Dim Date].[Calender].[Date].[2014-11-20]:[Dim Date].[Calender].[Date].[2014-11-30]
,STRTOMEMBER('[Dim Store2].[Store Key].&[1024]'))} on rows

返回一个集合。但是,在 SSRS 中使用原始 Edited 代码不会在 Query Designer 中提供任何错误,但是,当我想预览项目时,我会收到不匹配层次结构的错误。然后,我继续进行我在 Management studios 中所做的调整(但使用变量而不是硬编码值),但随后我在 SSRS 中得到一个空集,这在我尝试时会出现各种错误在我的表中调用一个空数据集。

【问题讨论】:

  • 非常努力。您是否尝试过使用 SSRS 中的查询设计器来编写 MDX 并为您创建参数?我通常这样做是为了完全避免编辑 MDX。

标签: reporting-services parameters parameter-passing mdx


【解决方案1】:

确保您的数据集已映射到 SSRS 参数。

同样在Query Command Text 表达式中使用没有= 的MDX 表达式,它不是SSRS 表达式:

您的WHERE 子句中有错误:

WHERE ( STRTOMEMBER("[Dim Store2].[Store Key].&["+@StoreKey+"],CONSTRAINED)",
STRTOMEMBER("[Dim Date].[Date Key].&["+@Date+"],CONSTRAINED" )

应该是:

WHERE ( STRTOMEMBER("[Dim Store2].[Store Key].&["+ @StoreKey + "]",CONSTRAINED), 
STRTOMEMBER("[Dim Date].[Date Key].&[" + @Date + "]",CONSTRAINED ))

更新:尝试从“查询命令文本”窗口设置 MDX 表达式。

这符合我的预期。

避免使用 SS Management Studio,因为您无法从那里设置 SSRS 参数。

希望对你有帮助。

【讨论】:

  • 很好的答案。我之前已经设置过这样的参数。我还复制了您的代码(并尝试了一些不同的方法,例如使用 ' 而不是 " 等)但它不起作用。我收到错误The restrictions imposed by the CONSTRAINED flag has been violated,当有人不恰当地引用成员时,我在谷歌上搜索到该错误,但我在设计器中拖出了一个特定的存储密钥以完美模仿语法,但我仍然得到错误。我已将 StoreKey 定义为文本,允许多个值,默认值 1046,无可用值
  • @Cenderze,如果您的参数设置为允许多个值,它将不起作用,因为字符串不能与值数组连接。将参数设置为单个值并尝试仅用于测试。对于多值参数,您将不得不使用 STRTOSET 并设法从 SSRS 返回一组成员的字符串。你是如何填充你的参数的?
  • 感谢您的回复。我将参数更改为不允许multiple values,但我得到了关于 CONSTRAINED 标志的相同错误。该参数是根据提示填充的。或者好吧,可能是因为我无法通过数据集构建器,因为由于错误而无法保存查询。
  • @Cenderze,您确定提示中输入的值是您维度中的成员吗? @Date 参数你也一样吗?
  • 我确定我在提示中写入的值 1024 是有效的存储键。当我使用上述相同的解决方案时,WHERE {STRTOMEMBER('[Dim Date].[Date Key].&[1024]')} 按预期工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多