【问题标题】:How to transpose key/value pairs into table in Report Builder?如何将键/值对转换为报表生成器中的表?
【发布时间】:2014-11-05 19:39:26
【问题描述】:

传入数据('Key' 和 'Value' 是数据集中字段的实际名称):

Key    Value
---    ----- 
A      1.0
B      2.0
C      3.0
A      4.0
B      5.0
C      6.0

报告中的期望输出:

A    B    C
-    -    -
1.0  2.0  3.0
4.0  5.0  6.0

到目前为止尝试过:

以'Key'为列组,以'Value'为数据,行标题正确,但矩阵中只出现第一行数据。

A   B   C
-   -   -
1.0 2.0 3.0
(no other rows appear)

使用“值”作为行组,矩阵中的数据都是稀疏的,因为它将任何字段中的每个更改都视为一个新组:

A   B   C
-   -   -
1.0
    2.0
        3.0
4.0
    5.0
        6.0

【问题讨论】:

  • 最好的方法是将数据集的输出更改为报告中所需的格式。最好的方法是使用 PIVOT。
  • 尽量不改变源代码,因为它服务于多个客户。我认为 Tablix 的全部意义在于它确实可以旋转?
  • tablix 应该允许您按列组中的键字段进行分组,同时将详细信息显示为行组。到目前为止,您尝试过什么?
  • 您的 PIVOT 要求有点不寻常; PIVOTs 通常涉及聚合数据,但你想保持数据谨慎,我猜是基于它在表中出现的顺序?不确定这将如何完成,因为如果没有 ORDER BY,预计数据的行顺序不会可靠。是否有另一列用于 ORDER BY?换句话说,SQL 怎么知道 A=1.0 应该和 B=2.0 在同一行,而不是 B=5.0?
  • @TabAlleman - 我可以确保订单是正确的,因为它来自数据源。要回答,一切都是一行,直到再次到达键“a”。这来自 XML 字典(Web 服务调用的结果),不幸的是,SSRS 正在扁平化结构并丢失一些层次结构信息

标签: reporting-services reportbuilder3.0 ssrs-2012


【解决方案1】:

为您的数据集添加一列,支持您进行分组:

如果你的数据集是这样的

select KEY, VALUE from TABLE

你可以改成

select KEY,
  VALUE,
  row_number() over (partition by KEY order by KEY) as RN 
from TABLE

然后在tablix中,可以按RN分组

【讨论】:

  • 感谢您的想法。我很犹豫是否在数据级别包含新值,因为这会影响其他消费者,但如果没有更好的想法,我会标记为答案 - 谢谢!
  • 我有没有机会将 row_number 行为模仿为报表生成器中的计算字段? (所以我可以不理会原始数据集?)
  • 就我现在而言,计算字段不支持这个rownum over partition。
猜你喜欢
  • 1970-01-01
  • 2016-06-30
  • 2020-12-11
  • 2022-10-15
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多