***S 2012 表达式 -- 空值补零示例
当我们使用矩阵来设计报表时,常常会发现单元格中出现空值,通常为了报表美观或是方便使用者阅读,会将空值补零,那么零要怎么补呢?在一般的SQL查询语法多半是使用以下方式来补零:
SQL Server
SELECT ProductName,ISNULL(SalesAmount,0) FROM OrderDetail
Oracle
SELECT ProductName,DECODE(SalesAmount,null,0) FROM OrderDetail
但是,使用这一招在***S的矩阵中就没有效了!因为使用SQL语法补零是在产生数据集的时候填补空值。但是,当我们使用矩阵在设计报表时,是先产生数据集,然后将数据集使用在矩阵中的,当行列交错未产生值时,会发生空值的。因此使用SQL语法是无法解决矩阵中空值数据单元格的问题。
以下介绍两种比较简单的空值补零技巧,如果是未做汇总的详细数据时(通常是出现在数据表中),可使用以下表达式:
=IIF(Fields!SALES_AMT.Value is Nothing,0,Fields!SalesAmount.Value)
如果单元格有经过汇总的时候,可使用以下语法来进行空值补零的动作,设置方法如下:
步骤1:
单击销售金额单元格,右击选择“Expression”。
步骤2:
输入以下表达式:
=iif(Count(Fields!SALES_AMT.Value) = 0, 0, Sum(Fields!SALES_AMT.Value))
步骤3:
同理也将销售数量补零,切换至“Preview”标签页,可以发现无销售量的数据单元格就补零了。
此外,还有一个与空值有关的问题,就是当我们在计算比率时,为了避免除以零错误,常常会通过以下的表达式,将分母为零的状况修正:
=IIF(分母=0,0,分子/分母)
但是,实际上如果你使用刚刚的语法来修正除以零的错误时,有时还是会发生表达式错误的结果。这通常发生在分子数据类型为NUMERIC时,对***S来说,如果分子数据类型是NUMERIC,分母内容为0,因此,默认数据类型会是INT,不同数据类型的两个数字是不可以直接相除的,而造成错误信息,如果发生类似的状况,建议利用转换函数将分母的数据类型转换为FLOAT,就可以解决这个问题。