这是我的第一个StackOverflow问题,所以我感谢您提供的任何帮助。
当前状况我们有一系列SSRS报告,这些报告部署到SharePoint集成模式下运行的SharePoint。我正在尝试使用来自Oracle数据库的数据创建数据驱动的SharePoint订阅,该数据库将报告参数传递给针对分析服务器多维数据集运行的SSRS报告。
问题除非我需要为报告提供多值参数,否则我的工作正常。
以下是该报告的基础MDX:
SELECT NON EMPTY {[Measures].[Units Sold]} ON COLUMNS,
NON EMPTY { (
[PTOC Dates].[Broadcast Dates].[Bcst Week].ALLMEMBERS *
[Price Type Groups].[Price Group ID].[Price Group ID].ALLMEMBERS *
[Price Type Groups].[Price Type Group].[Price Type Group].ALLMEMBERS *
[Dayparts].[Network].[Network].ALLMEMBERS ) }
ON ROWS
FROM ( SELECT ( STRTOSET(@DaypartsNetworkDayparts, CONSTRAINED) ) ON COLUMNS
FROM ( SELECT ( STRTOSET(@NetworkNetwork, CONSTRAINED) ) ON COLUMNS
FROM ( SELECT ( STRTOSET(@AirDatesBroadcastYrQtr, CONSTRAINED) ) ON COLUMNS
FROM [Inventory])))
WHERE (
[Air Dates].[Broadcast Yr Qtr].currentmember,
[Network].[Network].currentmember,
[Dayparts].[Network Dayparts].currentmember )
违规的多值参数是@DaypartsNetworkDayparts。
来自数据库的查询返回2个变量,单值和多值。请注意,它们是完全限定的MDX语法,我使用逗号分隔多值参数。 (为清楚起见,我遗漏了其他字段。)
DaypartsNetworkDayparts Parameter
---------------------------------
[Dayparts].[Network Dayparts].[Daypart Listname].&[3]&[25]
[Dayparts].[Network Dayparts].[Daypart Listname].&[3]&[25],[Dayparts].[Network Dayparts].[Daypart Listname].&[3]&[26]
接下来,我创建了一个SharePoint数据驱动订阅,该订阅使用此数据生成报告。第一行完美运行 - 使用正确的参数生成报告。第二个失败,出现以下错误:
为报表参数'DaypartsNetworkDayparts'提供的默认值或值不是有效值。;
使用SSMS,我用这个手动替换参数行:
FROM ( SELECT ({[Dayparts].[Network Dayparts].[Daypart Listname].&[3]&[25],
[Dayparts].[Network Dayparts].[Daypart Listname].&[3]&[26]} ) ON COLUMNS
它很有效,因为它是一个定义明确的集合。
所以问题在于将逗号分隔的列表传递给@DaypartsNetworkDayparts参数的语法。
任何人都可以帮助我使用正确的语法让MDX查询接受多个值吗?谢谢!
答案 0 :(得分:0)
您无法以这种方式使用逗号分隔值,您需要创建要与整个层次结构一起传递的每个值。 例: 你的价值观是:{1,2,3} 要在mdx中正确使用它,您需要将它们作为:
传递[Dayparts].[Network Dayparts].[Daypart Listname].[1],
[Dayparts]。[Network Dayparts]。[Daypart Listname]。[2], [Dayparts]。[Network Dayparts]。[Daypart Listname]。[3],
传递给strtoset(@)的值需要具有上述格式 - 这是MDX世界中的CSV ...
要做到这一点你需要: 创建隐藏参数,默认值为: =“[Dayparts]。[Network Dayparts]。[Daypart Listname]。[”& @DaypartsNetworkDayparts& “]” 取决于@DaypartsNetworkDayparts的格式,您可能需要使用convertion函数来匹配格式。 然后在mdx strtoset中插入该隐藏参数(@yourhiddenparameter) 如果您需要更多帮助,请告诉我。