我正在嘗試創建sum()表達式,它將總結行並將結果放入「TPM中的總服務器」列中。看起來我無法提供合適的表達式。在設計模式中SSRS矩陣報表總和表達式
SSRS矩陣報告如下所示:
[TPM_scan_type]表達式可以具有2個值: 「TPM Succesfull掃描」 或 「TPM失敗掃描」
=Switch(Fields!ScanStatus.Value = "OK","TPM Succesfull Scan",Fields!ScanStatus.Value = "FAILED!","TPM Failed Scan")
[scan_count]表達式只是每個「Primary SA」的聚合值
=Switch(Fields!ScanStatus.Value="FAILED!",Count(Fields!ScanStatus.Value),Fields!ScanStatus.Value="OK", CountDistinct(Fields!ServerName.Value))
結果:
數據樣本:
USE tempdb;
GO
IF OBJECT_ID('dbo.TPM_test') IS NOT NULL
DROP TABLE dbo.TPM_test;
GO
CREATE TABLE dbo.TPM_test
(
ServerName varchar(30) NOT NULL,
ScanStatus varchar(10) NOT NULL,
Primary_SA varchar(30) NOT NULL,
HotfixID int
);
INSERT INTO dbo.TPM_test(ServerName, ScanStatus, Primary_SA, HotfixID)
VALUES('LDNSQLF700', 'OK', 'SA1', 157848);
INSERT INTO dbo.TPM_test(ServerName, ScanStatus, Primary_SA, HotfixID)
VALUES('LDNSQLF700', 'OK', 'SA1', 976832);
INSERT INTO dbo.TPM_test(ServerName, ScanStatus, Primary_SA, HotfixID)
VALUES('LDNSQLF700', 'OK', 'SA1', 234354);
INSERT INTO dbo.TPM_test(ServerName, ScanStatus, Primary_SA, HotfixID)
VALUES('NYSQL502', 'FAILED!', 'SA1', '');
INSERT INTO dbo.TPM_test(ServerName, ScanStatus, Primary_SA, HotfixID)
VALUES('PSQL1011', 'FAILED!', 'SA1', '');
INSERT INTO dbo.TPM_test(ServerName, ScanStatus, Primary_SA, HotfixID)
VALUES('NTQDF002', 'OK', 'SA1', 878641);
INSERT INTO dbo.TPM_test(ServerName, ScanStatus, Primary_SA, HotfixID)
VALUES('AUSSQL140', 'OK', 'SA2', 537990);
INSERT INTO dbo.TPM_test(ServerName, ScanStatus, Primary_SA, HotfixID)
VALUES('AUSSQL140', 'OK', 'SA2', 1349605);
INSERT INTO dbo.TPM_test(ServerName, ScanStatus, Primary_SA, HotfixID)
VALUES('JAP543X2', 'FAILED!', 'SA2', '');
INSERT INTO dbo.TPM_test(ServerName, ScanStatus, Primary_SA, HotfixID)
VALUES('EU456CLX', 'FAILED!', 'SA2', '');
INSERT INTO dbo.TPM_test(ServerName, ScanStatus, Primary_SA, HotfixID)
VALUES('EUCTX654', 'OK', 'SA2', 5637965);
INSERT INTO dbo.TPM_test(ServerName, ScanStatus, Primary_SA, HotfixID)
VALUES('EUCTX654', 'OK', 'SA2', 6464367) ;
INSERT INTO dbo.TPM_test(ServerName, ScanStatus, Primary_SA, HotfixID)
VALUES('EUCTX654', 'OK', 'SA2', 1323123) ;
INSERT INTO dbo.TPM_test(ServerName, ScanStatus, Primary_SA, HotfixID)
VALUES('EUCTX654', 'OK', 'SA2', 1004326) ;
GO
如果我的示例對我的示例沒有用處,可以添加一個半行數據集示例數據集嗎?另外,你能解釋爲什麼你使用'Count(Fields!ScanStatus.Value)'失敗,'CountDistinct(Fields!ServerName.Value)'成功? –
Hi @ Ian。感謝你及時的答覆。 CountRows()可以部分完成這項工作,但是我擁有的數據集迫使我使用開關。這完全是因爲Fields!ScanStatus可以爲服務器提供兩個值:「失敗!」或「確定」。但「失敗!」是獨一無二的價值(針對每臺機器),與「OK!」相反對於每個服務器重複幾次(因爲掃描返回服務器上缺失的修補程序)。所以我需要區分「OK」值來獲得掃描成功的服務器的數量。 – Mario
我把數據樣本放在上面的SQL表中。關於您之前問過的問題:「您能解釋爲什麼您使用... CountDistinct(Fields!ServerName.Value)取得成功嗎?」失敗有獨特的價值,所以我只是通過「Count(Fields!ScanStatus.Value)」來統計它們。我不能通過「OK」狀態進行聚合,因爲我只在每行中獲得一個,所以我使用serverName來完成這項工作。 – Mario