[个人原创] ,转发请声明原文链接

了解

a)      SSRS全称 SQL Server Reporting Services,是依赖于数据库运行的,是微软开发的重量级别的BI产品

b)      上手容易,开发简单,有数据库服务器就可以了,不需要依赖于IIS运行

c)      可扩展性比较低, 对比那些其他报表来说,确实比较好

d)      可独立的在SqlServer服务器上运行,也可以内嵌到项目中

报表结构

通过查看Reporting的报表,一个完整的报表,包含报表的一些配置(默认字体样式,自动刷新,语言,容器空白,报告单元类型,报表ID),数据源,数据集,报告部分(相当于容器),报表参数,报表参数布局这几个主要组成部分,根据报表样式的不同会有不同的组成部分,比如在报表中内嵌了一个图片,那么会多一个内嵌式图片的结构

报表版式

限于页眉页脚的数据,不能用于主体,比如页码,会导致报表报错

  在报表数据的内置字段,是全部可以放在页眉和页脚中,部分可以放在主体中

限于主体的数据,不能直接放在页眉和页脚,可以通过聚合来实现现在在页眉,比如求和,平均值等等

  在分组数据中,不能直接放到页眉和页脚,可以对分组进行分页,然后显示First(字段名)显示到页眉页脚中

报表样式

  下面是分页报表的所有布局控件

  

开发工具

a)      开发报表有两种方式。一种是SSRS,这个是利用报表服务直接创建报表;另外一种是SSDT,是独立的开发工具,

b)      在SqlServer2012版本以前(包括SqlServer2012),安装数据库的时候可以安装SQL Server Business Intelligence Development Studio和Sql Server Reporting Service. 在SqlServer 2012以后,SSDT是需要独立安装的

配置SSRS

a)      先配置SSRS服务器,打开Reporting Server 配置管理器,选择报表服务器实例

b)     配置本地服务器,用内置账户就可以了,要是给别人用的,选择配置其他账户,在其他账户里,注意用户名是域/用户名的格式,不知道是什么的可以看看你的系统说明,保存秘钥,确认

c)      选择Web服务URL点击高级,可以添加,可以修改

d)     更改数据库, 本地服务器的话,默认就好,远程服务器的话,需要报表模式为Sql账户,凭据也是

e)      Web门户URL: 是你SSRS报表管理页面的配置,配置完成的话,现在就可以访问了

创建一个简单的报表

SSRS方式

i.          打开你的SSRS管理页面,在右上角点击加号(新建)新建文件夹与报表,在SqlServer2012之前,点击添加报表,在2016以及2016之后,区分了移动报表,分页报表

ii.          点击加号(新建),可以新建文件夹,KPI报表,移动报表,分页报表,数据源,数据集

      

iii.          分页报表

iv.          新建分页报表会打开Reporting Builder,没有的话在弹出的页面选择获取Reporting Builder;

v.          在Reporting Builder首先会给你弹出一个向导,有表格矩阵,图表,地图向导,空白报表

      

vi.          首先,选择创建数据集(可以使用共享数据集),

vii.          然后,创建数据源,点击新建,输入连接字符串,或是生成字符串

viii.          第三步,通过Sql完成数据集的创建,可以通过可视化操作,也可以点击编辑为文本输入sql

(在这里需要的是,字段名称不能有重复的,不能同时写两个以上的查询语句或不能包含函数操作类的语句)

ix.          第四部,分组

      

x.          第五步:选择布局

xi.          SqlServer2012之前会有第六步选择样式外观

xii.          最后点击完成,这样,一个最简单的报表就出来了

SSDT方式(支持中文)

xiii.          Sqlserver2012(包含)之前的版本,打开SQL Server Business Intelligence Development Studio,选择商业智能项目,创建报表服务项目

xiv.          VS2017(包含)之后,打开VS,打开VS2017或VS2017 SSDT,选择商业智能项目,创建报表服务项目

你的电脑数据库为2016/2017的,VS为2017以下的,抱歉了,只能通过SSRS创建报表

xv.          选择项目路径以及名称

xvi.          打开解决方案资源管理器,右击报表,选择添加新报表

xvii.          选择或新建数据源,点击编辑可以生成连接字符串

xviii.          输入查询的sql语句

xix.          选择表格或矩阵

xx.          分组

xxi.          输入报表名称

报表数据

a)     报表数据在窗口的左侧,要是找不到了,没关系,在工具栏-视图-最下面的报表数据

b)     在实际工作中,我们有很多要带条件的报表,这就是报表参数

报表参数在Report报表中生成一个供用户输入数据的框,比如下面这个例子

参数对接到Sql,在Sql中就是不带声明的局部变量

SELECT @NAME NAME,@SEX SEX,@AGE AGE,@LIKE [LIKE],@BRITHDAY BRITHDAY

报表分组分页

分组

a)     在Report中,分组方式有行组和列祖,一般的分组分页指的是行组

以下方数据做分页报表

b)     通过创建报表导航添加报表分组,SSRS分组和SSDT分组通过导航分组的时候有点差异,需要区别一下

xxii.          SSDT方式

  1. 选择表格

  1. 把相应的字段放入对应的位置中

  1. 选择样式和是否包含小计

xxiii.          SSRS通过导航来分组

  1. 输入Sql,然后把字段放入对应的字段(SSRS没有直接的分页)

c)     高手操作手动分组

i.          上面的分组是最简单的,一下才是分组分页的核心

ii.          下面是对报表数据的分组分页,先展示一下分组前的报表

iii.          右击表格左框,点击添加组

在这里看到了有子组和父组,子组是在当前下的组内部的数据再次分组;

父组是对于一类型的数据放在一起组合起来的分组

iv.           因为我们是要从小往大分,对于苹果,香蕉这一类的数据进行分组,所以点击添加父组

v.           在分组依据中选择对应的分组字段 CLASS3,添加组尾以方便我们显示小计

组头相当于表格的标题头,组尾就是表格最后用于汇总的尾

vi.          分组效果如下

vii.          组内排序

分页

分页是在分组属性中选中分页符,勾选分页,那么一组就会分一页

常用的报表函数

时间日期类

i.          获取当前时间日期,Now(),使用方法 =Now()

ii.          获取当前日期,Today() 例子: =Today()

iii.          格式化字符串,Format(时间,格式) 例子:=Format(Now(),”MM/dd/yyyy hh:mm:ss tt”)

数学类

i.          加减乘除  +  -  *  /

ii.          列(组)求和Sum() 例子 =Sum(Parameters!Quantity.Value)

iii.          列(组)平均值Avg() 例子 =Avg (Parameters!Quantity.Value)

iv.          列(组)最大值最小值 例子 =Max(Parameters!Quantity.Value)

=Max(Parameters!Quantity.Value)

v.          求余 Mod 例子 = 5 Mod 2

vi.          列(组)第一个值First() 和 最后一个值Last() 例子

=First(Parameters!Quantity.Value)

=Last(Parameters!Quantity.Value)

vii.          计数Count()和CountDistinct()

记录数据的数量,包含重复不包含NULL的 Count()

记录不重复数据的数量,不包含NULL的CountDistinct()

表格类

i.           行号 RowNumber() 返回当前组内第几条数据

ii.           报表开始运行时间 Globals!ExecutionTime

iii.           报表总页码 Globals!OverallPageNumber ,只能用于页眉和页脚

iv.           当前页码 Globals!PageNumber,只能用于页眉和页脚

流程

i.          判断 IIF

IIF(1>2,”正确”,”错误”)

ii.          流程控制

Switch(Fields!FirstName.Value = “Sue","Susan",

Fields!FirstName.Value = "Bob","Robert")

字符串处理

i.          字符串切割 Split()函数

a)     返回包含指定数量子字符串的以零为基的一维数组。

b)     常用成员

i.          获取切割后返回数组中某个下标值的Value值  GetValue(下标值)

例子: = Split(“12^34^56”,”^”). GetValue(0)   返回值为 12

ii.          获取切割后返回数组的长度 Length

例子: = Split(“12^34^56”,”^”). Length    返回值为 3

支持的Html元素

在Report报表中支持部分的html元素的显示

标签

i.          支持常用的标签

<b>b</b> <p>p</p> <h1>h1</h1> <h2>h2</h2> <h3>h3</h3> <h4>h4</h4> <h5>h5</h5> <h6>h6</h6> <span>span</span> <strong>strong</strong> <i>i</i> <div>div</div> <a href=>a</a> 等等

支持ul li 无序列表

支持ol li 有序列表 不支持定义样式

不兼容自定义列表

ii.          不支持表单类标签

不支持 table tr td 标签

不支持 from 等等

样式

iii.          支持常用的字体样式,

比如字体加粗,字体倾斜,字体颜色

iv.          不支持块元素样式

比如边框,图片,背景色,宽高

Report支持VB语言

报表中插入代码

在报表外空白处右击,选择报表属性,

点击代码,输入代码

代码例子

切割字符串代码,第一个参数要切割的字符串,第二个参数要分割的分隔符,第三个是下标值,

Function SplitStr(Str As String, S As String, Index As Int32) As String

Dim Temp

Temp = Split(Str, S)

Dim Len

Len = UBound(Temp) - LBound(Temp) + 1

If Len <= Index Then

Return ""

End If

Return Temp(Index)

End Function

在报表中调用代码

在报表中使用代码是 Code.代码方法名(参数para)

报表图片

支持的格式

Report仅支持 image/bmp,image/jpeg, image/gif, image/png和image/x-png格式

其他格式的图片会无法识别

图片的使用

添加外部图像

外部图像就是通过地址来访问的图像,外部图像可以存在于报表服务器上,也可以存在于其他网站上.url支持 http://,https://,ftp://,file,mailto

操作:

  1. 右击报表设计视图,选择 ”插入” – “图像”
  2. 在图像选项的”常规”中,输入图像名称,选择”图像源”为”外部”
  3. 在使用此图像中输入url
  4. 设置其他属性
  1. 点击确定
  1. 调整大小

在报表中嵌入图像

嵌入图像是直接把图片转换成base64直接内嵌到Report中,会增大报表的文件大小

操作:

  1. 右击报表设计视图,选择 ”插入” – “图像”
  2. 在图像选项的”常规”中,输入图像名称,选择”图像源”为”嵌入”
  3. 在使用此图像后面点击导入
  4. 悬着你要导入的图片
  5. 设置其他属性
  6. 点击确定
  7. 调整大小

导入后的图片存放于报表内部的EmbeddedImage 的节点下

通过数据库导入图片

注意:这个方式只支持base64字符串的,而且不包含base64数据头的

操作:

  1. 右击报表设计视图,选择 ”插入” – “图像”
  2. 在图像选项的”常规”中,输入图像名称,选择”图像源”为”数据库”
  3. 在使用此字段后面选择字段
  4. 在使用此MIME类型后面选择base64的图片格式
  1. 悬着你要导入的图片
  1. 设置其他属性
  1. 点击确定
  1. 调整大小

条形码

使用第三方控件

查阅了国内外大多数网站,Reporting 报表条形码控件做的不错的是Barcode Professional for Reporting Services

下载安装好后再SSDT工具栏添加安装后得到的Dll文件,这时,工具箱里会多一个Barcode Professional for Reporting Services,拖进报表中就可以使用了

使用条形码字体

这里使用了最常用的Code128,由于完整的Code128包括头尾和校验码,所以对数据进行处理

处理数据的Code128 代码

Public _evenRow As Boolean

Public Function EvenRow() As Boolean

_evenRow = Not _evenRow

return _evenRow

End Function

Function Azalea_Code_128_A(ByVal yourData As String) As String

' C128Tools 16mar09 jwhiting

' Copyright 2009 Azalea Software, Inc. All rights reserved. www.azalea.com

' Creating a Code 128 code set A barcode in Excel 2003

' Your input, yourData, is a string to be encoded as a Code 128 code set A symbol.

' yourData must be the Code 128 code set A character set. Input error checking is your responsibility.

Dim temp As String                 ' a temporary placeholder

Dim chunk As String                ' loop chunk

Dim i As Integer                   ' our loop counter

Dim checkDigitSubtotal As Integer  ' a check digit throwaway

Dim e As Integer                   ' a placeholder variable

' seed the variables

temp = Chr(181)                   ' code set A start glyph

checkDigitSubtotal = 103                ' code set A start checkdigit value

' map the input string into the C128Tools character set

For i = 1 To Len(yourData) Step 1

chunk = Mid(yourData, i, 1)

Select Case Asc(chunk)

' map from above ASCII 182 placeholders to the font's character assignments

Case Is > 95

temp = temp & Chr(Asc(chunk) - 66)

Case Is = 32 ' move the space character

temp = temp & Chr(206)

Case Else

temp = temp & chunk

End Select

Next i

' Calculate the Code 128 mod 103 check digit

For i = 1 To Len(yourData)

e = Asc(Mid(yourData, i, 1)) - 32

If e <> 142 Then

checkDigitSubtotal = checkDigitSubtotal + (e * i)

End If

Next i

checkDigitSubtotal = checkDigitSubtotal Mod 103

' Put together the final output string

' code set A start bar, the encoded string, check digit, stop bar

Select Case checkDigitSubtotal

Case 0

' Mark Presley bug fixed 19jan09

Azalea_Code_128_A = temp & Chr(206) & Chr(196)

Case 1 To 93

Azalea_Code_128_A = temp & Chr(checkDigitSubtotal + 32) & Chr(196)

Case Is > 93

Azalea_Code_128_A = temp & Chr(checkDigitSubtotal + 103) & Chr(196)

End Select

' The output, Azalea_Code_128_A, needs to be formatted in one of Azalea Software's Code 128 fonts.

' Excel: B1=Azalea_Code_128_A(A1)

' Or put another way, yourContainer.text=Azalea_Code_128_A(yourInputString)

End Function

Function Azalea_Code_128_B(ByVal yourData As String) As String

' C128Tools 29may12 jwhiting

' Copyright 2012 Azalea Software, Inc. All rights reserved. www.azalea.com

' Creating a Code 128 code set B barcode using C128Tools.

' Your input, yourData, is a string to be encoded as a Code 128 code set B symbol.

' yourData must be the Code 128 code set B character set. Input error checking is your responsibility.

Dim temp As String                 ' a temporary placeholder

Dim chunk As String                ' loop chunk

Dim i As Integer                   ' our loop counter

Dim checkDigitSubtotal As Integer  ' a check digit throwaway

Dim e As Integer                   ' a placeholder variable

' seed the variables

temp = Chr(182)                   ' code set B start glyph

checkDigitSubtotal = 104          ' code set B start checkdigit value

' map the input string into the C128Tools character set

For i = 1 To Len(yourData) Step 1

chunk = Mid(yourData, i, 1)

Select Case Asc(chunk)

' map from above ASCII 200 to the actual character assignments

Case Is > 200

temp = temp & Chr(Asc(chunk) - 35)

' The space character is at ASCII 194 because TrueType

' doesn't allow a glyph in the ASCII 32 slot

Case Is = 32

temp = temp & Chr(206)

Case Else

temp = temp & chunk

End Select

Next i

' Calculate the Code 128 mod 103 check digit

For i = 1 To Len(yourData)

e = Asc(Mid(yourData, i, 1)) - 32

If e <> 142 Then

checkDigitSubtotal = checkDigitSubtotal + (e * i)

End If

Next i

checkDigitSubtotal = checkDigitSubtotal Mod 103

' Put together the final output string

' code set A start bar, the encoded string, check digit, stop bar

Select Case checkDigitSubtotal

Case 0

Azalea_Code_128_B = temp & Chr(206) & Chr(196)

Case 1 To 93

Azalea_Code_128_B = temp & Chr(checkDigitSubtotal + 32) & Chr(196)

Case Is > 93

Azalea_Code_128_B = temp & Chr(checkDigitSubtotal + 103) & Chr(196)

End Select

End Function

Code 128字体的使用

从网上下载Code 128字体

(公司内部文件,解压请联系)

报表 中的设置

  1. 调用Code128A的代码给数据添加头尾合校验码

  b.设置字体为Code128,更改字体大小

需要注意的是,报表的语言不能为zh-cn,我直接给清空了

Reporting报表开发知识合并[个人原创]的更多相关文章

  1. Grid++Report 报表开发工具

      Grid++Report 报表开发工具   版本 更新日期 大小 下载 说明 Grid++Repoert6.0.0.6 2015/08/08 16.0M [下载] 锐浪报表工具最新版本,新增功能说 ...

  2. 【Reporting Services 报表开发】— 交互式报表

    我们知道,界面是人与系统间的对话方式,当使用者面对的是冷冰冰的界面,不但会造成使用者对于系统的热情减低,也会因为不便而产生诸多抱怨.尤其像报表时企业内几乎每日都会使用到的工具,因此,如何让使用者可以再 ...

  3. 【Reporting Services 报表开发】— 数据表的使用

    一.打开 SQL Server Business Intelligence Development Studio,新建项目—>商业智能项目—> 报表服务器项目,命名为CH3 二.在报表文件 ...

  4. 【Reporting Services 报表开发】— 页码编列

    一.打开 SQL Server Business Intelligence Development Studio,新建项目—>商业智能项目—> 报表服务器项目,命名为CH4 二.在报表文件 ...

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

    一.常用的SSRS原始函数可以打开文本框的表达式中看到,如图1 图1 如下为SSRS中设计报表时常用的运算函数: 运算符/函数 说明 + 前后位数字则为加法,前后为字符串则为链接符号 - 数值减法 * ...

  6. 【Reporting Services 报表开发】— 矩阵的使用

    矩阵,相较于数据表示一维的数据,只能指定固定的数据列,来呈现动态的明细数据行,所以,它可以说是种二维的数据展现形式,让我们能够很容易地从数据行和数据集的交替中查看对应的汇总信息.像SQL Server ...

  7. 【Reporting Services 报表开发】— 如何根据明细的行数实现分页(比如每隔5行分页)

    一.新建报表:对于初学者可以参考我前面的文章[Reporting Services 报表开发]— 总结 如图1: 图 1 二.选择 new_name文本框—>添加组—>选择行组中的父组.具 ...

  8. 【Reporting Services 报表开发】— 如何设置报表分页列标题每一页都显示

    一.打开已经开发好的报表ReportTest,选择列组下的高级模式—>选择行组的静态(会关联列标题订单编号),修改下面的属性: 1.Hidden:False 2.FixedData:True 3 ...

  9. ActiveReport系列报表开发随笔收集

    转自:博客园 http://www.cnblogs.com/dahuzizyd/archive/2007/04/11/ActiveReport_All.html 使用ActiveReport for ...

随机推荐

  1. 教妹子用IDEA创建web应用,部署到Tomcat服务器

    自从上一篇原创发表之后,粉丝反应热烈.主要分两派,一派关注技术的,觉得看了那么多的公众号文章,终于找到一篇能看懂的了,于是沾沾自喜.另一派是关注妹子的,感叹自己空有一身绝技,公司里却无妹子可教,大喊可 ...

  2. 阿里云ECS发送企业邮件

    <?phpuse PHPMailer\PHPMailer\PHPMailer;require '../vendor/autoload.php'; $mail = new PHPMailer(tr ...

  3. Django中CBV View的as_view()源码解析

    CBV与FBV路由区别 urlpatterns = [ url(r'^publish/$', views.Publishs.as_view()), # CBV写法 url(r'^publish/$', ...

  4. 在linux中,&和&&, |和|| ,&> 与 >的区别

    对应刚接触linux命令的小伙伴们来说,这些符号一定是很困扰的下面我们一起来看这些符号区别和用法 & 表示任务在后台执行,如要在后台运行 如: [root@localhost local]# ...

  5. bugku welcome to bugkuctf

    题目地址:http://123.206.87.240:8006/test1/ 这道题主要用到了俩个知识点:php伪协议和序列化 点进题目看到:you are not the number of bug ...

  6. Codeforces 152C:Pocket Book(思维)

    http://codeforces.com/problemset/problem/152/C 题意:给出n条长度为m的字符串,对于第一条字符串的每个位置利用第2~n条字符串的相应位置的字符去替换相应的 ...

  7. [网络协议]TCP粘包分析

    关于socket粘包,socket缓冲区设置的问题,记录一下: 一 .两个简单概念长连接与短连接: 长连接     Client方与Server方先建立通讯连接,连接建立后不断开, 然后再进行报文发送 ...

  8. 一、JavaScript概述

    1.Javascript是什么?可以做什么? 1)    JavaScript是一种基于对象和事件驱动的解释性脚本语言, 它具有与Java和C语言类似的语法. 2)    JavaScript可直接嵌 ...

  9. .Net高级编程-自定义错误页 web.config中<customErrors>节点配置

    错误页 1.当页面发生错误的时候,ASP.Net会将错误信息展示出来(Sqlconnection的错误就能暴露连接字符串),这样一来不好看,二来泄露网站的内部实现信息,给网站带来安全隐患,因此需要定制 ...

  10. kuangbin专题 专题一 简单搜索 Find a way HDU - 2612

    题目链接:https://vjudge.net/problem/HDU-2612 题意:‘@’表示KTV,‘#’表示无法走的地方,‘Y’,'M’表示两个人,他们要在KTV见面,问他们都到达KTV要花费 ...