zoukankan      html  css  js  c++  java
  • MSCRM中报表开发一:创建基于SQL报表

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

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

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

    Dynamics CRM教程之创建基于SQL报表 - 罗勇 - 罗勇的博客
     
    Dynamics CRM教程之创建基于SQL报表 - 罗勇 - 罗勇的博客
     
    Dynamics CRM教程之创建基于SQL报表 - 罗勇 - 罗勇的博客
     
     4.  添加数据集。右击刚才添加的数据源,选择 添加数据集 ,在 查询下面的文本框中输入你准备好的SQL语句,我这里是输入 SELECT name, estimatedclosedate, estimatedvalue FROM FilteredOpportunity 。然后点击本对话框的确定按钮。 
    Dynamics CRM教程之创建基于SQL报表 - 罗勇 - 罗勇的博客
      
    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")
     
    Dynamics CRM教程之创建基于SQL报表 - 罗勇 - 罗勇的博客
     
    6.  为报表启用预筛选。因为这个是很简单的报表,我就用一种简单的办法来启用预筛选。就是SDK中说的 Automatic Pre-Filtering 方法。双击数据集,将FilteredOpportunity后面增加 AS CRMAF_FilteredOpportunity,如下图所示,然后点击确定。这个命名有讲究,就是要以 CRMAF_ 开头。
    Dynamics CRM教程之创建基于SQL报表 - 罗勇 - 罗勇的博客
     
    7. 发布报表。导航到 工作区 > 报表,设置属性如下图所示。然后点击保存并关闭按钮。
     
    Dynamics CRM教程之创建基于SQL报表 - 罗勇 - 罗勇的博客
     
    8. 测试报表。到 销售 > 商机 界面,选择一些记录,点击 运行报表 ,一会儿报表效果如下图所示,我后来为报表加了饼状图。
     
    Dynamics CRM教程之创建基于SQL报表 - 罗勇 - 罗勇的博客
     
    Dynamics CRM教程之创建基于SQL报表 - 罗勇 - 罗勇的博客
     
    9.  使用显式预筛选。因为自动预筛选有些局限性,仅限于简单的报表,所以我这里也说明一下显示预筛选。显式开启预筛选功能,需要用到一个CRM参数CRM_FilteredEntity,因为是针对Opportunity实体,所以这个参数名称应该名为为CRM_FilteredOpportunity。增加的参数属性如下,除了名称外,最好将选择参数可见性更改为隐藏。将其默认值设置为 select FilteredOpportunity0.* from FilteredOpportunity as FilteredOpportunity0 。当然,不要在查询语句中使用 * ,一般应该指明要使用的查询列名,我这里是演示,所以从简了,也可以使用 select name, estimatedclosedate, estimatedvalue from FilteredOpportunity 更好。
     
    Dynamics CRM教程之创建基于SQL报表 - 罗勇 - 罗勇的博客
     
    Dynamics CRM教程之创建基于SQL报表 - 罗勇 - 罗勇的博客
      
    10. 增加参数。更改数据集的属性,双击它,增加一个参数,名称为 @CRM_FilteredOpportunity ,值为 [@CRM_FilteredOpportunity] ,并将查询的SQL更改为类似如下:这样就完成使用显示预筛选的更改了。

    DECLARE @SQL NVARCHAR(4000);

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

    EXEC(@SQL);

    Dynamics CRM教程之创建基于SQL报表 - 罗勇 - 罗勇的博客
     
    Dynamics CRM教程之创建基于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中。

     
  • 相关阅读:
    Android Gradle Plugin指南(五)——Build Variants(构建变种版本号)
    文件内容操作篇clearerr fclose fdopen feof fflush fgetc fgets fileno fopen fputc fputs fread freopen fseek ftell fwrite getc getchar gets
    文件操作篇 close creat dup dup2 fcntl flock fsync lseek mkstemp open read sync write
    嵌入式linux应用程序调试方法
    version control system:git/hg/subversion/cvs/clearcase/vss。software configruation management。代码集成CI:Cruisecontrol/hudson/buildbot
    最值得你所关注的10个C语言开源项目
    如何记录linux终端下的操作日志
    CentOS 5.5 虚拟机安装 VirtualBox 客户端增强功能
    sizeof, strlen区别
    C/C++嵌入式开发面试题
  • 原文地址:https://www.cnblogs.com/Earson/p/4159750.html
Copyright © 2011-2022 走看看