首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSRS矩阵报告表达式中的总和

SSRS矩阵报告表达式中的总和
EN

Stack Overflow用户
提问于 2013-04-12 19:06:40
回答 1查看 3.6K关注 0票数 1

我正在尝试创建sum()表达式,它将汇总行并将结果放入"Total Servers in TPM“列中。看起来我不能为sum表达式提供正确的提要。

设计模式下的SSRS矩阵报表如下:

Matrix report picture

TPM_scan_type表达式可以有两个值:"TPM成功完全扫描“或"TPM失败扫描”

代码语言:javascript
复制
=Switch(Fields!ScanStatus.Value = "OK","TPM Succesfull Scan",Fields!ScanStatus.Value = "FAILED!","TPM Failed Scan")

scan_count表达式仅聚合每个“主SA”的值

代码语言:javascript
复制
=Switch(Fields!ScanStatus.Value="FAILED!",Count(Fields!ScanStatus.Value),Fields!ScanStatus.Value="OK", CountDistinct(Fields!ServerName.Value))

结果:

Report output picture

数据示例:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-12 20:09:43

对于scan_count,仅使用CountRows函数而不是Switch语句并不容易

看起来您已经在矩阵中设置了行/列组,所以CountRows将在调用它的任何范围内执行,并给出您想要的结果。

我创建了一个简单的测试DataSet:

有了这个DataSet,我根据上面的表达式添加了一个计算字段TPM_scan_type

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

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

另请注意,中的Total超出了列组范围。

最终结果:

这看起来就是您所需要的,而且似乎是以一种更简单的方式完成的。

注释后编辑:

好了,我已经更改了DataSet,以便在OK ScanStatus结果中包含重复的行:

我已经将TPM表达式中的服务器总数更改为以下内容:

代码语言:javascript
复制
=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。

添加数据集后编辑:

我已经更新了报告以使用您的样本数据:

两个表达式的结果,即

代码语言:javascript
复制
=Count(IIf(Fields!ScanStatus.Value = "FAILED!", Fields!ServerName.Value, Nothing))
    + CountDistinct(IIf(Fields!ScanStatus.Value = "OK", Fields!ServerName.Value, Nothing))

代码语言:javascript
复制
=CountDistinct(Fields!ServerName.Value)

因此,在我看来,您可以在所有情况下使用=CountDistinct(Fields!ServerName.Value)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15969778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档