首页 > 解决方案 > SSRS:与 NULLS 竞争时的 SUM 值

问题描述

在 SSMS 中,这很容易通过ISNULL函数实现。那么在 SSRS 中,我将如何SUM从其中一个具有的两列中获取值NULLS

以下是数据示例:

在此处输入图像描述

所以如果一个pro_rate值存在,我想在聚合中使用它,但是如果它是NULL,那么我需要从cost列中拉取。这是我最近对表达式的尝试:

=iif(isnothing(sum(Fields!pro_rate.Value), sum(Fields!cost.Value), sum(Fields!pro_rate.Value)))

在 SQL 中,我会简单地编写sum(isnull(pro_rate, cost))(以确保清楚我的结果应该是什么),但我的#Error报告中不断出现可怕的情况。


更新1:我将查询更改为以下内容并得到#Error。

=sum(iif(isnothing(Fields!pro_rate.Value), Fields!cost.Value, Fields!pro_rate.Value))

在此处输入图像描述

标签: sql-serverreporting-services

解决方案


在查看了您的数据和使用的表达式后,我得出的结论是,由于转换错误,您看到了该错误消息。看起来您的cost字段是一种INT数据类型,因为所有值似乎都四舍五入到最接近的整数,并且该pro_rate字段似乎是一种DECIMAL数据类型。当您尝试将SUM整数转换为没有适当精度级别的小数时,这似乎会导致问题。

为了测试这一点,我创建了以下简单数据集:

CREATE TABLE #temp (A VARCHAR(2), B INT, C DECIMAL(4,2))

INSERT INTO #temp (A,B,C)
VALUES ('A', '5', '1.7'), ('B', '10', '2.6'), ('C', '9', NULL)

SELECT * FROM #temp

有了这些数据,我能够测试并确认我的理论是正确的,您应该能够通过在Derrick Moeller提供的表达式中围绕字段#Error放置一个函数来修复您的理论。CDECcost

在此处输入图像描述


推荐阅读