SSRS 中的系统可用性图表
如何在 SSRS 中构建系统可用性时间线
引言
我们目前正在进行一些仪表板开发,以向我们的客户展示系统可用性数据。SQL Server Reporting Service (SSRS) 是我们用来驱动系统的仪表板引擎之一。使用传统的条形图或折线图来描绘过去 24 小时内的系统可用性(正常/停用/降级)的精确概念并不是很直观。一个更用户友好的方法将是使用颜色编码的系统可用性时间线视图。我们可以使用以下两种基本显示模型。第一种是过去 24 小时的连续时间线。第二种是按小时划分的时间线。我们使用红色表示系统停机时间,黄色表示系统降级,绿色表示系统正常。经过一些研究和调整后,我提出了一个在 SSRS 中创建这种类型图表的相当简单的解决方案。以下是步骤。

Using the Code
- 查看您的源数据。我们的系统监控数据在数据库中如下所示。状态 1 表示正常,2 表示降级,3 表示停机时间。Period 表示数据更新的频率。120 表示 120 秒,您可以从时间戳列中看到。
- 整理您的数据。使用以下简单查询将帮助您将数据重新格式化为我们在 SSRS 中构建仪表板图表所需的内容。我将在下一步中解释每一列。
SELECT serviceame , time_stamp , DATENAME(HOUR, time_stamp) + ':' + right('0' + DATENAME(mi, time_stamp), 2) as time , status , 1 as dummy FROM monitoring_data
- 构建第一个 SSRS 可用性图表。就像所有 SSRS 报告一样,您首先必须创建数据源,然后使用上面的查询来创建数据集。创建数据集后,将柱形图插入到报告中。
我通常会删除图例、标题、x 轴数据标记和 x 轴标题,只是为了使时间线看起来更清晰。将“dummy”拖到值窗格中,将“time”拖到类别组窗格中。您需要按 time_stamp 列对类别组进行排序,该列是实际的 datetime 列,以便获得正确的时间序列。正如您所看到的,“Dummy”是一个常量数字,在我的报告中是 1。此列用于显示值,因此我们可以强制此图表中的所有列具有相同的高度,并且我们的时间线将看起来像一条直线。
现在,如果我们运行结果,我们可以看到一个非常奇怪的图表,就像我们在这里看到的那样。我们越来越近了,现在我们只需要调整一些图表设置。
- 调整您的图表。您需要在当前图表上更改三个地方,才能使其看起来像我在本文开头展示的那样。
第一件事是删除所有空白,使其看起来像一个连续的时间线。单击柱形图系列。转到属性的“常规”部分。展开“自定义属性”。将“
PointWidth
”属性更改为1
。SSRS 将一列和该列右侧的空白视为一个总宽度单位。PointWidth
属性用于设置柱宽占总宽度单位的百分比。如果将此值设置为1
,则列将占据所有空间,因此我们可以消除空白。我们需要更改的第二件事是列的颜色。单击柱形图系列,然后转到“
外观
”属性部分。将颜色设置更改为使用表达式。键入以下公式。当然,此公式是基于我们的数据;这部分的核心是为颜色编码的可视化定义每个单独列的颜色。我想做的最后一个更改是确保所有时间标记都以一小时为间隔显示。在我的情况下,我们每 2 分钟有一列,每小时有 30 列。单击图表 x 轴。转到“
标签
”属性部分。将“LabelInterval
”属性更改为30
。现在您可以运行报告了。完成! 您的系统可用性时间线将如下所示。您可以根据您的需求和数据结构定制此方法。
现在让我们更进一步。在本文的开头,我展示了两种可用性可视化。第一个在上面已经解释过了。第二个实际上非常接近第一个。我不会详细介绍这些步骤。但以下是您需要从以前的流程中调整的一些差异。

- 将您的图表类型从柱形图更改为堆积柱形图。
- 由于这是按小时划分的,您需要在查询中分别解析小时和分钟。修改您的查询以
SELECT serviceame , time_stamp , DATENAME(HOUR, time_stamp) + ':' + right('0' + DATENAME(mi, time_stamp), 2) as time , status , 1 as dummy , DATENAME(HOUR, time_stamp) as hours , right('0' + DATENAME(mi, time_stamp), 2) as minutes FROM monitoring_data
- 将“小时”添加到类别组窗格,将“分钟”添加到系列组窗格。
现在运行您的图表,您将看到以下结果。每一列都是一个小时,分钟从底部开始递增。
最终,您将能够在 SSRS 报告中更改柱形图,并将其用作连续的时间线来直观地表示系统可用性。希望这有助于您构建自己的可用性图表的基线。