ssrs 按字段名分组

ssrs group by field name

在 SSRS 中,我有一个从 TFS 工作项中提取指标的数据集,如下所示:

ID  | Time in Ready  |  Time in Active  |  Time in Resolved
-----------------------------------------------------------
1   |       6        |        3         |        2
2   |       2        |        4         |        1
3   |       1        |        7         |        1

我想创建一个条形图,像这样对每个状态的时间进行平均:

5  |                 |       4.7        |  
4  |        3        |      -----       |
3  |      -----      |      |   |       |        1.3
2  |      |   |      |      |   |       |       _____
1  |      |   |      |      |   |       |       |   |  
-------------------------------------------------------------
   |  Time in Ready  |  Time in Active  |  Time in Resolved

但我不知道要在我的类别组中放入什么才能使其按字段名称分组。如果我只是将 3 个聚合字段添加到值部分,标题不会显示在水平轴上。

我可以使用给定的数据集生成预期的图表吗?如何设置图表属性?

最简单的方法是让您的数据集return具有以下格式的数据

Status TimeValue
Ready    6
Ready    2
Ready    1
Active   3
Active   4
Active   7
Resolved 2
Resolved 1
Resolved 1

那么您的类别就是 Status 列。

如果您无法更改数据集(这是最简单的解决方案),您可以考虑使用 table 和数据栏,但这需要大量工作。

将 table 拖到您的报告上并将其附加到您的数据集。对于上面的示例,您将需要 4 列。最左边的列将用于保存轴标签。

删除 table 中的 header 行。

创建一个新组作为现有详细信息行组的 parent。鼠标右键单击 Details Row Group -> Add Group -> Parent Group。然后在 Tablix Group 中将 "True" 键入分组依据文本框。这将对整个数据集进行分组。

删除详细信息组(鼠标右键单击详细信息组然后删除组),在打开的选项框中选择"Delete Group only"。

删除第一行有True的第一列,这是按列分组,不需要。在打开的选项框中选择"Delete Column only"。

如果此时您还没有这样做,请添加一个新列,这样就有四列了。

在上方插入一行 Outside Group(这将是标题)。合并右边的三个单元格。并在此框中输入图表的名称。

在下面的组内插入一行(这些将是列标签)。在最右边的三个单元格的底行中输入三列标签。

在第一个单元格的中间行中输入 0(这将是轴),然后在其他三个单元格中输入每列的平均值计算。如果您想在柱上使用 data-labels,我建议您使用这样的公式:

=Format(Avg(Fields!Time_in_Ready.Value),"##.##")

此时它应该是这样的:

然后您需要将数据栏(列)拖放到中间行的四个单元格中。然后用鼠标右键单击每个 "Convert to Full Chart"。然后删除每一个中的图表标题、图例和 x 轴标题。它应该看起来像这样:

然后您需要将每个图形的轴最大值和最小值设置为相同。右键单击每个图形中的轴,然后单击垂直轴属性。 在轴选项中,将最大值设置为 suitable 数字或使用以下公式计算最大平均值,四舍五入。

=ROUND(SWITCH(AVG(Fields!Time_in_Ready.Value) > AVG(Fields!Time_in_Active.Value) & AVG(Fields!Time_in_Ready.Value) > AVG(Fields!Time_in_Resolved.Value), AVG(Fields!Time_in_Ready.Value), AVG(Fields!Time_in_Active.Value) > AVG(Fields!Time_in_Resolved.Value), AVG(Fields!Time_in_Active.Value), True,AVG(Fields!Time_in_Resolved.Value))) + 1

您还需要设置间隔,在这种情况下我会使用 1,但对于较大的平均值,您可能会使用 5 或 10。现在 运行 检查结果的图表,它应该如下所示:

如果需要,您现在可以添加次要网格线(通过右键单击每个轴,然后显示次要网格线)并添加数据标签(右键单击每个条形并显示数据标签)。

现在我们需要隐藏最右边的三个包含条形图的单元格上的轴(右键单击轴,然后单击“垂直轴属性”->“标签”->“隐藏轴标签”)。

然后我们需要对包含轴的第一个单元格进行一些更改。用鼠标右键单击轴,然后单击“标签”选项卡并单击“隐藏第一个和最后一个标签”(这是确保轴与其他图形对齐所必需的)。然后单击标签字体 table 并将字体大小固定为 suitable,例如 10pt(这是必需的,因为我们要减小此列的大小,但仍然需要足够大的标签)。

现在将第一列(轴)的宽度设置为大约 0.8 厘米,将其他列设置为大约 1.5 厘米。

Designer 中的最终图表应如下所示:

预览中的最终图表应如下所示:

您可以通过将 WritingMode 属性 设置为 Rotate270

来旋转类别标签