[http://blog.sina.com.cn/s/blog_55a426e40100nwi2.html]
在商業網路環境裡部署了SCCM2007後,我們除了可以利用它來分發軟體、補丁、網路控制之外,還可以深入挖掘SCCM報表功能。
當SCCM2007打過SP2包後,已經為我們準備了373個內容豐富的內建報表。然而,有時你會感覺它並不是你想要的報表,當然Microsoft早已為你提供了自訂功能。 如果因為公司電腦台帳資訊沒有維護好,你要尋找某幾個使用者使用的電腦HostName、IP Address...這時候,對於IT是相當尷尬了。當然我們可以有很多方法尋找出來,然而我們今天就利用SCCM自訂報表功能來Show出一個完整用戶端台帳資訊報表。
- 建立一個報表。
如名稱:用戶端資訊台帳
類別:Asset Intelligence
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會預設為其產生一個報表的參數。
SELECTDISTINCTv_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 ClientVersionFROM 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.ResourceIDWHERE 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來運行這個報表。