SSRS - 按项目创建多图表,每行 3 个图表,必要时可以无限行。 (不是子报告)
SSRS -- Create Multi Chart by Project with 3 charts per row and infinite rows ifs necessary . (not subreport)
我有一份包含不同项目和值列等的报告。我正在寻找但我失败了很多次的是我想通过只有 3 个图表的项目创建一个自动多圆图表每行和无限行取决于我拥有的项目。
我看过这个例子,但它在我的报告中不起作用
Dynamic control of number of charts in SSRS reports
例子
- 这是一个项目的可视化图表示例
Example Project A
我想要的是一个自动多图表,它为每个项目复制并粘贴此示例图表,创建一个包含 3 列的网格(以限制 SSRS 的宽度)和完成所有项目所需的行
- 我想要的结果
Example multichart
有人可以帮我解决这个问题吗?我坚持这个
您可以在不使用子报表的情况下执行此操作。您首先为每个项目确定行和列,然后使用矩阵显示结果。
为了本示例的目的,我模拟了一些数据,您必须更新这些数据以满足您的需要。
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
)计算出每个项目的行号和列号,然后我们将其连接到您现有的数据。 table 变量 @t 将替换为您自己的包含项目列表的 table。
@MaxCols
是一个简单的变量,您可以根据需要使用它来调整列数,或者您可以只对该值进行硬编码。在下面的输出中,我使用了“3”。我没有在查询中声明它,因为它将作为参数从报告中传递。
N、U C 和 S 代表您图表中的 4 个值。
这给了我们以下结果。
现在我们有了数据集,添加一个矩阵控件,将 iRow
从数据集字段拖到“行”占位符,iCol
拖到“列”占位符和“数据”占位符插入饼图。
根据您的需要调整图表单元格的大小...
现在单击图表并根据需要设置值、系列等。
将图表标题设置为项目字段(在本例中它只是一个字母)
您的报告设计看起来像这样..
当你 运行 报告时你应该得到这样的东西...
这是同样的报告,MaxCols 设置为 4
最后,如果需要,您可以删除多余的rows/columns
我有一份包含不同项目和值列等的报告。我正在寻找但我失败了很多次的是我想通过只有 3 个图表的项目创建一个自动多圆图表每行和无限行取决于我拥有的项目。
我看过这个例子,但它在我的报告中不起作用 Dynamic control of number of charts in SSRS reports
例子
- 这是一个项目的可视化图表示例 Example Project A
我想要的是一个自动多图表,它为每个项目复制并粘贴此示例图表,创建一个包含 3 列的网格(以限制 SSRS 的宽度)和完成所有项目所需的行
- 我想要的结果 Example multichart
有人可以帮我解决这个问题吗?我坚持这个
您可以在不使用子报表的情况下执行此操作。您首先为每个项目确定行和列,然后使用矩阵显示结果。
为了本示例的目的,我模拟了一些数据,您必须更新这些数据以满足您的需要。
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
)计算出每个项目的行号和列号,然后我们将其连接到您现有的数据。 table 变量 @t 将替换为您自己的包含项目列表的 table。
@MaxCols
是一个简单的变量,您可以根据需要使用它来调整列数,或者您可以只对该值进行硬编码。在下面的输出中,我使用了“3”。我没有在查询中声明它,因为它将作为参数从报告中传递。
N、U C 和 S 代表您图表中的 4 个值。
这给了我们以下结果。
现在我们有了数据集,添加一个矩阵控件,将 iRow
从数据集字段拖到“行”占位符,iCol
拖到“列”占位符和“数据”占位符插入饼图。
根据您的需要调整图表单元格的大小...
现在单击图表并根据需要设置值、系列等。 将图表标题设置为项目字段(在本例中它只是一个字母)
您的报告设计看起来像这样..
当你 运行 报告时你应该得到这样的东西...
这是同样的报告,MaxCols 设置为 4
最后,如果需要,您可以删除多余的rows/columns