Reporting Services 2: 参数化报表

2024-04-04 07:32

本文主要是介绍Reporting Services 2: 参数化报表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这篇随笔介绍一下Reporting Services的参数化报表(Parameterized Report)。

    按照报表内容的可变性,报表分为静态报表和参数化报表,数据驱动的参数化报表更符合人们的需求习惯。

    首先来看一下使用Reporting Services创建参数化报表的步骤:

    1、在项目AWReport中使用右键菜单“添加”→“新建项”→“报表”添加一个新的报表rptPR.rdl;

    2、在报表rptPR.rdl的“数据”选项卡中,单击数据集下来列表新建数据集DataEmployee(如图1所示),单击“通用查询设计器”切换到查询设计状态,添加表HumanResources.Employee,并选择所有列作为输出。

图1 新建数据集

    3、在报表rptPR.rdl的设计状态(“数据”或“布局”选项卡下),使用菜单“报表”→“报表参数”,启动“报表参数”对话框,为报表添加参数并为参数指定相应的“数据类型”和“提示”,如表1所示。不同数据类型的参数在报表中显示为不同的控件,如Boolean类型的参数显示为标识为True和False的两个复选框,而DateTime类型显示为一个DateTimePicker;而“提示”标明的是这些控件前面的标签。

参数名称
数据类型
提示

pTitle
String
头衔

pMStatus
String
婚姻状况

pGender
String
性别

pSFlag
Boolean
是否带薪

pBDate
DateTime
生日

表1 参数名称、数据类型和提示的设置

    4、切换到报表的“数据”选项卡,为相应字段添加图2所示的筛选条件。

 

图2 为字段添加参数作为筛选条件

    5、切换到报表的“布局”选项卡,为报表设计图3所示的布局。

图3 报表布局

    6、在预览状态下,在报表中显示的参数项目中为参数指定不同的值,就可以看到图4所示的参数化报表了。

 

图4 预览状态下的参数化报表

    “婚姻状况”的实际取值有两种——M(Married,已婚的)和S(Single或Sole,未婚的),而对于用户来说,该参数的值使用文本框来接受输入显然是不合适的,例如输入单词的全拼或Unmarried的第一个字母U就查不出任何结果,可以考虑在“报表参数”对话框的“可用值”区域进行图5所示的设置,这样“婚姻状况”参数的输入就可以使用下拉列表来进行了。“性别”参数应该进行同样的设置。

 

图5 为“婚姻状况”设置可用值

    如果用户对于公司雇员的头衔不熟悉或者头衔有不同的叫法,同样会带来上面的困扰,而“头衔”字段的值并不是固定的,系统维护时很可能出现增加或减少的情况,这时候可以考虑从查询中为该参数指定“可用值”。需要注意的是,如果使用同一数据集DataEmployee中的Title字段作为可用值的来源,而Title字段又是第一个参数时会出现前向依赖错误,因为此时Title字段的取值是由后面的参数决定的;而如果将Title字段作为最后一个参数时,每次更改其它参数的值都会引起Title参数下拉列表中数据的刷新和变动(这个可用来做如省/市/县等的联动)。此时,应该考虑,通过图1所示的方法另外新建一个数据集DataTitle,并指定其数据来源为:

SELECT Distinct Title FROM HumanResources.Employee

    然后按照图6所示的设置指定“头衔”参数的可用值。

 

图6 为“头衔”设置可用值

    另外,可以为每个参数指定“默认值”,减少常见查询时的数据输入。

    报表在一个Web项目中的显示如图7所示。

 

图7 Web项目中显示的参数化报表(点击小图看大图)

    Reporting Services在一定程度上满足了用户对参数化报表的需求,但是也存在一些可以改进的地方,如一旦定义参数就不能忽略参数的值进行报表的查看。

这篇关于Reporting Services 2: 参数化报表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/875167

相关文章

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

4B参数秒杀GPT-3.5:MiniCPM 3.0惊艳登场!

​ 面壁智能 在 AI 的世界里,总有那么几个时刻让人惊叹不已。面壁智能推出的 MiniCPM 3.0,这个仅有4B参数的"小钢炮",正在以惊人的实力挑战着 GPT-3.5 这个曾经的AI巨人。 MiniCPM 3.0 MiniCPM 3.0 MiniCPM 3.0 目前的主要功能有: 长上下文功能:原生支持 32k 上下文长度,性能完美。我们引入了

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

多线程解析报表

假如有这样一个需求,当我们需要解析一个Excel里多个sheet的数据时,可以考虑使用多线程,每个线程解析一个sheet里的数据,等到所有的sheet都解析完之后,程序需要提示解析完成。 Way1 join import java.time.LocalTime;public class Main {public static void main(String[] args) thro

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而

多路转接之select(fd_set介绍,参数详细介绍),实现非阻塞式网络通信

目录 多路转接之select 引入 介绍 fd_set 函数原型 nfds readfds / writefds / exceptfds readfds  总结  fd_set操作接口  timeout timevalue 结构体 传入值 返回值 代码 注意点 -- 调用函数 select的参数填充  获取新连接 注意点 -- 通信时的调用函数 添加新fd到

struts2中的json返回指定的多个参数

要返回指定的多个参数,就必须在struts.xml中的配置如下: <action name="goodsType_*" class="goodsTypeAction" method="{1}"> <!-- 查询商品类别信息==分页 --> <result type="json" name="goodsType_findPgae"> <!--在这一行进行指定,其中lis是一个List集合,但

BIRT报表script

1.隔行高亮显示 1. 在布局(Layout)中,选择Table-Detail的行。如下图:   2. 然后选择Script,打开脚本窗口顶部的方法列表并选择onPrepare,如图所示。 var count=0;   3. 最后打开脚本窗口顶部的方法列表并选择 onCreate,如图所示: count++; if (count % 2 != 0) {   style.se