首页 > 解决方案 > SSRS - 按项目创建多图表,每行 3 个图表,如有必要,可无限行。(不是子报告)

问题描述

我有一个包含不同项目和值列等的报告。我正在寻找但我失败了很多次的事情是我想通过项目创建一个自动多圆图,每行只有 3 个图表和无限行取决于我拥有的项目。

我已经查看了这个示例,但它在我报告中不起作用 SSRS 报告中图表数量的动态控制

例子

  1. 这是一个项目的可视化图表示例 Example Project A

我想要的是一个自动多图表,它为每个项目复制并粘贴此示例图表,创建一个包含 3 列的网格(以限制 SSRS 的宽度)和完成所有项目所需的行

  1. 我想要的结果 示例多图

有人可以帮我吗?我被困在这个

标签: reporting-serviceschartspie-chart

解决方案


您可以在不使用子报表的情况下执行此操作。您首先确定每个项目的行和列,然后使用矩阵显示结果。

为了这个示例的目的,我已经模拟了一些数据,您必须更新这些数据以满足您的需要。

DECLARE @t TABLE (Project varchar(10))
INSERT INTO @t VALUES ('A'), ('B'), ('C'), ('D'), ('E'), ('F'), ('G'), ('H')

DECLARE @prjData TABLE (Project varchar(10), N INT, U INT, C INT, S INT)
INSERT INTO @prjData  VALUES 
    ('A', 10, 20, 30, 40),
    ('B', 11, 21, 31, 37),
    ('C', 12, 22, 32, 34),
    ('D', 13, 23, 33, 31),
    ('E', 14, 24, 34, 28),
    ('F', 15, 25, 35, 25),
    ('G', 16, 26, 36, 22),
    ('H', 17, 27, 37, 19)

SELECT pd.*, rc.iCol, rc.iRow FROM @prjData pd 
    JOIN (
        SELECT 
            *
            , iRowNumber = ROW_NUMBER() OVER(ORDER BY Project)
            , iCol = ((ROW_NUMBER() OVER(ORDER BY Project)-1) % @MaxCols)
            , iRow = CAST(((ROW_NUMBER() OVER(ORDER BY Project)-1) / @MaxCols) as INT)
            FROM @t
    ) rc on pd.Project = rc.Project

内部查询(别名rc)计算出每个项目的行号和列号,然后我们将其连接到您现有的数据中。表变量 @t 将被您自己的包含项目列表的表替换。

@MaxCols是一个简单的变量,您可以根据需要使用它来调整列数,或者您可以硬编码这个值。在下面的输出中,我使用了“3”。我没有在查询中声明这一点,因为这将从报告中作为参数传递。

N、UC 和 S 在图表中代表您的 4 个值。

这给了我们以下结果。

在此处输入图像描述

现在我们有了数据集,添加一个矩阵控件,iRow从数据集字段拖到“行”占位符,iCol到“列”占位符,并在“数据”占位符中插入一个饼图。

调整图表单元格的大小以满足您的需要...

现在单击图表并根据需要设置值、系列等。将图表标题设置为 Project 字段(在本例中它只是一个字母)

你的报告设计看起来像这样..

在此处输入图像描述

当你运行报告时,你应该得到这样的东西......

在此处输入图像描述

这是同样的报告,MaxCols 设置为 4

在此处输入图像描述

最后,如果需要,您可以删除多余的行/列


推荐阅读