【问题标题】:Multiple Y values for a single X in SSRS line\scatter chartSSRS 线\散点图中单个 X 的多个 Y 值
【发布时间】:2011-10-03 08:10:24
【问题描述】:

我在网上查过,但没有找到我需要的答案。

在 SSRS 2008 中,我有一个返回与此类似的结果的数据集:

Category Value
-------- -----
18       35
18       42
26       45
30       50
30       42
40       50

如您所见,单个类别(或 X 轴)值(例如 18)可能有多个系列(或 Y 轴)值(对于 18,这些值是 35 42)。 当试图在 SSRS-2008 报告图表中绘制它时,我只能为每个 X 显示一个 Y 值 - 最大值、最小值、平均值、第一个等。

我需要的是显示一个类似于this 的图表: MyChart http://img34.imageshack.us/img34/3990/chartexk.png。 您对如何实现这一点有任何想法吗?

感谢您的任何回答!

【问题讨论】:

    标签: sql-server-2008 reporting-services charts ssrs-2008


    【解决方案1】:

    以下不是完美的解决方案。 This is more of a hack to achieve the results。如果您决定使用它,请谨慎使用此方法。这可能不会一直产生预期的结果。

    由于 SSRS 不会区分 折线 图表上相同轴上的两个值,因此您可以按照以下示例执行操作。该示例使用SSRS 2008 R2,报表数据集中使用的查询仅适用于SQL Server 2005 or above

    分步过程:

    1. 在 SQL Server 数据库中,使用 SQL 脚本 部分下提供的脚本创建一个名为 dbo.ReportData 的表。

    2. 使用屏幕截图 #1 中所示的数据填充表格。我使用了问题中提供的数据,但还添加了一个标识列来维护顺序。

    3. 创建一个 SSRS 报表并使用以下查询创建一个名为 ReportData 的数据集: SELECT Category + RANK() OVER(PARTITION BY Category ORDER BY Id) * .0001 AS Fraction, Category, Value FROM dbo.ReportData ORDER BY Id。请参阅屏幕截图 #2

    4. 上面给出的数据集查询按列 Category 对行进行分区,然后根据列 Id 在每个类别中分配一个排名。此排名值乘以 0.0001,然后将类别列中的值添加到此分数。这个计算的列几乎给出了与类别相同的值,但通过保持值的唯一性,相差千分之一。有关此查询的输出,请参阅屏幕截图 #3

    5. 在报表上,放置一个 Line 类型的 Chart 控件并配置 Chart Data 部分,如屏幕截图 #4 所示。 Fraction 列,即新计算的列,应位于图表的Category Groups 部分,Value 列应位于图表的Values 部分。 p>

    6. 右击X轴并选择Horizontal Axis Properties...参考截图#5

    7. 如屏幕截图 #6 所示配置水平轴属性。对于最大值下拉菜单,单击函数 (fx) 按钮并配置表达式,如屏幕截图 #7 所示。

    8. 对于屏幕截图 #1 中显示的数据,报表执行将产生屏幕截图 #8 中显示的结果。类似于问题中提供的图表。

    9. 让我们重新排列表格中的行,并添加更多的行,如屏幕截图 #9 所示。

    10. 对于屏幕截图 #9 中显示的数据,报表数据集查询将产生屏幕截图 #10 中显示的结果,报表执行将产生输出如屏幕截图 #11 所示。

    希望对您有所帮助。

    SQL 脚本:

    CREATE TABLE [dbo].[ReportData](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [Category] [int] NOT NULL,
        [Value] [int] NOT NULL,
    CONSTRAINT [PK_ReportData] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
    GO
    

    屏幕截图 #1:

    屏幕截图 #2:

    截图#3:

    屏幕截图 #4:

    屏幕截图 #5:

    屏幕截图 #6:

    截图#7:

    截图#8:

    屏幕截图 #9:

    屏幕截图 #10:

    屏幕截图 #11:

    【讨论】:

    • 谢谢!这看起来是一个很好的答案和合理的解决方案,因为报告的要求可以处理类别值的微小偏差。
    • 这个“hack”解决了我在散点图上遇到的问题。它取第一个 Y 值,其中在特定 X 坐标上有倍数。另一种解决方法是进行系列分组,但这会减慢渲染速度并且在规模上不可行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多