Reporting services 聚合值并显示在图表中
我正在努力解决这个问题,但我不知道如何解决它 这是我的数据集详细数据:Reporting services 聚合值并显示在图表中,reporting-services,ssrs-2008,ssrs-2012,ssrs-2016,Reporting Services,Ssrs 2008,Ssrs 2012,Ssrs 2016,我正在努力解决这个问题,但我不知道如何解决它 这是我的数据集详细数据: Order Item StartDay EndDay EndYear StartEndDiff 1 1 01.01.2018 02.01.2018 2018 1 1 2 03.01.2018 05.01.2018 2018 2 2 1 05.01.2019 06.01.2019
Order Item StartDay EndDay EndYear StartEndDiff
1 1 01.01.2018 02.01.2018 2018 1
1 2 03.01.2018 05.01.2018 2018 2
2 1 05.01.2019 06.01.2019 2019 1
2 2 06.01.2019 06.01.2019 2019 0
2 3 08.01.2019 10.01.2019 2019 1
3 1 07.01.2019 08.01.2019 2019 1
我现在按照顺序对它们进行分组(这在tablix中很好)。组名为OrderGroup
:
Order MinStartDay MaxEndDay EndYear MinStartMaxEndDiff
1 01.01.2018 05.01.2018 2018 4
2 05.01.2019 10.01.2019 2019 5
3 07.01.2019 08.01.2019 2019 1
对于MinStartMaxEndDiff
我得到了以下表达式:
=DateDiff("d", Min(Fields!StartDay.Value, "OrderGroup"), Max(Fields!EndDay.Value, "OrderGroup"))
现在我在tablix中添加了另一个组,并显示了Avg(MinStartMaxEndDiff)
perEndYear
。这在所有分组的tablix中仍然可以正常工作。结果是:
Avg(MinStartMaxEnd) Year
4 2018
3 2019
但我不知道如何在图表中仅显示基于计算结果的数据。我通常在SQL端进行这些计算,但这次我不能在SQL端进行这些计算
问题是,当我尝试在图表中添加OrderGroup
时,它总是显示详细信息。但我需要这群人得到正确的价值观。隐藏或将类别标签设置为Nothing
无效。另外,将DataElementOutput
设置为NoOutput
也没有帮助(真实外观):
我只需要x轴上的年份
和平均值(MinStartMaxEnd)
。根据上面的样本数据,这将是我想要的输出:
找到解决方案后编辑:
如果行数据如下所示,我该怎么办:
Order Item StartDay EndDay EndYear StartEndDiff
1 1 29.12.2018 02.01.2019 2019 4
1 2 28.12.2018 30.12.2018 2018 2
Order MinStartDay MaxEndDay EndYear MinStartMaxEndDiff
1 28.12.2018 02.01.2019 2019 5
由于EndYear
分组,这一行将在tablix中分成两个单独的数据行。预期结果应如下所示:
Order Item StartDay EndDay EndYear StartEndDiff
1 1 29.12.2018 02.01.2019 2019 4
1 2 28.12.2018 30.12.2018 2018 2
Order MinStartDay MaxEndDay EndYear MinStartMaxEndDiff
1 28.12.2018 02.01.2019 2019 5
而是一组年份的表达式
=Max(CDate(Fields!EndYear.Value), "OrderGroup")
不可能。这不是一个答案,因为我没有得到你期望的结果,工作阻碍了我!然而,它相当接近,所以我想我会张贴它,以防它有任何帮助
遗憾的是,在服务器上这样做并不是一个选项,因为这将非常容易
无论如何,我复制了您的数据集(为了避免关键字冲突,对字段名进行了一些更改),并按如下方式设置了图表
类别组-无
系列组2。父组位于名为“ChartYearGroup”的“EndYear”上,子组位于名为“ChartOrderGroup”的OrderID上
值-这里我将Category字段设置为[EndYear]
,表达式为
=AVG(DateDiff(
"d"
, Min(Fields!StartDay.Value, "ChartOrderGroup")
, Max(Fields!EndDay.Value, "ChartOrderGroup")
)
, "ChartYearGroup"
)
这确实给出了正确的数字,但不幸的是显示的是每个订单,而不是每年
我不确定这是否能解决。不知何故,我想你必须隐藏订单组或将两个组合并为一个,我只是没有时间进行测试
这是最终结果
这不是答案,因为我没有得到你期望的结果,工作妨碍了我!然而,它相当接近,所以我想我会张贴它,以防它有任何帮助
遗憾的是,在服务器上这样做并不是一个选项,因为这将非常容易
无论如何,我复制了您的数据集(为了避免关键字冲突,对字段名进行了一些更改),并按如下方式设置了图表
类别组-无
系列组2。父组位于名为“ChartYearGroup”的“EndYear”上,子组位于名为“ChartOrderGroup”的OrderID上
值-这里我将Category字段设置为[EndYear]
,表达式为
=AVG(DateDiff(
"d"
, Min(Fields!StartDay.Value, "ChartOrderGroup")
, Max(Fields!EndDay.Value, "ChartOrderGroup")
)
, "ChartYearGroup"
)
这确实给出了正确的数字,但不幸的是显示的是每个订单,而不是每年
我不确定这是否能解决。不知何故,我想你必须隐藏订单组或将两个组合并为一个,我只是没有时间进行测试
这是最终结果
您可以使用tablix中的自定义代码来计算每年的平均值,并调用图表中的计算值
将以下自定义代码添加到报告中
Public Dim YearAvg As New System.Collections.Generic.Dictionary(Of String , Decimal )
Public Function SetYearAverage( ByVal s As String, ByVal d AS Decimal) As Decimal
YearAvg.Add(s,d)
Return d
End Function
在文本框中,计算年平均值,将表达式更改为以下内容(对字段名称进行适当更改)
然后将图表表达式设置为
= Code.YearAvg( Cstr( Fields!EndYear.Value))
您可以使用tablix中的自定义代码来计算每年的平均值,并调用图表中的计算值
将以下自定义代码添加到报告中
Public Dim YearAvg As New System.Collections.Generic.Dictionary(Of String , Decimal )
Public Function SetYearAverage( ByVal s As String, ByVal d AS Decimal) As Decimal
YearAvg.Add(s,d)
Return d
End Function
在文本框中,计算年平均值,将表达式更改为以下内容(对字段名称进行适当更改)
然后将图表表达式设置为
= Code.YearAvg( Cstr( Fields!EndYear.Value))
谢谢你的努力。是的,这正是我每次结束的时候。我还考虑了一个在图中隐藏Odergroup的选项,但没有找到。如果您现在用真实数据更改我的示例数据集,您将获得我发布的第一张图像。但我想我同意你的看法,这是不可能的。如果我有时间,我会再看一眼,但我的直觉是你赢了;我做不到这一点。。有一件事我确实想到了,但没有尝试过,那就是看看你是否可以设置相同的颜色,并动态调整点的宽度,这样最终的结果就会看起来正确。因此,根据简单的数据集,2018年将是100/1,2019年将是100/2,这两个50%的列粘在一起感谢您的努力。是的,这正是我每次结束的时候。我还考虑了一个在图中隐藏Odergroup的选项,但没有找到。如果您现在用真实数据更改我的示例数据集,您将获得我发布的第一张图像。但我想我同意你的看法,这是不可能的。如果我有时间,我会再看一眼,但我的直觉是你赢了;我做不到这一点。。有一件事我确实想到了,但没有尝试过,那就是看看你是否可以设置相同的颜色,并动态调整点的宽度,这样最终的结果就会看起来正确。因此,根据简单的数据集,2018年将是100/1,2019年将是100/2,两个50%的列粘在一起。这实际上是可行的:-)谢谢,我已经认为这是不可能的。还有一个问题。我用这个来编辑我的问题。也许你也有解决这个问题的办法。不客气。需求的变化