2016-05-17 61 views
1

我有一个SSRS表达式,我正在计算和平均安装时间,但由于对每个订单有多个不同的发布,所以我只需要将独特订单的平均安装时间。由于需要报告的其他部分包括所有过帐,因此我无法将多个订单过帐分组或过滤掉除此单一表达式以外的任何地方。所以,我有以下表现:在SSRS表达式中分组

=AVG(iif(IsNumeric(Fields!Setup.Value), CDbl(Fields!Setup.Value), 0)) 

而且我基本需要的重写......伪码进入上述表达式的语法正确...

=IIf((Fields!Order_Number.Value) is unique), AVG(iif(IsNumeric(Fields!Setup.Value), CDbl(Fields!Setup.Value), 0), else nothing) 

我敢肯定有CountDistinct子句将解决此问题,但我很难找到正确的语法。

+0

你有权编辑数据源的查询? – StevenWhite

+0

我这样做,我可以在主要查询中只筛选唯一的order_number,但我需要报告其他部分的所有单个条目。 –

回答

0

添加一列,以确定每个订单中的唯一行:

ROW_NUMBER() OVER (PARTITION BY YourOrderID ORDER BY YourOrderID) as RowNumber 

计算字段添加到您的数据集。让我们把它称为“FilteredSetup”:

=IIf(Fields!RowNumber.Value = 1, Fields!Setup.Value, Nothing) 

现在,你可以参考这个新列在您的报告,它会正确地聚合:

=Sum(Fields!FilteredSetup.Value) 
+0

谢谢。那真的很接近。刚刚遇到了关于尝试对数据类型使用聚合函数的错误,该数据类型由于数据存储为nvarchar而无效。易于修复: = SUM(iif(IsNumeric(Fields!FilteredSetup.Value),CDbl(Fields!FilteredSetup.Value),0)) –