1

我正在尝试创建 sum() 表达式,它将汇总行并将结果放入“TPM 中的总服务器”列中。看起来我无法为 sum 表达式提供正确的提要。

设计模式下的 SSRS 矩阵报告如下所示:

矩阵报表图片


[TPM_scan_type] 表达式可以有 2 个值:“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))


结果:

报表输出图片

数据样本:

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
4

1 回答 1

0

CountRows只使用函数而不是scan_countSwitch的语句会不会更容易?

看起来您已经在 Matrix 中设置了行/列组,因此CountRows只会在它被调用的任何 Scope 中执行并给出您想要的结果。

我创建了一个简单的测试数据集:

在此处输入图像描述

使用此数据集,我根据您上面的表达式添加了一个计算字段TPM_scan_type 。

基于此,我创建了一个标准矩阵:

在此处输入图像描述

在每种情况下,屏幕截图中的表达式都是=CountRows().

另请注意,TPM 中的 Total Servers不在列组范围内。

最终结果:

在此处输入图像描述

这看起来像您所需要的,并且似乎以更简单的方式进行。

评论后编辑:

好的,我已更改 DataSet 以包含OK ScanStatus结果的重复行:

在此处输入图像描述

我已将TPM表达式中的 Total Servers 更改为以下内容:

=Count(IIf(Fields!ScanStatus.Value = "FAILED!", Fields!ServerName.Value, Nothing))
    + CountDistinct(IIf(Fields!ScanStatus.Value = "OK", Fields!ServerName.Value, Nothing))

我认为,这给出了所需的结果,与使用这个新数据集的上述报告输出相同。

事实上,这也可以用于TPM_Scan_Type

最后一个建议 - 有什么理由不能只=CountDistinct(Fields!ServerName.Value)用于所有表达式?如果我了解您的数据,这将给出所需的结果 - 例如,它适用于上述数据集。

添加数据集后编辑:

我已更新报告以使用您的示例数据:

在此处输入图像描述

两个表达式的结果,即

=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)在所有情况下使用。

于 2013-04-12T12:09:43.187 回答