数据库查询中的MDX多值参数

时间:2014-07-17 21:28:37

标签: sharepoint reporting-services mdx

这是我的第一个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查询接受多个值吗?谢谢!

1 个答案:

答案 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) 如果您需要更多帮助,请告诉我。