我希望能够创建一个报告,您可以在其中提供商店密钥作为参数,它将创建仅包含该商店销售额的表格。为此我创建了一个名为“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))
但这为我提供了有关查询开头的=
符号的错误(我已经测试过多种不同的技术,例如STRTOMEMBER
,STRTOSET
等,但似乎没有工作)
此数据集将用于创建一个表格,我在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 Report
,StoreKey
中的Date
和Generated drill through report
是内部的。我在Default values
,available 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中得到一个空集,当我尝试时会出现各种错误在我的表中调用一个空数据集。
答案 0 :(得分:2)
确保您的数据集已映射到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参数。
希望它有所帮助。