我正在努力解决这个问题,我无法弄清楚如何解决它。
这是我的数据集详细数据:
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
不起作用。设置DataElementOutput
to NoOutput
也没有帮助(真实的外观):
我只需要在x轴上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
由于qazxsw poi分组,这个将在tablix中分为两个单独的数据行。预期结果应如下所示:
EndYear
但是表达了一年的分组
Order MinStartDay MaxEndDay EndYear MinStartMaxEndDiff
1 28.12.2018 02.01.2019 2019 5
不可能。
您可以在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))
这不是答案,因为我没有得到你期望的结果,工作阻碍了!但是,它相当接近所以我想如果有任何帮助我会发布它。
遗憾的是,在服务器上执行此操作并不是一种选择,因为它非常简单。
无论如何,我复制了您的数据集(通过几个字段名称更改以避免关键字冲突)并将图表设置如下。
类别组 - 无
系列组2.父组在'EndYear'上称为'ChartYearGroup',子组在OrderID上称为'ChartOrderGroup'
[EndYear]
这确实给出了正确的数字,但不幸的是每个订单而不是每年。
我不确定这是否可以解决。不知怎的,我想你必须隐藏订单组或将两个组合成一个,我只是没时间进行测试。
这是最终结果。
=AVG(DateDiff(
"d"
, Min(Fields!StartDay.Value, "ChartOrderGroup")
, Max(Fields!EndDay.Value, "ChartOrderGroup")
)
, "ChartYearGroup"
)