汇总值并在图表中显示

Aggregate values and display in chart

我正在为这个问题苦苦挣扎,我不知道如何解决它。

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

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 中添加了另一个组并显示每个 EndYearAvg(MinStartMaxEndDiff)。这在所有分组的 tablix 中仍然可以正常工作。结果:

Avg(MinStartMaxEnd)    Year
       4               2018
       3               2019

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

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

我只需要 x-axis YearsAvg(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

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

Order   MinStartDay   MaxEndDay    EndYear  MinStartMaxEndDiff
 1      28.12.2018    02.01.2019    2019        5

但是用表达式

对年份进行分组
=Max(CDate(Fields!EndYear.Value), "OrderGroup")

不可能。

这不是答案,因为我没有得到您期望的结果,工作妨碍了!然而,它相当接近所以我想我会 post 它以防它有任何帮助。

遗憾的是,在服务器上执行此操作不是一种选择,因为它真的很容易。

无论如何,我复制了你的数据集(更改了几个字段名称以避免关键字冲突)并按如下方式设置图表..

类别组 - None

系列组 2。父组在 'EndYear' 上,名为 'ChartYearGroup',子组在名为 'ChartOrderGroup'

的 OrderID 上

值 - 这里我将类别字段设置为 [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.SetYearAverage(Cstr(Fields!EndYear.Value), Avg ( DateDiff("d", Min(Fields!StartDay.Value,"OrderId"), Max(Fields!EndDay.Value,"OrderId"))))

然后将图表表达式设置为

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