首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >里程碑SSRS图表

里程碑SSRS图表
EN

Stack Overflow用户
提问于 2018-10-15 18:08:55
回答 1查看 302关注 0票数 0

我需要创建一个SSRS报告来显示项目里程碑的实际开始日期和计划开始日期(选定为输入参数),图表应该如下所示:

我在一个单独的表中创建了这个表。但是,我不知道我应该使用哪种图表类型,以及如何设置图表?(图表数据、类别组和系列组)。

(数据来自Server,SSRS版本14.0.1016.285;SSDT 15.6.4)

事先非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-16 09:10:13

这可能看起来有点长,但它很简单,所以坚持它:)

首先,我不知道您的数据结构,所以我只是做了一些假设。你可能需要重新设计其中的一些,以使它适合,但我试着保持简单。

方法是使用一个子报告来绘制圆点,并使用一个主报告来显示整个表。考虑到这一点,由于我们将有多个数据集引用我们的数据,因此在开始执行以下操作之前,我向示例数据库添加了一些表。

第一个是包含月份和年份的简单表,如果有日期表,则可以使用视图,但现在可以这样做。

代码语言:javascript
复制
CREATE TABLE prjYearMonth (Year int, Month int)

INSERT INTO prjYearMonth VALUES
(2018, 8),
(2018, 9),
(2018, 10),
(2018, 11),
(2018, 12),
(2019, 1),
(2019, 2)

接下来是项目里程碑表。

代码语言:javascript
复制
CREATE TABLE prjMileStones (msID int, msLabel varchar(50), msPlannedStart date, msActualStart date)

INSERT INTO prjMileStones VALUES
(1, 'Milestone 1', '2018-10-30', '2018-12-13'),
(2, 'Milestone 2', '2018-11-12', '2018-12-10'),
(3, 'Milestone 3', '2018-10-21', '2018-12-25'),
(4, 'Milestone 4', '2018-10-18', '2018-11-28'),
(5, 'Milestone 6', '2019-01-08', '2019-01-29')

好了,现在开始报告.

创建一个新的空报告,然后使用以下查询添加数据集

代码语言:javascript
复制
SELECT 
    * 
    FROM prjYearMonth d
    LEFT JOIN prjMileStones t on (d.Year = YEAR(t.msPlannedStart) AND d.Month = Month(t.msPlannedStart))
                or (d.Year = YEAR(t.msActualStart) AND d.Month = Month(t.msActualStart))

现在将一个矩阵项添加到报表中。添加一个在msLabel上分组的行组。

接下来,添加两个列组。首先是按月分组的组,然后添加按年分组的父组。

在行组中添加列,以便以4列( msID;msLabel;msPlannedStart;msActualStart )结束。

最后(现在)将月份字段(列标题中的表达式)设置为

代码语言:javascript
复制
= Format(DATESERIAL(2017, Fields!Month.Value, 1), "MMM")

这只会给我们一个月的名字,而不是数字(2017年是无关紧要的,任何年份都可以)。现在,只需按要求格式化。

你的报告设计应该是这样的。

如果我们现在做报告,我们会得到这个..。

现在要画点..。

为此,我们将创建一个小的子报告。子报告将接受3个参数。msID (主表中的里程碑ID )。对于这个子报表,我们将需要一个稍微不同的结构中的数据,但是工作可以在dataset查询中完成,因此数据库本身不需要任何新的数据。

所以,创建一个新的报告,让我们称之为_subMonthChart。

接下来,使用以下查询添加数据集。

代码语言:javascript
复制
DECLARE @t TABLE(msID int, msLabel varchar(50), PlannedOrActual varchar(1), msStartDate date)

INSERT INTO @t 
    SELECT msId, mslabel, 'P', msPlannedStart FROM prjMileStones
    UNION ALL
    SELECT msId, mslabel, 'A', msActualStart FROM prjMileStones


SELECT 
    1 AS Y, Day(msStartDate) as Day, PlannedOrActual 
    FROM prjYearMonth d
    LEFT JOIN @t t on (d.Year = YEAR(t.msStartDate) AND d.Month = Month(t.msStartDate))
    WHERE [Year] = @Year and [Month] = @Month and msID = @msID

您的报告现在应该有3个自动创建的参数,编辑所有三个参数以允许Nulls。

注意: dataset中的Y只是一些帮助绘制图表的任意值。我将把Y轴设置为从0到2的范围,所以1将坐在中间。

接下来,添加带有标记的线条图。别担心现在的尺寸。将值设置为Y,将类别组设置为Day,将系列组设置为PlannedOrActual

右键单击水平轴,选择属性并将Axis类型设置为Scalar,关闭“始终包含零”,然后设置Min = 1,Max = 31,Interval = 1,Interval Type = Default。

请注意,对于没有31天的月份的数据,情节点将不准确,但它们将足够接近您的目的。

右键单击垂直轴,选择属性并设置Mn=0、Max=2、Interval = 1、Interval Type = Default

接下来,右击其中一行并选择属性。将标记设置为钻石,标记大小为8pt,标记颜色为此表达式=IIF(Fields!PlannedOrActual.Value = "P", "Blue", "Green")

报告设计应该像这样..。(请特别检查突出显示的位)

现在,让我们快速测试子报告,基于我的示例数据,我将参数设置为2019、1和5,并得到以下结果.

正如我们所看到的那样,我们在1月份为这一里程碑制定的两个日期大致上是正确的。

快到了..。下一步,右击两个轴,并关闭‘显示轴’,所以我们隐藏他们。现在,将图表调整为适合于主报表单元格的内容。在我的示例中,我将大小设置为2cm,1.2cm,并将其移动到报表的左上角。然后将报告设置为与图表相同的大小(在我的例子中,再次设置为2cm,1.2cm)。

保存副报告然后回到你的主要报告..。

对于行和列相交的“数据”单元格,设置大小以匹配子报表大小(2cm,1.2cm),然后右击该单元格并插入子报表。

右键单击新插入的子报表项并选择属性。

从下拉列表中选择_subMonthChart作为子报表。

单击“参数”选项卡。为每个参数(年份/月/msID)添加一个条目,并将其值设置为dataset中的相应字段。

终于!将包含子报表的单元格上的边框设置为四面八方,以便与您的模拟.

你的报告设计应该是这样的..。

现在,当报告运行时,它将在月份、年份和里程碑ID中传递给每个单元格中的子报表,然后按需要绘制日期。

当我们做报告的时候我们最终应该得到这个..。

这可能需要一些改进,但希望你能在此基础上实现这一点。如果您有问题,我建议您重新创建整个示例,让它工作,然后交换数据库部件,以适应您的当前数据库。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52822475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档