聚合值并在图表中显示

问题描述 投票:0回答:2

我正在努力解决这个问题,我无法弄清楚如何解决它。

这是我的数据集详细数据:

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

我现在用Order对它们进行分组(这在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)EndYear。这在包含所有分组的Tablix中仍然可以正常工作。结果:

Avg(MinStartMaxEnd)    Year
       4               2018
       3               2019

但我无法弄清楚如何在图表中根据计算仅显示结果中的数据。我通常在SQL端进行这些计算,但这次我不能在SQL端做这些。

问题是当我尝试在图表中添加OrderGroup时,它总是向我显示详细信息。但我需要这个小组来获得正确的价值观。隐藏或设置类别标签为Nothing不起作用。设置DataElementOutputto NoOutput也没有帮助(真实的外观):

Actual Look

我只需要在x轴上Years和值Avg(MinStartMaxEnd)。根据上面的示例数据,这将是我想要的输出:

Desired Look

解决方案发现后编辑:

如果行数据如下所示,我该怎么办:

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

由于qazxsw poi分组,这个将在tablix中分为两个单独的数据行。预期结果应如下所示:

EndYear

但是表达了一年的分组

Order   MinStartDay   MaxEndDay    EndYear  MinStartMaxEndDiff
 1      28.12.2018    02.01.2019    2019        5

不可能。

reporting-services ssrs-2008 ssrs-2012 ssrs-2016
2个回答
1
投票

您可以在Tablix中使用自定义代码来计算每年的平均值,并调用图表中的计算值。

将以下自定义代码添加到报表中

=Max(CDate(Fields!EndYear.Value), "OrderGroup")

在文本框中,您计算​​年份平均值将表达式更改为以下内容(对字段名称进行适当更改)

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.SetYearAverage(Cstr(Fields!EndYear.Value), Avg ( DateDiff("d", Min(Fields!StartDay.Value,"OrderId"), Max(Fields!EndDay.Value,"OrderId"))))

= Code.YearAvg( Cstr( Fields!EndYear.Value))

enter image description here


1
投票

这不是答案,因为我没有得到你期望的结果,工作阻碍了!但是,它相当接近所以我想如果有任何帮助我会发布它。

遗憾的是,在服务器上执行此操作并不是一种选择,因为它非常简单。

无论如何,我复制了您的数据集(通过几个字段名称更改以避免关键字冲突)并将图表设置如下。

类别组 - 无

系列组2.父组在'EndYear'上称为'ChartYearGroup',子组在OrderID上称为'ChartOrderGroup'

值 - 这里我将类别字段设置为enter image description here,表达式为

[EndYear]

这确实给出了正确的数字,但不幸的是每个订单而不是每年。

我不确定这是否可以解决。不知怎的,我想你必须隐藏订单组或将两个组合成一个,我只是没时间进行测试。

这是最终结果。

=AVG(DateDiff( "d" , Min(Fields!StartDay.Value, "ChartOrderGroup") , Max(Fields!EndDay.Value, "ChartOrderGroup") ) , "ChartYearGroup" )

© www.soinside.com 2019 - 2024. All rights reserved.