1)单元格显示行号,两种方法实现,相当SQL row_number() order ():,
=Rownumber(Nothing)
=Runningvalue(1,sum,nothing)
2)按组区分行号,两种方法实现:
=rownumber("组名")
=runningvalue(1,sum,"组名")
3)零除零报错解决方法:
报表设计面板(编辑处外面空白区),选择报表属性---代码-- 自定义代码:
public function divide(x as double, y as double) as double
if y=0.0 then
return 0.0
else
return x/y
end if
end function
接下来在表达式里输入你要相除的栏位或者数据
=Code.divide(sum(值1),sum(值2))
还有一种方法=A/IIF(B=0,99999999999999,B),但你不能这么写:IIF(B=0,0,A/B) 会产生BUG,不要问为什么,试试就知道。
4)SSRS 里实现excel sumifs功能(如果你还不理解excel sumifs 的功能,请先查看):
示例:sum(IIF(Fields!Team.Value="East",Fields!LeaseArea.Value,0))
运行结果是 #ERROR
修改如下:
sum(IIF(Fields!Team.Value="East",cdbl(Fields!LeaseArea.Value),0.00))
原因:采用cdbl将字段转换为双精度值Double,这样类型计算才会正确。
5)lookupset 函数应用:
如果经常使用excel的同事,应该对excel的vlookup 函数不陌生,SSRS 也有类似功能的函数 lookupset,但vlookup 有单条件和多条件查找,这里说SSRS的两个条件使用。
单条件:
=lookupset(数据集1满足条件值列,数据集2满足条件值列,要返回的值,"数据集1名") 就是两个数据集间数据提取。
多条件:
LookupSet(Fields!店铺名称.Value+“| |”+Fields!时间分析类1.Value+“| |”+Fields!时间分析类2.Value,
Fields!店铺名称.Value+“| |”+Fields!时间分析类1.Value+“| |”+Fields!时间分析类2.Value,
Fields!货品ID.Value,"DataSet3").Length
也可自定义满足固定值,如:join(lookupset(Fields!mon2.Value+“||”+"营业", Fields!mon2.Value+"||"+Fields!team.Value,Fields!fpqty.Value,"DataSet4"),",")
6)VbcrLf 函数应用:
这个函数主要是换行显示效果,相当SQL 的(select 'A' +CHAR(13)+CHAR(10)+'B'),下来介绍SSRS里面如何实现这个功能。
比如你的数据值是这样显示:11-22,现在要 22 在11的下面显示
=left(Fields!비고.Value,instrrev(列值,"-")-1)+vbcrlf+right(列值,len(列值)-instrrev(列值,"-")) 这样22 就自动换行显示了。
7) 显示登录到SSRS 的用户名
表达式里输入=User!UserID
8)显示打开报表时所花费的时间
表达式里输入:="RunningTime " +
CStr(DateDiff("s",Globals!ExecutionTime,Now())\60\60)+ ":" +Format((DateDiff("s",Globals!ExecutionTime,Now())\60) mod60,"00") + ":" +Format((DateDiff("s",Globals!ExecutionTime,Now()) mod 60),"00")
9)通过数据集定义选择时间参数
当前月的第一天到最后一天
SELECTCONVERT(DATE,dateadd(dd,-day(getdate())+1,getdate()),112)as date1,
(SELECTCONVERT(DATE,DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,getdate()),120)+'1'),120))as date2
上个月的第一天到最后一天
select convert(date,dateadd(dd,-day(dateadd(month,-1,getdate()))+1,dateadd(month,-1,getdate())),120)as date1,
convert(date,dateadd(dd,-day(getdate()),getdate()),120)as date2
当前月的第一天到当前天
SELECT CONVERT(DATETIME, LEFT(CONVERT(CHAR(8), GETDATE(),112),6) + '01') as date1,
(select convert(datetime,CONVERT(varchar(10), getdate(),120)))as date2
10)连接数据源的设置
连接字符串内容:Data Source=服务器IP;Initial Catalog=数据名,如图
今天先写到这里,改天再继续。。。。。。。。。。