汇总值并在图表中显示
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 中添加了另一个组并显示每个 EndYear
的 Avg(MinStartMaxEndDiff)
。这在所有分组的 tablix 中仍然可以正常工作。结果:
Avg(MinStartMaxEnd) Year
4 2018
3 2019
但我不知道如何根据计算在图表中仅显示结果中的数据。我通常在 SQL 端进行这些计算,但这次我不能在 SQL 端进行计算。
问题是当我尝试在图表中添加 OrderGroup
时,它总是显示详细信息。但我需要这个小组来获得正确的价值观。隐藏类别标签或将类别标签设置为 Nothing
无效。同样将 DataElementOutput
设置为 NoOutput
也没有帮助(真实外观):
我只需要 x-axis Years
和 Avg(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))
我正在为这个问题苦苦挣扎,我不知道如何解决它。
这是我的数据集详细数据:
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 中添加了另一个组并显示每个 EndYear
的 Avg(MinStartMaxEndDiff)
。这在所有分组的 tablix 中仍然可以正常工作。结果:
Avg(MinStartMaxEnd) Year
4 2018
3 2019
但我不知道如何根据计算在图表中仅显示结果中的数据。我通常在 SQL 端进行这些计算,但这次我不能在 SQL 端进行计算。
问题是当我尝试在图表中添加 OrderGroup
时,它总是显示详细信息。但我需要这个小组来获得正确的价值观。隐藏类别标签或将类别标签设置为 Nothing
无效。同样将 DataElementOutput
设置为 NoOutput
也没有帮助(真实外观):
我只需要 x-axis Years
和 Avg(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))