[http://blog.sina.com.cn/s/blog_55a426e40100nwi2.html]
在企业网络环境里部署了SCCM2007后,我们除了可以利用它来分发软件、补丁、网络控制之外,还可以深入挖掘SCCM报表功能。
当SCCM2007打过SP2包后,已经为我们准备了373个内容丰富的内置报表。然而,有时你会感觉它并不是你想要的报表,当然Microsoft早已为你提供了自定义功能。
如果因为公司计算机台帐信息没有维护好,你要查找某几个用户使用的计算机HostName、IP Address...这时候,对于IT是相当尴尬了。当然我们可以有很多方法查找出来,然而我们今天就利用SCCM自定义报表功能来Show出一个完整客户端台帐信息报表。
- 新建一个报表。
如名称:客户端信息台帐
类别:资产智能
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 为变量
- 需要点击“提示(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
- 实现点击查询出每条计算机信息链接到详细报表。
“链接”页签里,选择链接类型为:链接到其他报表
报表(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 1:SCCM 的报表服务
Part 1.1 – 报表服务概述
SCCM 2007 R2提供了两个报表的角色,报表点和reporting service点。 其中报表点是SCCM内置的报表服务,SCCM 2007提供了388个内置的报表。你可以通过SQL 语句自己建立新的报表。要注意的是如果要在报表中使用图形,必须安装office web组件。但是64位操作系统不支持Office Web Components。
在SCCM 2007 R2中SCCM提供一个新的角色:Reporting Service点。Reporting Service点能够让SCCM的报表服务具有以下优势:
- 使用SQL Server的标准报表服务(SQL Server Reporting Service)来查询SCCM数据库。
- 提供了Model-Based报表创建方式和集成了Microsoft Report Builder报表创建工具,让不熟悉SCCM数据库表和视图的用户更方便的定制报表。
- 通过使用SQL Server的reporting service提供报表的订阅服务。
Part 1.2 – 定制报表
在SCCM中根据自己的需求创建新的报表,需要对SCCM数据库的视图有一个详细的了解。微软提供了一个程序:Creating Custom Reports By Using Configuration Manager 2007 SQL Views,这个程序提供了详细的SCCM视图的文档。
Part1.2.1 – 报表点(Reporting Point),报表的创建
我们在这里用一个例子来开始:比如IT管理员可能要求查询所有安装了特定软件的客户端。那么你需要用到3个视图:
- dbo.v_R_System
- dbo.v_GS_ADD_REMOVE_PROGRAMS
- 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。这个Filter在SCCM里被成为Prompt。如果要定义上面的@ProgramName Prompt,新建报表界面上点击如下图:
在标注5的地方输入Prompt的SQL语句:
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
- 接下来要建立一个你的报表数据的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页面上插入我们需要的报表。选择插入->表,会弹出新建表的窗口。
这是我们最后在report builder上看到的结果。
这里你可以通过report builder来运行这个报表,这样可你让你在把这个报表发布到report server前进行测试。
如果报表的结果满足要求,那接下来就要把这个报表部署到SQL Server Reporting Service上。点击左上角的图标,选择保存,保存到你想要的文件里。这时这个报表已经被保存到report server上了。
最后,可以通过,SQL server reporting service web report manager来运行这个报表。