Dynamic CRM 2013学习笔记(二十六)报表设计:Reporting Service报表 动态参数、参数多选全选、动态列、动态显示行字体颜色
上次介绍过CRM里开始报表的一些注意事项:Dynamic CRM 2013学习笔记(十五)报表入门、开发工具及注意事项,本文继续介绍报表里的一些动态效果:动态显示参数,参数是从数据库里查询出来的;参数可以多选或全选;动态地显示列,列不是固定的;根据某一字段的值来动态地显示整行字体的颜色。
下面介绍详细的方法:
一、动态参数、参数多选全选
动态参数:
首先定义一个Dataset:
SELECT DISTINCT new_countryId, new_codename AS name FROM new_country WHERE new_codename IS not null
然后指定参数的数据来源:

注意,这里参数Value 字段一定要用主健,也就是说如果value也用name,将查询不到结果。
多选、全选:

效果图如下:

传入的参数在主Dataset里通过in来查询:
ct.new_countryid IN ( @country )
二、 动态列
最近有个需求,要把全年所有的星期相关的数据查询出来,每个月的最后一周后面显示本月的合计。月是固定的,好处理,但每个月有几周却不是固定的,这时候就没办法固定的查询出数据,然后直接拖到报表里了。解决思路如下:
1. 列名和列各定义一个Dataset, 先看下列名的定义:
先定义一个临时表,每月最多5周,所以每月前面都定义5周。
--创建临时表,用来存储活动的周名称
CREATE TABLE #weekColumn
(
Start VARCHAR(10) ,
W1 VARCHAR(100) ,
W1Remark VARCHAR(100) ,
W2 VARCHAR(100) ,
W2Remark VARCHAR(100) ,
W3 VARCHAR(100) ,
W3Remark VARCHAR(100) ,
W4 VARCHAR(100) ,
W4Remark VARCHAR(100) ,
W5 VARCHAR(100) ,
W5Remark VARCHAR(100) ,
Month1 VARCHAR(100) ,
W6 VARCHAR(100) ,
W6Remark VARCHAR(100) ,
W7 VARCHAR(100) ,
W7Remark VARCHAR(100) ,
W8 VARCHAR(100) ,
W8Remark VARCHAR(100) ,
W9 VARCHAR(100) ,
W9Remark VARCHAR(100) ,
W10 VARCHAR(100) ,
W10Remark VARCHAR(100) ,
Month2 VARCHAR(100) ,
...
然后遍历所有月,根据规定的格式,定义周、月的列名:
DECLARE month_cursor CURSOR
FOR
SELECT new_monthid ,
new_name ,
new_month
FROM filterednew_month
WHERE new_year = YEAR(GETDATE())
ORDER BY new_name
OPEN month_cursor
FETCH NEXT FROM month_cursor INTO @monthid, @monthName, @monthNo
WHILE @@FETCH_STATUS = 0
BEGIN
SET @index = ( @monthNo - 1 ) * 5 + 1
-- 3. get all weeks
DECLARE week_cursor CURSOR
FOR
SELECT new_name ,
new_week_no
FROM filterednew_week
WHERE new_monthid = @monthid
OPEN week_cursor
FETCH NEXT FROM week_cursor INTO @weekName, @weekNo
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'W' + CAST(@index AS VARCHAR(100));
SET @sqlName = 'W' + CAST(@index AS VARCHAR(100)) + 'Remark';
SET @sql = ' update #weekColumn set ' + @sql + '='''
+ @weekName + '''' + ',' + @sqlName + '=''Remark'''
EXEC(@sql);
SET @index += 1
FETCH NEXT FROM week_cursor INTO @weekName, @weekNo
END
CLOSE week_cursor
DEALLOCATE week_cursor
SET @sql = 'Month' + CAST(@monthNo AS VARCHAR(100));
SET @sql = ' update #weekColumn set ' + @sql + '=''' + @monthName
+ ''''
EXEC(@sql);
SET @index += 1
FETCH NEXT FROM month_cursor INTO @monthid, @monthName, @monthNo
END
CLOSE month_cursor;
DEALLOCATE month_cursor;
最后查询这个临时表就可以得到所有的列名:
SELECT *
FROM #weekColumn;
2. 列值的Dataset定义:
首先也是定义包含所有周、月的临时表,也是每月前定义5周,跟列名对应起来。
接着,遍历所有月,确定当前数据是本月的哪一周:
--查找是本月的第几周
PRINT @monthNo
SELECT @whichWeek = rn
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY w.new_week_no ) RN ,
w.new_week_no
FROM filterednew_week w
JOIN filterednew_month m ON w.new_monthid = m.new_monthId
WHERE m.new_month = @monthNo
) mw
WHERE mw.new_week_no = @weekNo
再确定数据插入的位置:
-- 确定插入位置
SET @index = ( @monthNo - 1 ) * 5 + @whichWeek
PRINT @index
PRINT @monthNo
PRINT @whichWeek
SET @sqlOrderQty = 'W' + CAST(@index AS VARCHAR(100))
+ 'OrderQty';
SET @sqlQty = 'W' + CAST(@index AS VARCHAR(100)) + 'Qty';
SET @sqlRemark = 'W' + CAST(@index AS VARCHAR(100)) + 'Remark';
SET @sql = ' update #weekColumn set ' + @sqlOrderQty + '='
+ CAST(ISNULL(@orderQty, '0') AS VARCHAR(100)) + ','
+ @sqlQty + '=' + CAST(ISNULL(@qty, 0) AS VARCHAR(100))
+ ',' + @sqlRemark + '=''' + ISNULL(@remark, '') + ''''
+ ' WHERE ReportIndex = '
+ CAST(@ReportIndex AS VARCHAR(100));
PRINT @sql
EXEC(@sql);
3. 报表上处理
列名要用简单处理下,要用列名的Dataset,如下显示的第一周的列名:
=First(Fields!W1.Value, "columns_DataSet")
另外,每个月的前一周有可能是要hide的,因为有可能没有第5周,右健整个列,选择 Column Visibility:

如果没有值就hide起来:

=iif(isnothing(First(Fields!W5.Value, "columns_DataSet")),true,false)
到此,动态显示列完成。
三、 动态显示行字体颜色
首先选中整个行:

然后在行的Font-> Color里定义颜色:

=IIF(Fields!versions.Value = "Demand Plan", "Black", "Green")
注意 Black, Green都要带引号。
Dynamic CRM 2013学习笔记 系列汇总 -- 持续更新中
Dynamic CRM 2013学习笔记(二十六)报表设计:Reporting Service报表 动态参数、参数多选全选、动态列、动态显示行字体颜色的更多相关文章
- Dynamic CRM 2013学习笔记(十六)用JS控制Tab可见,可用
一个Form里经常会有好几个Tab,有时要根据一些条件设置哪些Tab可用,可见.下面就介绍下如何用JS对Tab进行控制. 1. 控制可见 function setTabVisableByName( ...
- Dynamic CRM 2013学习笔记(十二)实现子表合计(汇总,求和)功能的通用插件
上一篇 Dynamic CRM 2013学习笔记(十一)利用Javascript实现子表合计(汇总,求和)功能 , 介绍了如何用js来实现子表合计功能,这种方法要求在各个表单上添加js方法,如果有很多 ...
- Dynamic CRM 2013学习笔记(十)客户端几种查询数据方式比较
我们经常要在客户端进行数据查询,下面分别比较常用的几种查询方式:XMLHttpRequest, SDK.JQuery, SDK.Rest. XMLHttpRequest是最基本的调用方式,JQuery ...
- Dynamic CRM 2013学习笔记(十五)报表设计:报表入门、开发工具及注意事项
本文是关于CRM 2013报表开发入门介绍,包括开发工具的使用,以及不同于普通Reporting service的相关注意事项. 一.CRM报表简介 报表有两种,SQL-based报表和Fetch-b ...
- Dynamic CRM 2013学习笔记(十四)复制/克隆记录
经常有这样的需求,一个单据上有太多要填写的内容,有时还关联多个子单据,客户不想一个一个地填写,他们想从已有的单据上复制数据,克隆成一条新的记录.本文将介绍如何克隆一条记录,包括它的子单据以生成一条新的 ...
- Dynamic CRM 2013学习笔记(十八)根据主表状态用JS控制子表自定义按钮
有时要根据主表的审批状态来控制子表上的按钮要不要显示,比如我们有一个需求审批通过后就不能再上传文件了. 首先打开Visual Ribbon Editor, 如下图,我们可以利用Enable Rules ...
- Dynamic CRM 2013学习笔记(十九)自定义审批流1 - 效果演示
CRM的项目,审批流是一个必须品.为了更方便灵活地使用.配置审批流,我们自定义了一整套审批流.首先来看下它的效果: 1. 审批模板 这是一个最简单的审批流,首先指定审批实体,及相关字段,再配置流程节点 ...
- Dynamic CRM 2013学习笔记 系列汇总
这里列出所有 Dynamic CRM 2013学习笔记 系列文章,方便大家查阅.有任何建议.意见.需要,欢迎大家提交评论一起讨论. 本文原文地址: Dynamic CRM 2013学习笔记 系列汇总 ...
- Dynamic CRM 2013学习笔记(二十)字段改变事件的二种实现方法
CRM里有二种方式实现字段change事件,一种是在form里,一种完全通过js来实现.本文介绍下二者的用途及区别. 1. Form里用法 这种方式估计其实也是添加一个js的function. 这种方 ...
随机推荐
- 关于Function.prototype.bind
bind()方法会创建一个新函数,称为绑定函数.当调用这个绑定函数时,绑定函数会以创建它时传入bind()方法的第一个参数作为 this,传入 bind() 方法的第二个以及以后的参数加上绑定函数运行 ...
- 2.openssl rsa/pkey
分别是RSA密钥的处理工具和通用非对称密钥处理工具.它们用法基本一致,所以只介绍openssl rsa. [root@xuexi tmp]# man rsa NAME rsa - RSA key pr ...
- c 数据拼接
char buf1[] = {0x31,0x32,0x33,0x00,0x51,0x52,0x53,0xaa,0xbb,0xcc,0x00}; int a=0xabcd6799; int b=0x88 ...
- 关于C#不同位数相与或,或赋值时,隐藏位数扩展该留意的问题
__int64 a; char b; a = b; a |= b; 如上情况,当b的最高位为1时,即b=0x80(或更大)时,b在扩展成64过程中会将最高位向高位扩展变成0xfffffffffffff ...
- PostgreSQL用户角色及其属性介绍
1.CREATE ROLE创建的用户默认不带LOGIN属性,而CREATE USER创建的用户默认带有LOGIN属性,如下: postgres=# CREATE ROLE pg_test_user_1 ...
- Selenium2+python自动化15-select下拉框
前言 最近由于工作原因,更新慢了一点,今天终于抽出一点时间给大家继续更新selenium系列,学习的脚本不能停止,希望小伙伴能多多支持. 本篇以百度设置下拉选项框为案例,详细介绍select下拉框相关 ...
- Spring MVC Web框架
1. Spring MVC简介 Spring MVC是java EE平台请求驱动类型的轻量级Web框架,使用了MVC设计模式的思想,spring框架的主要优势之一就是分层架构,分层架构允许选择使用 ...
- mysql时间查看以及定时器相关操作
1.查看事件 show events select * from mysql.event 2.查看是否开启定时器 0:off:1:on 开启定时器:set global event_scheduler ...
- 使用dynamic动态设置属性值与反射设置属性值性能对比
static void Main(string[] args) { int times = 1000000; string value = "Dynamic VS Reflection&qu ...
- 一个使用高并发高线程数 Server 使用异步数据库客户端造成的超时问题
现象 今天在做一个项目时, 将 tomcat 的 maxThreads 加大, 加到了 1024, tomcat 提供的服务主要是做一些运算, 然后插入 redis, 查询 redis, 最后将任务返 ...