Назад | Перейти на главную страницу

Отчет SCCM для подсчета элементов коллекции возвращает мусор

Я написал отчет, чтобы узнать общее количество участников сразу в нескольких коллекциях. Он выполняется, но когда это происходит, только первая коллекция в списке возвращает свое фактическое членство. Остальные возвращают ненужные данные. Это среда SCCM 1610 на виртуальной машине Server 2008R2. Я создаю отчет в SQL Server Report Builder 3.0. Мое тестирование запускает команду execute в конструкторе запросов, а затем сравнивает результаты с информацией о членстве в этой коллекции в консоли Config Manager. Чтобы более полно объяснить мою проблему, вот код для одной коллекции:

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 Reporting Guy. Большую часть времени я могу обойтись без кода из существующих отчетов и из Интернета, но этот меня поставил в тупик. Спасибо, что нашли время изучить мою проблему.

Я обновил ваш запрос, чтобы он работал корректно.

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

Вы пробовали просто использовать поле MemberCount из v_Collection вместо COUNT (*)? Таким образом, вам не понадобится предложение «Группировать по», и это должно упростить отладку.

Взгляните на ссылку ниже, чтобы загрузить полный список представлений SQL, которые помогут в построении запросов позже.

https://gallery.technet.microsoft.com/SCCM-Configmgr-2012-R2-SQL-5fefdd3b

Ура

Джо