【发布时间】: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))
但这为我提供了关于查询开头的= 符号的错误(我已经测试了许多不同的技术,例如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。
我使用 Preview 选项在 Visual Studios 的 SSRS 中进行 all 测试。 Main Report 中的变量 StoreKey 已显示,Generated drill through report 中的 StoreKey 和 Date 是内部变量。我已经在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]
但是,我的问题是,如果我将此语句复制到管理工作室并将变量表达式替换为硬编码值,如下所示:
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