自定义SCCM报表

[http://blog.sina.com.cn/s/blog_55a426e40100nwi2.html] 

在企业网络环境里部署了SCCM2007后,我们除了可以利用它来分发软件、补丁、网络控制之外,还可以深入挖掘SCCM报表功能。

当SCCM2007打过SP2包后,已经为我们准备了373个内容丰富的内置报表。然而,有时你会感觉它并不是你想要的报表,当然Microsoft早已为你提供了自定义功能。
    如果因为公司计算机台帐信息没有维护好,你要查找某几个用户使用的计算机HostName、IP Address...这时候,对于IT是相当尴尬了。当然我们可以有很多方法查找出来,然而我们今天就利用SCCM自定义报表功能来Show出一个完整客户端台帐信息报表。
    1. 新建一个报表。
      如名称:客户端信息台帐
      类别:资产智能
      SQL语句:
      SELECT SYS.Netbios_Name0,IPAddr.IP_Addresses0, SYS.User_Domain0, SYS.User_Name0,MEM.TotalPhysicalMemory0, ASSG.SMS_Installed_Sites0, SYS.Client_Version0
      FROM v_R_System  as SYS JOIN v_RA_System_SMSInstalledSites as ASSG  on SYS.ResourceID=ASSG.ResourceID 
      LEFT JOIN  v_RA_System_IPAddresses IPAddr on SYS.ResourceID = IPAddr.ResourceID
      LEFT JOIN  v_GS_X86_PC_MEMORY MEM on SYS.ResourceID = MEM.ResourceID
      WHERE ASSG.SMS_Installed_Sites0 LIKE @variable Order by SYS.Netbios_Name0
      注意: @variable  为变量
    2. 需要点击“提示(P)”新建提示属性,我们可以利用该变量选择需要查看的“站点”范围
      名称:variable
      提示文本:站点代码
      提供SQL语句:
      begin
      if (@__filterwildcard = '')
      select SiteCode, SiteName from v_Site order by SiteCode
      else
      select SiteCode, SiteName from v_Site
      WHERE SiteCode like @__filterwildcard
      order by SiteCode
      end
    3. 实现点击查询出每条计算机信息链接到详细报表。
      “链接”页签里,选择链接类型为:链接到其他报表
      报表(R):硬件-常规-特定计算机的计算机信息

      至此,我们已经将“客户端信息台帐”报表建立好,通过IE访问SCCM报表应用网站,如:http://SCCM-Server/smsreporting_001/
      这里并未对SQL查询语句多做解释,其实并不复杂。大家只需参考SCCM内置报表即可创建出更为强大的报表。
注意:

1.自定义报表关键在于对视图中包含的信息的理解,并使用SQL查询语句进行组合来达到自己的目的。

2.需要先确认需要查询的信息是否已经被Agent进行收集,如果未收集,可通过修改Configuration.mof 文件和SMS_def.mof 文件来开启。如SMS_def.mof 文件:(True说明信息收集已开启,False说明未开启)

 
 
 
 
 
 
  • Part 1SCCM 的报表服务

    Part 1.1 – 报表服务概述

    SCCM 2007 R2提供了两个报表的角色,报表点和reporting service点。 其中报表点是SCCM内置的报表服务,SCCM 2007提供了388个内置的报表。你可以通过SQL 语句自己建立新的报表。要注意的是如果要在报表中使用图形,必须安装office web组件。但是64位操作系统不支持Office Web Components

    SCCM 2007 R2SCCM提供一个新的角色:Reporting Service点。Reporting Service点能够让SCCM的报表服务具有以下优势:

    • 使用SQL Server的标准报表服务(SQL Server Reporting Service)来查询SCCM数据库。
    • 提供了Model-Based报表创建方式和集成了Microsoft Report Builder报表创建工具,让不熟悉SCCM数据库表和视图的用户更方便的定制报表。
    • 通过使用SQL Serverreporting service提供报表的订阅服务。

    Part 1.2 – 定制报表

    SCCM中根据自己的需求创建新的报表,需要对SCCM数据库的视图有一个详细的了解。微软提供了一个程序:Creating Custom Reports By Using Configuration Manager 2007 SQL Views,这个程序提供了详细的SCCM视图的文档。

    Part1.2.1 – 报表点(Reporting Point),报表的创建

    我们在这里用一个例子来开始:比如IT管理员可能要求查询所有安装了特定软件的客户端。那么你需要用到3个视图:

    1. dbo.v_R_System
    2. dbo.v_GS_ADD_REMOVE_PROGRAMS
    3. dbo.v_GS_ADD_REMOVE_PROGRAMS_64

    然后新建报表,在报表的SQL语句中输入:

    select v_R_System.ResourceID, v_R_System.Netbios_Name0 as Name 
    from v_R_System 
    where v_R_System.Client0 =1and(v_R_System.ResourceID in(select v_GS_ADD_REMOVE_PROGRAMS.ResourceID from v_GS_ADD_REMOVE_PROGRAMS
                    where v_GS_ADD_REMOVE_PROGRAMS.DisplayName0 like@ProgramName)or v_R_System.ResourceID in(select v_GS_ADD_REMOVE_PROGRAMS_64.ResourceID from v_GS_ADD_REMOVE_PROGRAMS_64
                    where v_GS_ADD_REMOVE_PROGRAMS_64.DisplayName0 like@ProgramName
                    ))

    这里用到了报表里的Filter,也就是上面语句里的@ProgramName。这个FilterSCCM里被成为Prompt。如果要定义上面的@ProgramName Prompt,新建报表界面上点击如下图:

     

     

     

    在标注5的地方输入PromptSQL语句:

    begin

    if (@__filterwildcard = '')

    (Select distinct DisplayName0 As Name From v_GS_ADD_REMOVE_PROGRAMS) Union (Select distinct DisplayName0 As Name From v_GS_ADD_REMOVE_PROGRAMS_64)

    else

    (Select distinct DisplayName0 As Name From v_GS_ADD_REMOVE_PROGRAMS where v_GS_ADD_REMOVE_PROGRAMS.DisplayName0 like @__filterwildcard) Union (Select distinct DisplayName0 As Name From v_GS_ADD_REMOVE_PROGRAMS_64 where v_GS_ADD_REMOVE_PROGRAMS_64.DisplayName0 like @__filterwildcard)

    End

    下面是这个报表运行的结果:

     
  • Part1.2.2 – Reporting Service点,报表的创建

    这里我们使用和上面一样的例子,IT管理员可能要求查询所有安装了特定软件的客户端。

    首先下载安装SQL Reporting Service Report Builder 3.0。下载链接如下:

    http://www.microsoft.com/downloads/details.aspx?FamilyID=9f783224-9871-4eea-b1d5-f3140a253db6&displaylang=en

    需要注意在安装的时候可以指定数据源。数据源的格式是:

    http://[SQL server machine name]/ReportServer

    如果是named instance

    http://[SQL Server machine name]/ReportServer_[Instance Name]

    使用SQL Reporting Service Report Builder 3.0

     

    • 打开Report Builder -> 点击左上角的图标 -> 选择Options。在Report Builder Options窗口,settings页面输入你的report server。如果你的数据库是default instance Http://[SQL SERVER Reporting Service Machine name]/ReportServer。如果是named instance Http:// Http://[SQL SERVER Reporting Service Machine name]/ReportServer_InstanceName 
    • 然后,在左下角点击连接。这时Report Builder就会连到SQL Server Reporting Service,并且显示连接的状态。
    • 点击新建 -> Data Source。这里将会建立一个连接到你数据库的数据库连接。

    下面要建立你的报表需要的Data Set

    • 我们需要建一个包含所有在Windows Programs And Features里的软件的名称。你可以使用SQL 语句或Query Designer

                    SQL语句如下:

                   (SELECT DISTINCT v_GS_ADD_REMOVE_PROGRAMS.DisplayName0 AS Programs FROM v_GS_ADD_REMOVE_PROGRAMS) UNION (SELECT DISTINCT v_GS_ADD_REMOVE_PROGRAMS_64.DisplayName0 AS Programs FROM v_GS_ADD_REMOVE_PROGRAMS_64) ORDER BY Programs

                     

    1. 接下来要建立一个你的报表数据的Data Set. 下面就是SQL语句,但是要注意其中的@Program参数,report builder会默认为其生成一个报表的参数。
    SELECTDISTINCT
    v_R_System.ResourceID
     ,v_R_System.Netbios_Name0 AS Name
     ,v_R_System.Operating_System_Name_and0 AS OperatingSystem
     ,v_R_System.Client_Version0 AS ClientVersion
    FROM
      v_R_System
      LEFTOUTERJOIN v_GS_ADD_REMOVE_PROGRAMS
        ON v_R_System.ResourceID = v_GS_ADD_REMOVE_PROGRAMS.ResourceID
      LEFTOUTERJOIN v_GS_ADD_REMOVE_PROGRAMS_64
        ON v_R_System.ResourceID = v_GS_ADD_REMOVE_PROGRAMS_64.ResourceID
    WHERE
      v_R_System.Client0 =1AND(v_GS_ADD_REMOVE_PROGRAMS_64.DisplayName0 LIKE@Program
      OR v_GS_ADD_REMOVE_PROGRAMS.DisplayName0 LIKE@Program)

                     

     

    • 打开,刚才自动生成的Program参数,在Available Values页面将这个报表参数指向第一个data set

               

     

    最后在Report Builder页面上插入我们需要的报表。选择插入->表,会弹出新建表的窗口。

    • 选择我们报表的数据集,DataSet2

            

    • 选择我们需要在报表上显示的列。

            

    •   完成其余的关于外观,布局的选项。

     

    这是我们最后在report builder上看到的结果。

     

     

    这里你可以通过report builder来运行这个报表,这样可你让你在把这个报表发布到report server前进行测试。

     

     

     

    如果报表的结果满足要求,那接下来就要把这个报表部署到SQL Server Reporting Service上。点击左上角的图标,选择保存,保存到你想要的文件里。这时这个报表已经被保存到report server上了。

     

    最后,可以通过,SQL server reporting service web report manager来运行这个报表。

 
posted @ 2013-03-25 10:25  小师傅  阅读(2166)  评论(0编辑  收藏  举报