在SSRS中使用钻取报表和Analysis Service作为数据源

时间:2017-03-13 15:38:15

标签: reporting-services parameters parameter-passing mdx

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

"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等,但似乎没有工作)

此数据集将用于创建一个表格,我在Weeks上然后在Dates上进行分组,这样当您按下某个日期时,就会创建一个钻取报表那天和商店的更详细数据。

我希望使用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

我使用预览选项在Visual Studio中的SSRS中进行所有此测试。显示StoreKey中的变量Main ReportStoreKey中的DateGenerated drill through report是内部的。我在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] 

然而,我的问题是,如果我将此声明复制到Management工作室并用硬编码值替换变量表达式,如下所示:

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中的原始已编辑的代码在查询设计器中不会出现错误,但是,当我想要预览项目时,我会收到不匹配的层次结构的错误。然后我继续在 Management studios 中进行调整,(但是使用变量而不是硬编码值),但是我在SSRS中得到一个空集,当我尝试时会出现各种错误在我的表中调用一个空数据集。

1 个答案:

答案 0 :(得分:2)

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

enter image description here

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

enter image description here

您的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表达式。

enter image description here

这对我有用。

enter image description here

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

希望它有所帮助。