ReportingServies——SQLServer报表开发综合实例

上一篇:ReportingServies报表开发实例教程

如果我们安装了sqlserver2008 R2,将会自动安装一个报表开发工具

不要以为此报表开发工具只适合于sqlserver2008,其实在sqlserver2012中也是支持的,事实上我现在项目中就是使用的sqlserver2012。

使用此工具进行报表开发,将会十分快速而且方便。这里我通过一个综合实例来演示它的使用技巧,可以毫不夸张的说,如果你能使用此工具把这个Demo做出来,那么工作中遇到的80%报表,你都能够使用此工具进行开发了。

先来看下我们要实现的效果:

报表中使用到的表及字段:

--table 用水水量:hx_t_waterusedamount
--字段 开户信息:hx_fcustomerandmeterrelaid 主键:hx_t_WaterUsedAmountId  水表:hx_fmeterid 区段:hx_fzone 实用水量:hx_famount
--估水原因:hx_festimateamountreason  结算水量:hx_fpayamount
--抄表类型hx_frecordtype (估水:,000,001 未抄见:100,000,002 正常:100,000,000 预付费卡表估水:100,000,003)
--水量状态:hx_fstate(计划:100,000,000,已录入水量:100,000,001,等待录入金额:100,000,002,已生成应收:100,000,006,等待审核:100,000,004)
<span style="font-family:宋体;">--</span>本次抄表止度:hx_freading
--用水年份:hx_fyear  用水月份:hx_fmonth 次:hx_FTimes
--本次抄表时间:hx_frecorddate  预计水费:hx_fprepayment 预计代收费:hx_fpreproxypayment

--table 用水类别hx_t_watercategory
--field 统计一类:hx_fstatcategoryoneid 主键:hx_t_watercategoryid 名称:hx_fname

--table 用水性质hx_t_waterproperty
--field 主键:hx_t_waterpropertyid 用水类别:hx_fwatercategoryid

--table 抄表班组归属hx_t_teamattribution
--字段主键:hx_t_teamattributionid 抄表班组信息:hx_fteamid 征费所信息:hx_flevyinstituteid

好了,现在正式开始

从效果图上面可以看出,此报表,我们使用到了两张表来展示,而且这里是使用到了两个数据集,但是他们的查询条件是一致的。

我们先来看上面那张表的展示

我们来看SQL:

declare @begin_date datetime
declare @end_date datetime
select @begin_date = getdate()

declare @BusinessunitId uniqueidentifier --征费所
--set @BusinessunitId='6A2537DD-B87A-E411-93FE-002590622897' ----第十五收费所
DECLARE @TeamId uniqueidentifier --抄表班组
--SET @TeamId='18ACBD81-5B45-E411-9402-6CAE8B22702D' --第十五收费所(零散查表组)
DECLARE @StarDate datetime
DECLARE @EndDate datetime
SET @StarDate =  convert(datetime,'2015-01-15 00:00:00',20)
SET @EndDate = convert(datetime,'2015-01-25 23:59:59',20)
DECLARE @sHMS nvarchar(10)
DECLARE @eHMS nvarchar(10)
SET @sHMS='00:00:00';
SET @eHMS='23:59:59';
DECLARE @ZoneNO varchar(30)

-----------------SQL正文----------------------------------------------------------执行时间:
DECLARE @strSDate nvarchar(50),@strEDate nvarchar(50)
DECLARE @StartDateTime datetime,@EndDateTime datetime
SET @strSDate=CONVERT(varchar, @StarDate, 23)+' '[email protected]
SET @strEDate=CONVERT(varchar, @EndDate, 23)+' '[email protected]
SET @StartDateTime=convert(datetime,@strSDate,20)
SET @EndDateTime=convert(datetime,@strEDate,20)
-------------------------------------上面的表-------------------------------------------------
select
1 WaterMeterCount, --表数
w.hx_fpayamount, --水量
w.hx_fprepayment,--预计水费
w.hx_fpreproxypayment,--预计代收费
c.hx_fname --用水类别
 from
hx_t_waterusedamount w --水量
INNER JOIN hx_t_teamattribution n --抄表班组归属
    ON w.OwningTeam=n.hx_fteamid
AND isnull(w.hx_fzone,'') = isnull(isnull(@ZoneNO,w.hx_fzone),'')
AND isnull(w.OwningTeam,'00000000-0000-0000-0000-000000000000') = isnull(isnull(@TeamId,w.OwningTeam),'00000000-0000-0000-0000-000000000000')
AND w.hx_fpayamount>0 --结算水量
AND w.hx_frecorddate BETWEEN @StartDateTime AND @EndDateTime
AND isnull(n.hx_flevyinstituteid,'00000000-0000-0000-0000-000000000000') = isnull(isnull(@BusinessunitId,n.hx_flevyinstituteid),
'00000000-0000-0000-0000-000000000000')
LEFT JOIN hx_t_waterproperty p --用水性质
on w.hx_FWaterPropertyID=p.hx_t_WaterPropertyId
LEFT JOIN hx_t_watercategory c --用水类别
on p.hx_FWaterCategoryID=c.hx_t_WaterCategoryId

-----------------END----------------------------------------------------------------------------
select @end_date = getdate()
select datediff(ms,@begin_date,@end_date) as '用时/毫秒'

执行结果如下:

可以看出这是十分常见的纵表变横表了,如果使用纯sql来实现转换效果的话,就有得写一连串负责的sql语句了,但是通过使用此报表开发工具,我们可以轻而易举的将其纵向显示结果变为横向显示结果。

操作步骤如下:

1、打开此报表开发工具,文件——新建——项目

2、右键单击右侧解决方案中的报表目录,然后一直下一步,

但是考虑到矩阵的界面配置甚为反锁,这里我们先选择表格吧,然后一直点击下一步,直到完成

1、把界面上面的表格删掉,然后从左侧工具栏拖入一个矩阵,

选中“数据”单元格,右键——插入行——组内部——下方,添加4行,然后右键——插入列——组外部(因为要统计合计)

列这个地方,选择hx_fname这个字段,从sql中可以看到hx_fname这个字段是我们需要转换为横表展示的字段,然后数据这里,选中要聚合的字段。

右侧报表数据,

这里自动生成了许多参数,这些参数是因为我们刚才添加的SQL语句里面用到了,注意看名称,和我们刚才声明的SQL语句是一样的。

选中属性,右键单击,可以查看参数的配置信息

这些东西大家多去点一下,自然就熟悉了,涉及的东西太多了,我一下子也说不完。

这里有两个参数是有级联关系的,我就先说下

我们来看下这两个参数的配置,这两个参数都是以下拉框的形式显示的,而且值都是取自数据库中。

先看参数:BusinessunitId

这个数据集哪里来的?我们可以自己添加

再来看下参数:TeamId

右键单击空白处——创建占位符

批量修改可以直接通过这里进行修改,

否则,只能一个文本框一个文本框属性进行修改了。#代表千分位显示,后面的数字代码保留小数位数,0代表整数

数量/水量:#,0

单价:0.00

金额:#,0.00

报表中下面那个程序集的操作类似,这里就不多说了,东西太多了。

SQL如下:

----------------SQL正文----------------------------------------------------------执行时间:
DECLARE @strSDate nvarchar(50),@strEDate nvarchar(50)
DECLARE @StartDateTime datetime,@EndDateTime datetime
SET @strSDate=CONVERT(varchar, @StarDate, 23)+' '[email protected]
SET @strEDate=CONVERT(varchar, @EndDate, 23)+' '[email protected]
SET @StartDateTime=convert(datetime,@strSDate,20)
SET @EndDateTime=convert(datetime,@strEDate,20)
----------------------------------下面的表------------------------------------------------------
if object_id('tempdb..#t_estimateamountreason') is not null drop table #t_estimateamountreason

select * into #t_estimateamountreason from
(select distinct t1.Label,t2.Value from MetadataSchema.LocalizedLabel t1
inner join MetadataSchema.AttributePicklistValue t2
 on t1.ObjectId=t2.AttributePicklistValueId inner join MetadataSchema.OptionSet t3 on t2.OptionSetId=t3.OptionSetId
 where t3.Name='hx_estimateamountreason_values' and t1.ObjectColumnName='DisplayName' and t1.LanguageId=2052) t
--select * from #t_estimateamountreason 

select
1 MeterCounts, --水表块数
isnull(e.Label,'其它') ReasonName  --估水原因名称
from hx_t_waterusedamount w --水量
INNER JOIN hx_t_teamattribution n  --抄表班组归属
    ON w.OwningTeam=n.hx_fteamid
AND isnull(w.hx_fzone,'') = isnull(isnull(@ZoneNO,w.hx_fzone),'')
AND isnull(w.OwningTeam,'00000000-0000-0000-0000-000000000000') = isnull(isnull(@TeamId,w.OwningTeam),'00000000-0000-0000-0000-000000000000')
AND w.hx_fpayamount=0 --结算水量
AND w.hx_frecorddate BETWEEN @StartDateTime AND @EndDateTime
AND isnull(n.hx_flevyinstituteid,'00000000-0000-0000-0000-000000000000') = isnull(isnull(@BusinessunitId,n.hx_flevyinstituteid),
'00000000-0000-0000-0000-000000000000')
LEFT JOIN #t_estimateamountreason e --估水原因
    ON e.Value=w.hx_festimateamountreason   

UNION ALL
select 1 MeterCounts,e.Label ReasonName from #t_estimateamountreason e 

 if object_id('tempdb..#t_estimateamountreason') is not null drop table #t_estimateamountreason
----------------END----------------------------------------------------------------------------
时间: 2024-10-24 00:11:51

ReportingServies——SQLServer报表开发综合实例的相关文章

Devexpress报表开发:实例数据库信息

Devexpress报表开发:实例数据库信息 项目使用的是Access数据库,该数据库用于某宾馆的会员管理以及住房管理,共有以下几张表: Vip_Table:系统会员信息存放. House_Table:该宾馆所拥有的房间. House_Record:住房记录表. 1.Vip_Table结构 2.House_Table结构 3.House_Record结构 4.实例数据库下载     下载见附件 有时间会把我所使用的Devexpress以及其破解文件上传.同时附带破解方法.

ReportingServies报表开发实例教程

效果图如下: 1.我们先完成sql语句的编写,以下是各表和关键字段: --t:hx_t_waterusedamount--用水水量 hx_t_waterusedamountid --f:hx_frecorder(抄表员),hx_fzone(区段),hx_fmeterid(水表),hx_fpayamount(结算水量),hx_fdepartmentid(收费部门) --t:hx_t_receivable--应收水费 --f:hx_fcollchargesreceivable4(污水处理费),hx_

报表开发实例——动态多层次KPI钻取报表(II)

在报表开发实例--动态多层次KPI钻取报表(I)中,我们说到了动态层次报表需要层次钻取的场景,并介绍了利用oracle复杂sql的实现方法.这里仍然通过该报表来了解一下使用"脚本+本地文件"的开发方法. 各级部门KPI报表的格式和具体要求参见(I).有所不同的是,报表数据源从数据库表变为本地文件:tree.b(树形结构维表)和kpi.b(指标事实表),数据如下图: Tree文件数据 Kpi文件数据 Tree的叶子节点,通过id字段与kpi表关联.KPI文件每个ID每天都会新增kpi记录

报表开发实例——动态多层次KPI钻取报表(I)

在报表项目中有时会有动态层次报表,而且还需要层次钻取的场景,开发难度较大.这里记录了使润乾集算报表开发<各级部门KPI报表>的过程. <各级部门KPI报表>初始状态如下图: 当前节点是根节点"河北省",要求报表显示当前节点的下一级节点"地市"汇总的KPI数值.Kpi又分为普通指标和VIP指标两类,共四项.如果点击"石家庄"来钻取的时候,要求能够将石家庄下一级的KPI汇总指标显示出来,如下图: 点击"中心区&quo

Qt布局管理器综合实例

1.布局管理器的综合实例------模拟向导用户界面(Windows平台) -----练习开发一个向导用户界面 @1:在同一界面上展现不同的向导页面 @2:通过上一步和下一步按钮进行切换 @3:不同页面上的元素组件和这些组件排布都不相同 @4:页面中的组件通过布局管理进行排布 (1)通过布局嵌套进行界面设计 @1:上一步和下一步这两个按钮用水平布局管理器QHBoxLayout来进行管理,不同页面上的显示的内容只有按钮不变,所以讲不同页面的内容用栈式布局管理器QStackedLayout进行管理,

Android笔记三十四.Service综合实例二

综合实例2:client訪问远程Service服务 实现:通过一个button来获取远程Service的状态,并显示在两个文本框中. 思路:如果A应用须要与B应用进行通信,调用B应用中的getName().getAuthor()方法,B应用以Service方式向A应用提供服务.所以.我们能够将A应用看成是client,B应用为服务端,分别命名为AILDClient.AILDServer. 一.服务端应用程序 1.src/com.example.aildserver/song.aidl:AILD文

Win10系列:JavaScript综合实例1

上面几个小节讲解了使用HTML5和JavaScript语言开发Windows 应用商店应用时会用到的一些技术,本小节将前面介绍的知识融合在一起创建一个菜谱应用程序,帮助读者更进一步地理解和掌握这些知识. 此菜谱应用程序主要的功能是介绍一些菜肴和主食的做法,其中包含三个页面:第一个页面为主页面,用于按类别显示一些菜肴和主食:第二个页面为分类页面,显示某个类别的信息和属于该类别的菜肴或主食:第三个页面为菜肴页面,显示某项菜肴或主食的详细信息,如名称.图片和具体做法.这三个页面可以相互跳转,例如,在主

报表开发工具介绍

在我们制作网站或者应用的时候,如果想要更加形象地展示数据,那么报表就不可或缺了. 现在制作报表一般有以下4个工具可以用:jFreeChart.FusionChart.HighChart.EChart. 下面分别从不同角度去介绍这4个报表工具. 1.应用场景 在应用场景上,因为jFreeChart是一个封装好的Jar包,所以支持在客户端使用,也可以在网站上使用. 而FusionChart.HighChart.EChart都是用于J2EE平台(说白了就是做网站)的报表呈现,不能在客户端使用. 因此如

【Reporting Services 报表开发】— 表达式

一.常用的SSRS原始函数可以打开文本框的表达式中看到,如图1 图1 如下为SSRS中设计报表时常用的运算函数: 运算符/函数 说明 + 前后位数字则为加法,前后为字符串则为链接符号 - 数值减法 * 乘法 / 除法,例如:100/33 = 33.333... \ 整数除法,例如:100\3 = 33 MOD 求余,例如:10 MOD 3 = 1 ^ 次方,例如:4^2 = 16 & 字符串与数字的链接符号 LEFT 向左取出特定个数的字符,例如:LEFT(Fields!ProductName,