SSAS报告操作将多值列表值传递给SSRS报告参数

我已经search了很多小时试图find这个问题的端到端的解决scheme。

我想要在SSAS OLAP多维数据集中创build一个报表动作,该动作会生成一个格式化值列表,以传递给接受多值参数列表的SSRS报表参数。 这将在SSAS操作的单元级应用。 我发现了一个解决scheme,它使我获得最多的方式: 如何将多个值从SSAS报告钻取操作传递到SSRS多值参数 ,但不完全。 如果我从位于或低于维度属性的单元格运行操作, 该操作确实会出现在Excel中,并且该操作正在生成列表(在此情况下为帐户密钥)

下面是一个链接到屏幕截图(无法embedded它由于缺乏声誉),在Excel中显示的行动和维度结构。 只要我在帐户密钥级别或以下运行它,操作就会起作用。 我希望能够在较高级别运行它,例如Account Major,并且仍然会为SSRS报告参数生成所有相关的Account Key值。 在较高的Account Major级别运行它不会触发报表运行。

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维度的任何属性的所有帐户密钥 ,而不仅仅是在透视表中的帐户密钥的 self和子级别运行时。

另外,如果它有帮助,我可以在多维数据集上执行以下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 

问题

  • 任何想法,我可能需要做的是获得帐户密钥返回任何属性的帐户维度?
  • 我可能需要改变多维数据集中的帐户维度才能使其工作?

提前致谢。

编辑1 – 冒险工程立方版本

我无法使用“存在”function得到build议的答案。 为了更好地演示这个问题,我使用Adventure Works Cube重新创build了它。

我将专注于客户维度,特别是客户教育属性。 我创build了一个名为Test Report Action的报告操作 。 以下是在多维数据集中为其创build的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, "&amp;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> 

以下是重新创build问题的步骤。

  1. 在Excel中连接到多维数据集
  2. 添加维度客户 – >更多字段 – >客户
  3. 添加度量Internet销售额 – > Internet销售额
  4. 右键单击“Internet销售额”单元格,select“其他操作” – >“testing报告操作”,然后查看为URL创build的客户值

客户在此时执行操作时,我会看到在URL显示的消息框中创build的值(因为在指定位置没有SSRS报表服务器)。

现在我无法解决的部分

  1. 删除客户维度并添加客户 – >人口统计 – >教育
  2. 右键单击“Internet销售额”单元格,select“其他操作” – >“testing报告操作”

什么都没发生。 如果我在“Bachelors”旁边的单元格上运行该操作,则需要将所有构成Customer维度中的“Bachelors”的“Customers”的所有列表构build为report参数的一部分。 如果该单元格的Customer维度中的多维数据集没有使用属性,那么我希望它返回“所有客户”或类似的内容,以显示所有客户都包含在聚合中。

迄今为止,我还不太了解MDX。 我想我需要以某种方式join生成函数部分中的客户Internet销售额 。 我已经尝试了几个不同的客户维度和互联网销售额的组合,以及各种function,看看我能否得到这个工作没有成功。 我希望有一个更了解我的人将有一个解决scheme。 如果你需要更多的细节,请问,我会提供。

也许mdx需要通过EXISTING关键字来了解当前的单元格上下文吗?

 UrlEscapeFragment( GENERATE( EXISTING DESCENDANTS( [Account].[Account Key].CurrentMember, [Account].[Account Key].[Account Key] ), [Account].[Account Key].CURRENTMEMBER.Name, "&rp:Account=" ) ) 

我终于find了解决我的问题。 @wytheq与MDX Exists走在了正确的轨道上,如果可以的话,我会上调他的答案。

我最终做的是从一个退化的维度获取一个值列表,我可以使用它传递给SSRS来获取报告的事务列表。 以下是我如何做到这一点,使用退化的维度互联网订单详细信息的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] 

这将获得一个文本string中的销售订单号列表,用“&rp:OrderNum =”分隔每个度量的Internet销售额 。 这将允许我创build一个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中创build一个参数值为的​​报表操作

 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=") ) 

我之前讨论过的方式是有缺陷的,因为我试图从每个维度获取一个粒度值列表,用于构build度量值并将这些值作为单独的parameter passing给每个维度。 我只需要为表示值的每个事实度量事务设置一个唯一的值,并在SSRS报告的查询参数中使用它。