【问题标题】:MDX Multi-Valued Parameters from Database Query来自数据库查询的 MDX 多值参数
【发布时间】:2014-07-18 22:58:18
【问题描述】:

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

【问题讨论】:

    标签: sharepoint reporting-services mdx


    【解决方案1】:

    您不能以这种方式使用逗号分隔的值,您需要创建要与整个层次结构一起传递的每个值。 例子: 您的值是:{1,2,3} 要在 mdx 中正常工作,您需要将它们作为:

    [Dayparts].[Network Dayparts].[Daypart Listname].[1],
    

    [时段].[网络时段].[时段列表名称].[2], [时段].[网络时段].[时段列表名称].[3],

    传递给 strtoset(@) 的值需要具有上述格式 - 这是 MDX 世界中的 CSV...

    为此,您需要: 创建隐藏参数,其默认值为: ="[Dayparts].[Network Dayparts].[Daypart Listname].[" & @DaypartsNetworkDayparts & "]" 取决于 @DaypartsNetworkDayparts 的格式,您可能需要使用转换函数来匹配格式。 然后将该隐藏参数插入您的 mdx strtoset(@yourhiddenparameter) 如果您需要更多帮助,请告诉我。

    【讨论】:

    • 丹尼尔 - 我看到你的答案有两个部分。第一种是[Dayparts].[Network Dayparts].[Daypart Listname].&[3]&[25]的方式
    • 我对你的评论有点困惑 :) - 你的问题现在解决了吗?
    • 还是一头雾水。 &[3]&[25] 的参数是复合键。考虑到这可能是问题所在,我创建了一个更简单的版本,但遇到了同样的问题。新版本:
    • SELECT NON EMPTY { [Measures].[Potential Units Sold] } ON COLUMNS, NON EMPTY { ( [Air Dates].[Broadcast Yr Qtr].[Bcst Qtr].ALLMEMBERS * [Network] .[Network].[Network].ALLMEMBERS ) } ON ROWS FROM ( SELECT ( { [Air Dates].[Broadcast Yr Qtr].[Bcst Year].&[2014] } ) ON COLUMNS FROM ( SELECT ( STRTOSET(@ NetworkNetwork, CONSTRAINED) ) 在 [Inventory] ​​中的列上))
    • 参数行是 FROM ( SELECT ( STRTOSET(@NetworkNetwork, CONSTRAINED) ) ON COLUMNS。在 SSMS 中,我将其替换为 FROM ( SELECT ( STRTOSET("{[Network].[Network].& [3],[Network].[Network].&[4]}", CONSTRAINED) ) ON COLUMNS 并且它有效。所以我需要弄清楚如何发送字符串 "{[Network].[Network].& [3],[Network].[Network].&[4]}" (包括双引号)到参数。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多