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)
per
EndYear
。这在所有分组的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%的列粘在一起。这实际上是可行的:-)谢谢,我已经认为这是不可能的。还有一个问题。我用这个来编辑我的问题。也许你也有解决这个问题的办法。不客气。需求的变化