繁体   English   中英

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

[英]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
问题
  • 我可能需要做的就是客户的关键任何想法,为科目维度的任何属性被退回?
  • 我可能必须在多维数据集中更改我的“ 帐户”维度才能使其正常工作?

提前致谢。

编辑1-Adventure Works Cube版本

我无法使用“存在”功能来获得建议的答案。 为了更好地演示此问题,我使用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, "&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> 

下面是重新创建问题的步骤。

  1. 连接到Excel中的多维数据集
  2. 添加维度客户->更多字段->客户
  3. 添加度量Internet销售-> Internet销售金额
  4. 右键单击Internet Sales Amount单元,选择“其他操作”->“测试报告操作”,然后查看为URL创建的客户值

在此时使用Customer运行操作时,我会看到在显示的URL消息框中创建了值(因为在指定的位置没有SSRS报告服务器)。

现在我无法解决的部分

  1. 删除客户维度,然后添加客户->受众特征->教育
  2. 右键单击Internet Sales Amount单元,选择“其他操作”->“测试报告操作”

什么都没发生。 如果我跑了电池的动作旁边的“学士”,我希望它建立的是弥补在客户维度的“学士”的报表参数的一部分,所有的“客户”的全部名单。 如果该单元格的“ 客户”维度中的多维数据集中没有使用任何属性,那么我希望它返回“所有客户”,或者类似的方式来表明聚合中包括了所有客户。

到目前为止,我对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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM