none
SQL запрос для построения произвольного отчета. RRS feed

  • Вопрос

  • Возникла задача построить произвольный отчет из SCCM. Более точто, нужно выдать список:

    Имя компьютера (Host Name), Домен (Domain Name), Количество ядер CPU (CPU Core Count), Количество ОЗУ (Total Physical Memory), общий обем аппаратного диска (Physical Disk),IP адрес,OU домена, дата последней активности (Last Activity).

    Таким образом предполагается увидель список машин, их краткую характеристику, IP адрес и OU домена где находится учетка ПК и когда она была активна.

    Очень важно знать OU домена, так как все машины разложены по ОУшкам в зависимости от подразделения и географии.

    Очень важно знать IP адрес, так как не всегда OU домена назначен правильно, для контроля.

    Я нашел и проверил работу вот такого запроса:

    =============================

    SELECT DISTINCT 
        CS.Name0 AS 'Host Name', 
        PRO.Name0 AS 'CPU Name',
        RAM.TotalPhysicalMemory0/1024 as RAM,
        HD.Size0/1024 AS 'PhDisk, Gb'
        
     FROM 
        dbo.v_GS_COMPUTER_SYSTEM CS
        INNER JOIN dbo.v_GS_PROCESSOR PRO ON CS.ResourceID = PRO.ResourceID
        INNER JOIN dbo.v_GS_X86_PC_MEMORY RAM ON CS.ResourceID = RAM.ResourceID
        INNER JOIN dbo.v_GS_DISK HD ON CS.ResourceID = HD.ResourceID and HD.Index0 = 0

     GROUP BY 
        CS.Name0, 
        PRO.Name0,
        RAM.TotalPhysicalMemory0,
        HD.Size0

    =============================

    но он отображает CPU Name, а нужно CPU Core Count и не хватает остальной информации.

    Прошу помочь мне составить верный запрос и так же подсказать, есть ли готовое краткое издание о том, где брать необходимые переменные для запроса и как его составлять быстро. Самой собой сдесь, но может есть что то более простое для понимания новичку?

    4 марта 2015 г. 15:47

Ответы

  • SELECT        dbo.v_GS_COMPUTER_SYSTEM.Name0 AS Netbios, dbo.v_GS_COMPUTER_SYSTEM.Domain0 AS Domain, 
                             dbo.v_GS_PROCESSOR.NumberOfCores0 AS Core, dbo.v_GS_X86_PC_MEMORY.TotalPhysicalMemory0 AS RAM, dbo.v_GS_DISK.Size0 AS HDD, 
                             dbo.v_CH_ClientSummary.LastActiveTime AS [Active Time], dbo.v_RA_System_SystemOUName.System_OU_Name0 AS OU, 
                             dbo.v_GS_NETWORK_ADAPTER_CONFIGURATION.IPAddress0 AS IP
    FROM            dbo.v_GS_COMPUTER_SYSTEM INNER JOIN
                             dbo.v_GS_PROCESSOR ON dbo.v_GS_COMPUTER_SYSTEM.ResourceID = dbo.v_GS_PROCESSOR.ResourceID INNER JOIN
                             dbo.v_GS_X86_PC_MEMORY ON dbo.v_GS_PROCESSOR.ResourceID = dbo.v_GS_X86_PC_MEMORY.ResourceID INNER JOIN
                             dbo.v_GS_DISK ON dbo.v_GS_X86_PC_MEMORY.ResourceID = dbo.v_GS_DISK.ResourceID INNER JOIN
                             dbo.v_CH_ClientSummary ON dbo.v_GS_DISK.ResourceID = dbo.v_CH_ClientSummary.ResourceID INNER JOIN
                             dbo.v_RA_System_SystemOUName ON dbo.v_CH_ClientSummary.ResourceID = dbo.v_RA_System_SystemOUName.ResourceID INNER JOIN
                             dbo.v_GS_NETWORK_ADAPTER_CONFIGURATION ON 
                             dbo.v_RA_System_SystemOUName.ResourceID = dbo.v_GS_NETWORK_ADAPTER_CONFIGURATION.ResourceID
    WHERE        (dbo.v_GS_NETWORK_ADAPTER_CONFIGURATION.IPAddress0 IS NOT NULL)

    ну что то подобное

    зыж вьюшки в базе называются понятно (если не понятно, то селект и смотрите, что за данные в таблицах лежат), короткие отчеты через создание вьюшки в студии строятся в 2 клика, все остальное знание синтаксиса. Во вьюшках практически все завязано на ResourceID.

    если вам нужен именно отчет, то кидайте его в report builder, там тоже все просто. 

    5 марта 2015 г. 10:53
    Модератор

Все ответы

  • PRO.NumberOfCores0 - кол-во ядер

    4 марта 2015 г. 16:53
  • А вообще надо посмотреть существующие отчеты, найти тот, что содержит необходимые данные, посмотреть определение отчета в дизайнере отчетов SSRS - оттуда увидите из каких таблиц запрашиваются данные.
    4 марта 2015 г. 17:04
  • SELECT        dbo.v_GS_COMPUTER_SYSTEM.Name0 AS Netbios, dbo.v_GS_COMPUTER_SYSTEM.Domain0 AS Domain, 
                             dbo.v_GS_PROCESSOR.NumberOfCores0 AS Core, dbo.v_GS_X86_PC_MEMORY.TotalPhysicalMemory0 AS RAM, dbo.v_GS_DISK.Size0 AS HDD, 
                             dbo.v_CH_ClientSummary.LastActiveTime AS [Active Time], dbo.v_RA_System_SystemOUName.System_OU_Name0 AS OU, 
                             dbo.v_GS_NETWORK_ADAPTER_CONFIGURATION.IPAddress0 AS IP
    FROM            dbo.v_GS_COMPUTER_SYSTEM INNER JOIN
                             dbo.v_GS_PROCESSOR ON dbo.v_GS_COMPUTER_SYSTEM.ResourceID = dbo.v_GS_PROCESSOR.ResourceID INNER JOIN
                             dbo.v_GS_X86_PC_MEMORY ON dbo.v_GS_PROCESSOR.ResourceID = dbo.v_GS_X86_PC_MEMORY.ResourceID INNER JOIN
                             dbo.v_GS_DISK ON dbo.v_GS_X86_PC_MEMORY.ResourceID = dbo.v_GS_DISK.ResourceID INNER JOIN
                             dbo.v_CH_ClientSummary ON dbo.v_GS_DISK.ResourceID = dbo.v_CH_ClientSummary.ResourceID INNER JOIN
                             dbo.v_RA_System_SystemOUName ON dbo.v_CH_ClientSummary.ResourceID = dbo.v_RA_System_SystemOUName.ResourceID INNER JOIN
                             dbo.v_GS_NETWORK_ADAPTER_CONFIGURATION ON 
                             dbo.v_RA_System_SystemOUName.ResourceID = dbo.v_GS_NETWORK_ADAPTER_CONFIGURATION.ResourceID
    WHERE        (dbo.v_GS_NETWORK_ADAPTER_CONFIGURATION.IPAddress0 IS NOT NULL)

    ну что то подобное

    зыж вьюшки в базе называются понятно (если не понятно, то селект и смотрите, что за данные в таблицах лежат), короткие отчеты через создание вьюшки в студии строятся в 2 клика, все остальное знание синтаксиса. Во вьюшках практически все завязано на ResourceID.

    если вам нужен именно отчет, то кидайте его в report builder, там тоже все просто. 

    5 марта 2015 г. 10:53
    Модератор
  • Красиво. То, что нужно.

    Пока я ждал ответ, предварительно, настрадал вот это:
        
    SELECT 
    
    DISTINCT
        CS.Manufacturer0 as 'Manufacturer',
        CS.Model0 as 'Model',
        CS.Name0 as 'Name',
        CS.Domain0 as 'Domain',
        CS.UserName0 as 'User_Name',
        CS.TimeStamp as 'TimeStamp',
        CS.NumberOfProcessors0 as 'CPU.Count',
        PRO.NumberOfCores0 as 'CPU.Cores',
        PRO.MaxClockSpeed0 as 'CPU.Speed',
        IP.IP_Addresses0 as 'IP.Adr',
        RS.Operating_System_Name_and0 as 'OS_Name',
        RAM.TotalPhysicalMemory0/1024 as 'RAM.MB',
        HD.Size0 as 'PhDisk,MB',
        CSM.LastOnline as 'LastOnline',
        CSM.LastPolicyRequest as 'LastPolReq',
        CSM.IsActiveDDR as 'IsActiveDDR'
    
    FROM
        dbo.v_GS_COMPUTER_SYSTEM CS
        INNER JOIN dbo.v_GS_PROCESSOR PRO ON CS.ResourceID = PRO.ResourceID
        INNER JOIN dbo.v_GS_X86_PC_MEMORY RAM ON CS.ResourceID = RAM.ResourceID
        INNER JOIN dbo.v_GS_DISK HD ON CS.ResourceID = HD.ResourceID and HD.Index0 = 0
        INNER JOIN dbo.v_RA_System_IPAddresses IP ON CS.ResourceID = IP.ResourceID and IP.IP_Addresses0 like '10.%'
        INNER JOIN dbo.v_R_System RS ON CS.ResourceID = RS.ResourceID
        INNER JOIN dbo.v_CH_ClientSummary CSM ON CS.ResourceID = CSM.ResourceID
    
    
    GROUP BY
        CS.Name0,
        CS.Domain0,
        CS.UserName0,
        IP.IP_Addresses0,
        CS.TimeStamp,
        CS.NumberOfProcessors0,
        PRO.NumberOfCores0,
        PRO.MaxClockSpeed0,
        RS.Operating_System_Name_and0,
        RAM.TotalPhysicalMemory0/1024,
        HD.Size0,
        CSM.LastOnline,
        CSM.LastPolicyRequest,
        CSM.IsActiveDDR,
        CS.Manufacturer0,
        CS.Model0
    



    И запутался вот в чем: во многих вьюшках есть TimeStamp. Т.е. я хочу понять, как мне правильно теперь разделить те машины, которые были взяты из домена, активны в сети, но имеют не установленный или неактивный CCMExec? Я считал, что это IsActiveDDR, но похоже запутался и это не так. Как правильно понять, какая метка времени, что означает? Например, есть v_CH_ClientSummary параметр IsActiveDDR. Но если он равняется "0", то практически всегда LastPolicyRequest имеет объективное значение в пределах последнего часа. В Вашем примере используется тот же v_CH_ClientSummary, но параметр  LastActiveTime.


    • Изменено Vadim Rebedyuk 5 марта 2015 г. 12:32 Редакция
    5 марта 2015 г. 12:31