我正在为这个问题而苦苦挣扎,我不知道该怎么解决。
这是我的数据集详细数据:
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
设置为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
由于EndYear
分组,因此在Tablix中将这一行分为两个单独的数据行。预期结果应如下所示:
Order MinStartDay MaxEndDay EndYear MinStartMaxEndDiff
1 28.12.2018 02.01.2019 2019 5
但是一年中的分组带有表达式
=Max(CDate(Fields!EndYear.Value), "OrderGroup")
是不可能的。
答案 0 :(得分:1)
这不是一个答案,因为我没有得到您所期望的结果,工作变得很麻烦!但是,它非常接近,所以我认为如果有帮助的话,我会发布它。
在服务器上这样做很可惜,因为这样做很容易。
无论如何,我复制了您的数据集(对字段名进行了一些更改以避免关键字冲突),然后按如下所示设置图表。
类别组-无
系列组2.父组位于“ EndYear”上,称为“ ChartYearGroup”,子组位于OrderID上,称为“ ChartOrderGroup”
值-在这里,我将类别字段设置为[EndYear]
,表达式为
=AVG(DateDiff(
"d"
, Min(Fields!StartDay.Value, "ChartOrderGroup")
, Max(Fields!EndDay.Value, "ChartOrderGroup")
)
, "ChartYearGroup"
)
这确实给出了正确的数字,但不幸的是,每个订单而不是每年显示。
我不确定这是否可以解决。我以某种方式猜测您必须隐藏订单组或将这两个组合并为一个,我只是没时间测试。
这是最终结果。
答案 1 :(得分:1)
您可以在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))