我正在尝试创建sum()表达式,它将汇总行并将结果放入"Total Servers in TPM“列中。看起来我不能为sum表达式提供正确的提要。
设计模式下的SSRS矩阵报表如下:
Matrix report picture
TPM_scan_type表达式可以有两个值:"TPM成功完全扫描“或"TPM失败扫描”
=Switch(Fields!ScanStatus.Value = "OK","TPM Succesfull Scan",Fields!ScanStatus.Value = "FAILED!","TPM Failed Scan")scan_count表达式仅聚合每个“主SA”的值
=Switch(Fields!ScanStatus.Value="FAILED!",Count(Fields!ScanStatus.Value),Fields!ScanStatus.Value="OK", CountDistinct(Fields!ServerName.Value))结果:
Report output picture
数据示例:
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发布于 2013-04-12 20:09:43
对于scan_count,仅使用CountRows函数而不是Switch语句并不容易
看起来您已经在矩阵中设置了行/列组,所以CountRows将在调用它的任何范围内执行,并给出您想要的结果。
我创建了一个简单的测试DataSet:

有了这个DataSet,我根据上面的表达式添加了一个计算字段TPM_scan_type。
基于此,我创建了一个标准矩阵:

在每种情况下,屏幕截图中的表达式都是=CountRows()。
另请注意,中的Total超出了列组范围。
最终结果:

这看起来就是您所需要的,而且似乎是以一种更简单的方式完成的。
注释后编辑:
好了,我已经更改了DataSet,以便在OK ScanStatus结果中包含重复的行:

我已经将TPM表达式中的服务器总数更改为以下内容:
=Count(IIf(Fields!ScanStatus.Value = "FAILED!", Fields!ServerName.Value, Nothing))
+ CountDistinct(IIf(Fields!ScanStatus.Value = "OK", Fields!ServerName.Value, Nothing))它给出了所需的结果,我认为,与上面使用这个新的DataSet输出的报告相同。
事实上,这也可以用于TPM_Scan_Type,。
最后一个建议--有什么理由不能对所有表达式都使用=CountDistinct(Fields!ServerName.Value)吗?如果我理解你的数据,这将给出所需的结果-例如,它适用于上面的DataSet。
添加数据集后编辑:
我已经更新了报告以使用您的样本数据:

两个表达式的结果,即
=Count(IIf(Fields!ScanStatus.Value = "FAILED!", Fields!ServerName.Value, Nothing))
+ CountDistinct(IIf(Fields!ScanStatus.Value = "OK", Fields!ServerName.Value, Nothing))和
=CountDistinct(Fields!ServerName.Value)

因此,在我看来,您可以在所有情况下使用=CountDistinct(Fields!ServerName.Value)。
https://stackoverflow.com/questions/15969778
复制相似问题