[英]Cannot access the the SSRS report through Reporting Action in the SSAS cube
[英]SSAS report action to pass multi-value list values to a SSRS report parameter
我已经搜索了许多小时,试图找到该问题的端到端解决方案。
我想在SSAS OLAP多维数据集中创建一个报告动作,该动作将生成格式化值列表,以传递到接受多值参数列表的SSRS报告参数中。 这将在SSAS操作中的单元级别应用。 我找到了一个可以使我受益匪浅的解决方案: 如何将多个值从SSAS报表追溯操作传递到SSRS多值参数 ,但不完全是。 如果我从尺寸属性以下的单元格运行操作, 则该操作确实会在Excel中显示并起作用,在这种情况下,我将为其生成清单(在这种情况下为Account Key) 。
下面是一个屏幕截图的链接(由于缺乏声誉而无法嵌入),显示了Excel中的操作和维度结构。 只要我在“ 帐户密钥”级别或更低级别运行该操作,该操作便会起作用。 我希望能够在较高级别(例如“ 帐户专业”)上运行它,并且仍然让它为SSRS报告参数生成所有随后相关的“ 帐户关键字”值。 在较高的“ 帐户主要”级别运行它不会触发报表运行。
Excel操作屏幕截图: http : //i.stack.imgur.com/QCGSp.png
以下是我用来生成报告参数值的MDX:
UrlEscapeFragment(
GENERATE(
DESCENDANTS(
[Account].[Account Key].CurrentMember,
[Account].[Account Key].[Account Key]
),
[Account].[Account Key].CURRENTMEMBER.Name,
"&rp:Account="
)
)
我希望我可以以某种方式修改上面的MDX,以使其从任何度量单元格运行时返回Account维度的任何属性的所有Account Keys ,而不仅仅是在数据透视表中以Account Key的自身和子代运行时返回。
另外,如果有帮助,我可以在多维数据集上执行以下MDX查询,并获得所需的结果。
WITH MEMBER [Measures].[Account Key List] as
GENERATE(
DESCENDANTS([Account].[Account].CurrentMember, [Account].[Account].[Account]),
[Account].[Account].CURRENTMEMBER.NAME,
"&rp:Account=")
SELECT {[Measures].[Account Key List]} on 0,
([Account].[Account Company Number].[Account Company Number],[Account].[Account Major].[Account Major]
) on 1
FROM [Company 10 Action Demo]
以下是部分结果:
10.116&rp:Account=10.116.010
10.117&rp:Account=10.117.010&rp:Account=10.117.020
10.120&rp:Account=10.120.005&rp:Account=10.120.006&rp:Account=10.120.010&rp:Account=10.120.020&rp:Account=10.120.030&rp:Account=10.120.040&rp:Account=10.120.050&rp:Account=10.120.060&rp:Account=10.120.380&rp:Account=10.120.999
10.123
问题
提前致谢。
我无法使用“存在”功能来获得建议的答案。 为了更好地演示此问题,我使用Adventure Works Cube重新创建了它。
我将关注“ 客户”维度,特别是“ 客户”和“ 教育”属性。 我创建了一个名为“ 测试报告操作”的报告操作 。 下面是在多维数据集中为其创建的XML。
<Action xsi:type="ReportAction" dwd:design-time-name="f35ad5ee-5167-4fb8-a0e0-0a74cc6e81c6"> <ID>Report Action 1</ID> <Name>Test Report Action</Name> <TargetType>Cells</TargetType> <Target></Target> <Type>Report</Type> <ReportServer>SQLSERVER</ReportServer> <Path>ReportServer?/Test Report</Path> <ReportParameters> <ReportParameter> <Name>Test Customer Existing</Name> <Value>UrlEscapeFragment( GENERATE( EXISTING DESCENDANTS( [Customer].[Customer].CurrentMember, [Customer].[Customer].[Customer] ), [Customer].[Customer].CURRENTMEMBER.Name, "&rp:Customer=" ) )</Value> </ReportParameter> </ReportParameters> <ReportFormatParameters> <ReportFormatParameter> <Name>rs:Command</Name> <Value>Render</Value> </ReportFormatParameter> <ReportFormatParameter> <Name>rs:Renderer</Name> <Value>HTML5</Value> </ReportFormatParameter> </ReportFormatParameters> </Action>
下面是重新创建问题的步骤。
在此时使用Customer运行操作时,我会看到在显示的URL消息框中创建了值(因为在指定的位置没有SSRS报告服务器)。
现在我无法解决的部分
什么都没发生。 如果我跑了电池的动作旁边的“学士”,我希望它建立的是弥补在客户维度的“学士”的报表参数的一部分,所有的“客户”的全部名单。 如果该单元格的“ 客户”维度中的多维数据集中没有使用任何属性,那么我希望它返回“所有客户”,或者类似的方式来表明聚合中包括了所有客户。
到目前为止,我对MDX不太了解。 我想我需要以某种方式将“ 客户”加入到“生成功能”部分中的“ Internet销售额”中。 我尝试了Customer维和Internet Sales Amount的几种不同组合,以及各种功能,以查看是否可以成功使用它。 我希望有人能为我提供解决方案。 如果您需要更多详细信息,请询问,我会提供。
也许需要通过EXISTING
关键字使mdx
了解当前的单元上下文?
UrlEscapeFragment(
GENERATE(
EXISTING DESCENDANTS(
[Account].[Account Key].CurrentMember,
[Account].[Account Key].[Account Key]
),
[Account].[Account Key].CURRENTMEMBER.Name,
"&rp:Account="
)
)
我终于找到了解决我问题的方法。 @wytheq与MDX Exists的往来正轨,如果可以的话,我会投票赞成他的答案。
我最终要做的是从一个退化维度中获取值列表,我可以使用该值列表传递给SSRS以获取报告的交易列表。 下面是我与使用降级维度Internet Order Details的Adventure Works多维数据集有关的操作方法。
WITH MEMBER [Measures].[Order Param List] AS
GENERATE(
EXISTS([Internet Sales Order Details].[Sales Order Number].[Sales Order Number].Members, ,
"Internet Sales"),
[Internet Sales Order Details].[Sales Order Number].CurrentMember.Name,
"&rp:OrderNum=")
SELECT {[Measures].[Order Param List], [Measures].[Internet Sales Amount]} ON 0
,([Date].[Calendar].[Date]) ON 1
FROM [Adventure Works]
这将以文本字符串的形式获得销售订单编号的列表,对于每种Internet度量,均以“&rp:OrderNum =”分隔。 这将允许我创建一个SSRS报告,以带回每个销售订单编号的详细信息。 以下是一些示例结果。
May 16, 2007 SO50493&rp:OrderNum=SO50494&rp:OrderNum=SO50495&rp:OrderNum=SO50496&rp:OrderNum=SO50497&rp:OrderNum=SO50498&rp:OrderNum=SO50499&rp:OrderNum=SO50500 $12,157.80
May 17, 2007 SO50501&rp:OrderNum=SO50502&rp:OrderNum=SO50503&rp:OrderNum=SO50504&rp:OrderNum=SO50505&rp:OrderNum=SO50506&rp:OrderNum=SO50507&rp:OrderNum=SO50508 $13,231.62
May 18, 2007 SO50509&rp:OrderNum=SO50510 $4,624.91
这样,我就可以在SSRS中创建一个参数值为
UrlEscapeFragment(
GENERATE(
EXISTS([Internet Sales Order Details].[Sales Order Number].[Sales Order Number].Members, ,
"Internet Sales"),
[Internet Sales Order Details].[Sales Order Number].CurrentMember.Name,
"&rp:OrderNum=")
)
我之前的处理方式存在缺陷,因为我试图从用于构建度量值的每个维度中获取粒度值列表,并将每个值作为单独的参数传递。 我只需要为每个事实度量交易设置一个唯一的值,该交易代表该值,并在SSRS报告的查询参数中使用该值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.