Reporting services 如果字符串在SSRS中为数字,则将字符串转换为十进制,以计算加权平均值

Reporting services 如果字符串在SSRS中为数字,则将字符串转换为十进制,以计算加权平均值,reporting-services,vbscript,Reporting Services,Vbscript,我在SSRS中有一个数据集,其中一列包含小数和字符串值“N/a”。SQL将列强制转换为字符串(varchar(10))。 这是数据集的一个示例: Board Urgency TicketCounty AveResTime AveResolTime Support Open - Priority 2 4 5.766666 N/A Support Priority 1 2

我在SSRS中有一个数据集,其中一列包含小数和字符串值“N/a”。SQL将列强制转换为字符串(varchar(10))。
这是数据集的一个示例:

 Board      Urgency             TicketCounty    AveResTime  AveResolTime
 Support    Open - Priority 2   4               5.766666    N/A
 Support    Priority 1          2               1.833333    0.125925
 IT         Priority 1          3               2.733333    0.875925
 IT         Priority 2          1               0.000000    0.294444
在总计行中,我需要计算每个板的平均时间的加权平均值。 这是我创建的表达式:

=SUM(Fields!TicketCountByPriority.Value * IIF(IsNumeric(Fields!AverageResolutionTime_BusDays.Value)=1, CDec(Fields!AverageResolutionTime_BusDays.Value), 0))/SUM(IIF(IsNumeric(Fields!AverageResolutionTime_BusDays.Value)=1, Fields!TicketCountByPriority.Value, 0))
对于支撑板,显示的值为
#Error
对于IT总计,显示的值为
NaN

我认为问题在于,当字符串值都是数字且值为“N/A”时,AveraleTime中的字符串值没有被转换,这会抛出一个错误。 当值为“N/A”时,如何将字符串转换为小数,并将值设置为0

我纠正了一个问题,这样,如果所有的值都是数字,则计算加权平均值。 我删除了“=1”

 =SUM(Fields!TicketCountByPriority.Value * IIF(IsNumeric(Fields!AverageResolutionTime_BusDays.Value), CDec(Fields!AverageResolutionTime_BusDays.Value), 0))/SUM(IIF(IsNumeric(Fields!AverageResolutionTime_BusDays.Value), Fields!TicketCountByPriority.Value, 0))
如果该值为
N/A
,则计算中不使用0值,并且我仍然在结果中得到
#Error

更新 我使用以下代码得到了要计算的加权平均值:

=IIF(IsNumeric(Fields!AverageResolutionTime_BusDays.Value), SUM(Fields!TicketCountByPriority.Value * CDec(IIF(IsNumeric(Fields!AverageResolutionTime_BusDays.Value), Fields!AverageResolutionTime_BusDays.Value, 0)))/SUM(IIF(IsNumeric(Fields!AverageResolutionTime_BusDays.Value), Fields!TicketCountByPriority.Value, 0)), 0)
我不得不在if语句中进行计算。
我仍然需要处理所有值都是“N/A”的情况,然后正如@Alan所说的,会有一个被零除的错误。

表达式的第二部分基本上是说IF
字段!AverageResolutionTime\u BusDays.Value
不是一个数字,除以零。如果让表达式在数值实例中工作,然后将其包装在进行数值测试的if中,可能会更容易。目前无法测试,但类似于

IIF(IsNumeric(Fields!AverageResolutionTime_BusDays.Value), YourWorkingExpressionHere, 0). 

如果要显示空白而不是零,可以将最后的零替换为“Nothing”(无引号)

您可以检查“TicketCounty”列的数据类型,还是将其简单地包装在CInt()中,以确保两边的数字都是乘/除的。很多次我都遇到了这个错误,只需要在int列上放置一个CInt()!AverageResolutionTime\u BusDays.Value不是一个被零除的数字。如果让表达式在数值实例中工作,然后将其包装在进行数值测试的if中,可能会更容易。目前无法测试,但类似于。IIF(IsNumeric(Fields!AverageResolutionTime\u BusDays.Value),您的工作表达式为0)。如果要显示空白而不是零,可以将最后的零替换为“Nothing”(无引号)。为了消除“被零除”的问题,我将表达式更改为仅分子:
=SUM(Fields!TicketCountByPriority.Value*IIF(IsNumeric(Fields!AverageResolutionTime\u BusDays.Value)、CDec(IIF(IsNumeric(字段!AverageResolutionTime_BusDays.Value),字段!AverageResolutionTime_BusDays.Value,0)),0)
但当分辨率列中的一个值为N/A时,我仍然得到
#错误
。我在TicketCount周围添加了
CInt
,但该值始终为int且大于0。它不会改变结果。在没有可用数据时添加了
N/A
。因此看起来不错。谢谢大家!@AlanSchofield-pos这是我的最终表达式:
=SUM(Fields!TicketCountByPriority.Value*IIF(IsNumeric(Fields!AverageResolutionTime\u BusDays.Value)),CDec(IIF(IsNumeric(Fields!AverageResolutionTime\u BusDays.Value)‌​e) ,字段!AverageResolutionTime\u BusDays.Value,0),0))