1.       新建报表项目。打开SQL Server Business Intelligence Development Studio,点击 文件 > 新建 > 项目,项目类型选择 商业智能项目 中的 报表服务器项目,为该项目命个名字。

2.       添加报表,我这里命名为 OppSQLReport.rdl 。

3.  添加数据源。类型要选择 Microsoft SQL Server,点击连接字符串旁边的 编辑 按钮,在弹出的连接属性对话框中,在服务器名称中输入SQL Server所在的服务器名称,登录到服务器使用默认的 使用Windows 身份验证,连接到一个数据库则选择你要发布到到的组织对应的数据库,一般是组织名称加上下划线在加上MSCRM。然后点击 确定 按钮就会自动生成连接字符串。在数据源的凭据中则使用第一个选项 使用Windows身份验证不变。

 
 
 4.  添加数据集。右击刚才添加的数据源,选择 添加数据集 ,在 查询下面的文本框中输入你准备好的SQL语句,我这里是输入 SELECT name, estimatedclosedate, estimatedvalue FROM FilteredOpportunity 。然后点击本对话框的确定按钮。 
  
5.  制作报表。从工具箱中拖动出来一个表,将三列拖动到表中,并且预览下没有问题。注意格式化的问题,可以参考文章 设置报表内容格式 ,如果是设置基础货币的显示格式,对应的筛选视图中有个列名叫crm_moneyformatstring,将货币类型字段的Format属性设置为这个字段即可。其他的格式化信息则通过 SELECT * FROM dbo.fn_GetFormatStrings() 新建一个DataSet,可以将这个DataSet命名为DSNumandCurrency,然后将显示字段的Format设置为类似如下之一即可:
First(Fields!DateFormat.Value, "DSNumandCurrency")
First(Fields!TimeFormat.Value, "DSNumandCurrency")
First(Fields!NumberFormat_0_Precision.Value, "DSNumandCurrency")
First(Fields!NumberFormat_2_Precision.Value, "DSNumandCurrency")
First(Fields!CurrencyFormat_2_Precision.Value, "DSNumandCurrency")
 
 
6.  为报表启用预筛选。因为这个是很简单的报表,我就用一种简单的办法来启用预筛选。就是SDK中说的 Automatic Pre-Filtering 方法。双击数据集,将FilteredOpportunity后面增加 AS CRMAF_FilteredOpportunity,如下图所示,然后点击确定。这个命名有讲究,就是要以 CRMAF_ 开头。
 
7. 发布报表。导航到 工作区 > 报表,设置属性如下图所示。然后点击保存并关闭按钮。
 
8. 测试报表。到 销售 > 商机 界面,选择一些记录,点击 运行报表 ,一会儿报表效果如下图所示,我后来为报表加了饼状图。
 
 
9.  使用显式预筛选。因为自动预筛选有些局限性,仅限于简单的报表,所以我这里也说明一下显示预筛选。显式开启预筛选功能,需要用到一个CRM参数CRM_FilteredEntity,因为是针对Opportunity实体,所以这个参数名称应该名为为CRM_FilteredOpportunity。增加的参数属性如下,除了名称外,最好将选择参数可见性更改为隐藏。将其默认值设置为 select FilteredOpportunity0.* from FilteredOpportunity as FilteredOpportunity0 。当然,不要在查询语句中使用 * ,一般应该指明要使用的查询列名,我这里是演示,所以从简了,也可以使用 select name, estimatedclosedate, estimatedvalue from FilteredOpportunity 更好。
 
  
10. 增加参数。更改数据集的属性,双击它,增加一个参数,名称为 @CRM_FilteredOpportunity ,值为 [@CRM_FilteredOpportunity] ,并将查询的SQL更改为类似如下:这样就完成使用显示预筛选的更改了。

DECLARE @SQL NVARCHAR(4000);

SET @SQL = 'SELECT name, estimatedclosedate, estimatedvalue FROM (' + @CRM_FilteredOpportunity + ') AS Filtered';

EXEC(@SQL);

 
 
如果碰到关联多个实体来显示数据的话,需要为要启用预筛选的实体创建一个参数,和前面的增加参数的类似。比如另外一个例子是 客户和联系人实体关联,显示客户和联系人两个实体的字段,我需要在客户上启用预筛选,那么我需要增加一个报表参数,名称为 CRM_FilteredAccount,这个参数的默认值我可以设置为简单的 select name,accountid from FilteredAccount ,并将这个参数设置为隐藏。
然后我还要修改数据集,增加一个参数,参数名为 @CRM_FilteredAccount ,参数值为 [@CRM_FilteredAccount] ,然后修改数据集的SQL类似如下:
DECLARE @SQL NVARCHAR(4000);
SET @SQL = 'select Filtered.Name,FilteredContact.FullName FROM (' + @CRM_FilteredAccount + ') AS Filtered ';
SET @SQL = @SQL + ' inner join FilteredContact on Filtered.AccountId = FilteredContact.AccountId';
EXEC(@SQL);
 这样就可以做到多实体关联的预筛选了。
 
值得注意的是,若之前报表没有启用预筛选,后来启用的,需要删除原来的报表,重新上传,囧。还有报表会有个默认的筛选条件,我们删除的话,去 报表 界面编辑默认筛选器,将条件去掉并保存即可。
 
 

引用来源:http://luoyong0201.blog.163.com/blog/static/1129305201311193338296/

注明:基于SQL的报表只能应用于On-Premise的CRM中,不能应用于Online版本的CRM中。

 

MSCRM中报表开发一:创建基于SQL报表的更多相关文章

  1. 六、K3 WISE 开发插件《直接SQL报表开发新手指导 - BOM成本报表》

    ======================== 目录: 1.直接SQL报表 ======================== 1.直接SQL报表 以BOM成本报表为例,在销售模块部署,需要购买[金蝶 ...

  2. MSCRM中报表开发二:创建基于FetchXML报表

    1. 获取FetchXML.因为FetchXML难以撰写,所以我们一般都是使用高级查找来生成FetchXML或者通过其他工具来生成.我这里在商机界面通过高级查找制作了一个新的视图,名称为 商机查询,  ...

  3. debian下为arm开发板创建基于debian或emdebian的根文件系统

    Debian系统本身包含对arm的支持,其包含的软件包最多,但是最终的文件系统要大一些. emdebian 是一个非常好用的嵌入式linux操作系统,其基于debian的特点对于熟悉debian系统的 ...

  4. Win10 IoT C#开发 2 - 创建基于XAML的UI程序 及 应用的三种部署方法

    Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. 上一章我 ...

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

    如果我们安装了sqlserver2008 R2,将会自动安装一个报表开发工具 不要以为此报表开发工具只适合于sqlserver2008,其实在sqlserver2012中也是支持的,事实上我现在项目中 ...

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

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

  7. 基于SQL的日志分析工具myselect

    基本介绍 程序开发者常常要分析程序日志,包括自己打印的日志及使用的其他软件打印的日志,如php,nginx日志等,linux环境下分析日志有一些内置命令能够使用,如grep,sort,uniq,awk ...

  8. Qlik报表开发见解

    因为项目需要,最近去做了Qlik Sense报表开发,学习了Qlik报表的开发方法和一些基础的开发模式,以下是我对Qlik报表开发的一些见解,个人水平有限,欢迎大神指导. 1.Qlik Sense的函 ...

  9. 微软BI 之SSRS 系列 - 在 Cube 中通过 MDX 查询实现基于父子递归关系的汇总报表

    之前我写了一篇在 SSRS 开发中处理这种父子关系的汇总与聚合的文章 (SSRS 系列 - 使用分组 Group 属性实现基于父子递归关系的汇总报表),示例中的查询是基于 SQL Server 关系型 ...

随机推荐

  1. 关于如何食用Xcode——用mac的小蒟蒻

    前言QwQ 对于一只用Mac的小蒟蒻,没有Dev_c++简直太难受了,用在线IDE写代码又没法保存,那么我们怎么办呢? 好在App Store里有这个好东西 所以我们今天来介绍一下 “如何使用Xcod ...

  2. TCP 流量控制、拥塞控制

    流量控制: 流量控制是为了控制发送方发送速率,保证接收方来得接收. 接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率.将窗口字段设置为 0,则发送方不能发送数据. ...

  3. Selenium自动化测试Python二:WebDriver基础

    WebDriver基础 欢迎阅读WebDriver基础讲义.本篇讲义将会重点介绍Selenium WebDriver的环境搭建和基本使用方法. WebDriver环境搭建 Selenium WebDr ...

  4. Java 死锁优化

    死锁示例1 public class SyncThread implements Runnable{ private Object obj1; private Object obj2; public ...

  5. Tensorflow应用之LSTM

    学习RNN时原理理解起来不难,但是用TensorFlow去实现时被它各种数据的shape弄得晕头转向.现在就结合一个情感分析的案例来了解一下LSTM的操作流程. 一.深度学习在自然语言处理中的应用 自 ...

  6. Font Awesome(一套很棒的图标库)

    Font Awesome 是一个非常方便的图标库.这些图标都是矢量图形,被保存在 .svg 的文件格式中.这些图标就和字体一样,你可以通过像素单位指定它们的大小,它们将会继承其父HTML元素的字体大小 ...

  7. vue---数据更新,视图不更新问题

    写点赞功能时,点赞后已经追加到对象里了,但是视图没有更新. 查找了些资料: 数据已经更新了但是视图不更新的问题,有几个原因: 1.根属性不存在,而想要直接给根属性赋值导致的视图不更新.此时初始化属性的 ...

  8. APP---发布动态、朋友圈类似,多张图片动响应式正方形展示布局 vue.js,aui.css,apiclouv

    环境:vue.js,aui.css,apicloud 1.没做控制之前.图片真实长度宽度. 2.下面用js控制高度 js部分 //js 部分 //先动态的获取属性宽度 var box4_col3 = ...

  9. 表格(Table)隔行变色

    在ASP.NET的Repeater控件,实现隔行变色,是极简单的事情.因为它有ListItemType.Item和ListItemType.AlternatingItem模版.如果在普通的表格(Tab ...

  10. C++为啥要使用new

    1.为什么要有new? 为什么要有new?为什么要动态创建对象?为什么有时候不用new,有时候又用new,比如: // Cocos2d-x3.x的Value类,大家都很熟悉了 Value v = Va ...