【发布时间】:2015-03-06 22:35:26
【问题描述】:
我已经搜索了好几个小时,试图找到解决这个问题的端到端解决方案。
我想在 SSAS OLAP 多维数据集中创建一个报告操作,该操作生成一个格式化值列表,以传递给接受多值参数列表的 SSRS 报告参数。这将应用于 SSAS 操作中的 cell 级别。我找到了一个解决方案,可以帮助我大部分时间:How to Pass Multiple Values from an SSAS Report Drill Through Action to an SSRS Multi-Value Parameter,但不完全是。该操作确实出现在 Excel 中并且有效如果我从位于或低于要为其生成列表的维度属性的单元格运行操作,在这种情况下,帐户键.
下面是一个屏幕截图的链接(由于缺乏信誉,无法嵌入),显示了 Excel 中的操作和维度结构。只要我在 Account Key 级别或以下级别运行该操作,该操作就会起作用。我希望能够在更高级别运行它,例如 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 维度的任何属性的所有 Account Keys,不仅仅是在数据透视表中的 Account Key 的 self 和 children 处运行时。
另外,如果有帮助,我可以在多维数据集上执行以下 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
问题
- 我可能需要做些什么来为 Account 维度的任何属性返回 Account Key?
- 我是否可能必须更改多维数据集中的 Account 维度才能使其正常工作?
提前致谢。
编辑 1 - Adventure Works Cube 版本
我无法通过“存在”功能获得建议的答案。为了更好地演示这个问题,我使用 Adventure Works Cube 重新创建了它。
我将关注 Customer 维度,特别是 Customer 和 Education 属性。我创建了一个名为 Test Report Action 的报告操作。下面是在多维数据集中为其创建的 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>
以下是重新创建问题的步骤。
- 在 Excel 中连接到多维数据集
- 添加维度客户 -> 更多字段 -> 客户
- 添加度量Internet Sales -> Internet Sales Amount
- 右键单击 Internet Sales Amount 单元格,选择“其他操作” -> “测试报告操作”并查看为 URL 创建的客户值
此时使用 Customer 运行操作时,我看到在显示的消息框中的 URL 中创建的值(因为在指定位置没有 SSRS 报表服务器)。
现在我无法解决的部分
- 删除 Customer 维度并添加 Customer -> Demographic -> Education
- 右键单击 Internet Sales Amount 单元格,选择“附加操作”->“测试报告操作”
什么都没有发生。如果我在“单身汉”旁边的单元格上运行该操作,我希望它在 Customer 维度中构建构成“单身汉”的所有“客户”的所有列表作为一部分报告参数。如果在该单元格的 Customer 维度中的多维数据集中没有使用任何属性,那么我希望它返回“所有客户”,或类似的东西以显示所有客户都包含在聚合中。
到目前为止,我还不太精通 MDX。我想我需要以某种方式将 Customers 加入到 Generate 功能部分中的 Internet Sales Amount 中。我已经尝试了 Customer 维度和 Internet Sales Amount 的几种不同组合,以及各种功能,看看我是否可以让它工作但没有成功。我希望有比我更了解的人有一个解决方案。如果您需要更多详细信息,请询问,我会提供。
【问题讨论】:
-
只是想知道您是否可以将其翻译到 AdvWrks 以便人们更容易玩?
-
我已经考虑过安装 AdventureWorks DW 和多维数据集,因为有很多示例引用它。明天我会知道你建议的答案是否有效。如果不是,我将使用 AdventureWorks 重新表述这个问题。谢谢。
标签: excel reporting-services ssas mdx olap