我正在针对某些列中包含空值的数据存储库编写报告。问题是建立表达与激素老太太一样气质,不喜欢我的功能混合。
这是我写的一个表达式,如果字段中的数据为空/无则不起作用:
=IIF(
IsNumeric(Fields!ADataField.Value),
RunningValue(
IIF(
DatePart("q", Fields!CreatedOn.Value) = "2",
Fields!ADataField.Value,
0
),
Sum,
Nothing
),
Sum(0)
)
(伪) “如果数据有效且数据是在一年中的第二季度创建的,则将其添加到总和中,否则,将总和加零。”
看起来非常直截了当。并且表达的各个部分独立工作。 IE:IsNumeric(),DatePart()等。但是当我把它们放在一起时,表达式会抛出一个错误。
我试图对上面显示的内容进行每一种排列,但都无济于事。 Fields!ADataField.Value中的空值会导致错误。
生成的具体错误:
“textrun的值表达式”使用了 非数字数据的数字聚合函数。数字 聚合函数(Sum,Avg,StDev,Var,StDevP和VarP)只能 汇总数字数据。“
思想?
答案 0 :(得分:1)
尝试使用:
=SUM(IIF(ISNothing(Fields!ADataField.Value), 0,
(IIF(IsNumeric(Fields!ADataField.Value), IIF(DatePart("q", Fields!CreatedOn.Value) = "2", Fields!ADataField.Value, 0), 0)
)))
答案 1 :(得分:1)
您可以使用以下方法处理发生的NULL值:
Iif(Fields!ADataField.Value Is Nothing, 0, Fields!ADataField.Value)
这样你可以用其他东西替换任何Null值(在我上面的例子中为0)。要将它放入表达式的上下文中,它应该如下所示:
=Iif(Fields!ADataField.Value Is Nothing,0,
RunningValue(
IIF(
DatePart("q", Fields!CreatedOn.Value) = "2",
Fields!ADataField.Value,
0
),
Sum,
Nothing
)
)
答案 2 :(得分:1)
SSRS中的VB表达式不进行短路评估。也就是说,评估IIF
语句的所有三个参数,如果它们中的任何一个抛出异常(#Error
),则整个表达式抛出错误。)
因此,无论ADataField的值是什么,都将评估此部分:
RunningValue(
IIF(
DatePart("q", Fields!CreatedOn.Value) = "2",
Fields!ADataField.Value,
0
),
Sum,
Nothing
),
即使代码无法返回结果,也会发生,例如当IsNumeric(Fields!ADataField.Value)
为false时。
所以你总是要执行RunningValue函数,如果CreatedOn字段在第2季度时ADataField中有非数字数据,那么每次调用都会产生错误。
尝试此选择:
=IIF(
IsNumeric(Fields!ADataField.Value),
RunningValue(
IIF(
DatePart("q", Fields!CreatedOn.Value) = "2"
AND IsNumeric(Fields!ADataField.Value),
Fields!ADataField.Value,
0
),
Sum,
Nothing
),
Sum(0)
)
答案 3 :(得分:0)
大家好。我找到了解决方案。非常感谢所有伟大的建议。在我决定发布之前,我已经尝试了大部分内容。因此,理智检查非常有价值!
无论出于什么不合逻辑的原因,修复此问题的方法是将字段包裹在CInt()中甚至 后确认该字段已经是数字。如果没有它,它将不允许Sum()针对该字段运行。这是最终采用的代码:
=Sum(
IIF(
IsNumeric(Fields!ADataField.Value) And
DatePart("q", Fields!createdon.Value) = "1",
CInt(Fields!ADataField.Value),
0
)
)
我们在这里尝试过的任何和所有其他排列,包括那些使用RunningValue()的排列,都是在用CInt()包装IIF()的“真实”部分之后都能正常工作。
请不要斧头我为什么这样做,但它没有没有它。除了最基本的表达之外的任何东西似乎总是非常易变。
再次感谢大家。回答问题是GShenanigan在聊天期间加倍努力。希望我能把它交给每个人。你们真棒。