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
来旋转类别标签
在 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
来旋转类别标签