![SCCM 报告统计收集成员正在返回垃圾邮件](https://linux22.com/image/715550/SCCM%20%E6%8A%A5%E5%91%8A%E7%BB%9F%E8%AE%A1%E6%94%B6%E9%9B%86%E6%88%90%E5%91%98%E6%AD%A3%E5%9C%A8%E8%BF%94%E5%9B%9E%E5%9E%83%E5%9C%BE%E9%82%AE%E4%BB%B6.png)
我编写了一份报告,以便一次性提供多个集合的总成员数。它执行后,只有列表中的第一个集合会返回其实际成员数。其他集合会返回垃圾数据。这是 Server 2008R2 VM 上的 SCCM 1610 环境。我正在 SQL Server Report Builder 3.0 中构建报告。我的测试是在查询设计器中运行执行命令,然后将结果与配置管理器控制台中该集合的成员信息进行比较。为了更全面地解释我的问题,下面是一个集合的代码:
SELECT
v_Collection.Name,
v_Collection.Comment,
v_Collection.CollectionID,
COUNT(*) AS [Members]
FROM
v_Collection,
v_FullCollectionMembership
WHERE
v_Collection.CollectionID = v_FullCollectionMembership.CollectionID
AND v_Collection.CollectionID LIKE 'XXXXXX01'
GROUP BY
v_Collection.Name,
v_Collection.Comment,
v_Collection.CollectionID
ORDER BY
v_Collection.Name
上述代码将返回以下内容:
如果我添加一个 OR 语句和另一个如下的集合:
SELECT
v_Collection.Name,
v_Collection.Comment,
v_Collection.CollectionID,
COUNT(*) AS [Members]
FROM
v_Collection,
v_FullCollectionMembership
WHERE
v_Collection.CollectionID = v_FullCollectionMembership.CollectionID
AND v_Collection.CollectionID LIKE 'XXXXXX01'
OR v_Collection.CollectionID LIKE 'XXXXXX02'
GROUP BY
v_Collection.Name,
v_Collection.Comment,
v_Collection.CollectionID
ORDER BY
v_Collection.Name
结果如下:
CollectionID XXXXXX02 的成员数不超过 900,000。它的成员数不到 200。查看 ConfigMgr 中的集合可以显示这一点,而且我有理由相信,这个集合中没有一百万个恶意设备。
对我来说,最令人困惑的是,当我添加连续的集合时,第一个集合之后的每个集合都有相同的编号,并且列表中的集合越多,编号就越大。例如,在没有更多屏幕截图的情况下,如果我添加第三个集合,结果如下:
CollID - MemberCount
XXXXXX01 - 1944
XXXXXX02 - 940519
XXXXXX03 - 940519
如果我添加第四个集合,结果如下:
CollID - MemberCount
XXXXXX01 - 1944
XXXXXX02 - 940568
XXXXXX03 - 940568
XXXXXX04 - 940568
我想指出的是,这些数字并不是每次都随着集合数量的增加而增加。三个集合的错误数字和四个集合的错误数字之间的差异是 49,但第四个集合有几千名成员。
我确信这是因为我不懂 SQL 和/或一般编码,但即使在一个经验丰富的系统管理员团队中,我也是唯一几个在没有大量经验的情况下试图编写这种代码的人之一,而且我们团队中没有人对 SQL 或查询有丰富的经验,所以我是事实上SCCM 报告员。大多数时候我都可以通过从现有报告和互联网中获取代码来解决问题,但这个问题让我很为难。感谢您花时间查看我的问题。
答案1
您是否尝试过只使用 v_Collection 中的 MemberCount 字段而不是 COUNT(*)?这样,您就不需要“Group By”子句,并且它应该使调试更容易。
查看下面的链接来下载完整的 SQL 视图列表,这将有助于稍后构建查询。
https://gallery.technet.microsoft.com/SCCM-Configmgr-2012-R2-SQL-5fefdd3b
干杯
乔
答案2
我更新了您的查询,以便它能够正常工作。
SELECT
Coll.Name as 'Collection Name',
Coll.Comment as 'Comment',
Coll.CollectionID as 'Collection ID',
COUNT(*) AS 'Members'
FROM
dbo.v_Collection Coll
join dbo.v_FullCollectionMembership FCM on Coll.CollectionID = FCM.CollectionID
WHERE
Coll.CollectionID LIKE 'XXXXXX01'
OR Coll.CollectionID LIKE 'XXXXXX02'
GROUP BY
Coll.Name,
Coll.Comment,
Coll.CollectionID
ORDER BY
Coll.Name