AJUDA COM LÓGICA SQL + LOGICA

 Tópico anterior Próximo tópico Novo tópico

AJUDA COM LÓGICA SQL + LOGICA

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#483449 - 28/07/2018 18:07:53

ALEVALE
JUNDIAI
Cadast. em:Março/2012


Última edição em 28/07/2018 21:21:04 por WEBMASTER

Pessoal boa tarde

To com uma grande dúvida aqui...preciso criar uma lógica para medir a saúde do domínio de rede, eu acredito estar ter encontrado uma forma inicial de calcular isso..

Vamos a lógica primeiramente...
Eu basicamente tenho 3 grupos de objetos (usuários, grupos e computadores), cada 1 com os atributos (ativos, bloqueados, nunca uitlizados etc)...

                        Users    Computers    Groups    Total    Percentage
Active                  757            795               237    1789    44.16%
Idle                          250            825                63    1138    8.30%
Disabled                  128              0                 0             128      89.69%
Deleted                    0             45                 0         45            96.37%
Never Used          106              0                 0     106            91.46%
Total                  1241          1665               300    3206    66.00%=> Esse valor precisaria retornar


O que estou fazendo é o seguinte:
Pegando o 'Active' como exemplo =
Total da linha (1789)
Total da coluna (1241)
Porcentagem:%44,16
= (1789-1241)/1789

Assim eu sei quantos porcento a coluna representa do total, dai a porcentagem 66, seria somatoria de todas as porcentagem dividido pela quantidade de objetos (5)

Agora meu problema...
Eu estou extraindo as informações utilizando o UNION pois são tabelas diferentes, consigo extrair os valores acima porém não consegui colocar o calculo em código.

CÓDIGO:
Public Shared Function Domain_Health() As List(Of clsDomain_Health)
            Dim clsDomain As New List(Of clsDomain_Health)()
            Dim Encode As mdlGeneral = New mdlGeneral
            Dim SQL_Connection As SqlConnectionStringBuilder
            SQL_Connection = DAL.SQL_Connection.SQL_ConnectionString

            Dim Active As Integer = 0
            Dim Users_Active As Integer = 0

            Dim Idle As Integer = 0
            Dim Disabled As Integer = 0
            Dim Excluded As Integer = 0
            Dim Deleted As Integer = 0
            Dim Never_Used As Integer = 0
            Dim Total As Integer = 0
            Dim Users_Total As Integer = 0
            Dim Computers_Total As Integer = 0
            Dim Groups_Total As Integer = 0
            Dim Control As Integer = 0

            Dim Active_Total As Integer = 0

            Dim SQLConnection As New System.Data.SqlClient.SqlConnection(SQL_Connection.ConnectionString)
            Using cmd As New SqlCommand("select Active, Idle, Disabled, Excluded, Never_Used, Active + Idle + Disabled + Excluded + Never_Used as 'total' from (SELECT Active = count(distinct(CASE WHEN C.AD_Account_Enabled = 'Enabled' THEN C.AD_SamAccount END)), Idle = count(distinct(CASE WHEN C.LifeCycle_Status = 'Idle' THEN C.AD_SamAccount END)), Disabled = count(distinct(CASE WHEN C.AD_Account_Disabled = 'Disabled' THEN C.AD_SamAccount END)), Excluded = count(distinct(CASE WHEN C.LifeCycle_Status = 'Excluded' THEN C.AD_SamAccount END)),Never_Used = count(distinct(CASE WHEN C.LifeCycle_Status = 'Excluded' THEN C.AD_SamAccount END))FROM users_atrib AS C) t union (select Active, Idle, Disabled, Excluded, Never_Used, Active + Idle + Disabled + Excluded + Never_Used as 'total' from (SELECT Active = count(distinct(CASE WHEN C.LifeCycle_Status = 'Active' THEN C.ad_SamAccount END)), Idle = count(distinct(CASE WHEN C.LifeCycle_Status = 'Idle' THEN C.AD_SamAccount END)), Disabled = count(distinct(CASE WHEN C.LifeCycle_Status = 'Disabled' THEN C.AD_SamAccount END)),Excluded = count(distinct(CASE WHEN C.LifeCycle_Status = 'Excluded' THEN C.AD_SamAccount END)),Deleted = count(distinct(CASE WHEN C.LifeCycle_Status = 'Deleted' THEN C.AD_SamAccount END)),Never_Used = count(distinct(CASE WHEN C.LifeCycle_Status = 'Never Used' THEN C.AD_SamAccount END)) FROM computers_atrib AS C) t) union (select Active, Idle, Disabled, Excluded, Never_Used, Active + Idle + Disabled + Excluded + Never_Used as 'total' from (SELECT Active = count(distinct(CASE WHEN C.Status = 'Active' THEN C.AD_Group_Name END)), Idle = count(distinct(CASE WHEN C.Status = 'Empty' THEN C.AD_Group_Name END)),Disabled = count(distinct(CASE WHEN C.Status = 'A' THEN C.AD_Group_Name END)),Excluded = count(distinct(CASE WHEN C.Status = 'A' THEN C.AD_Group_Name END)),Deleted = count(distinct(CASE WHEN C.Status = 'A' THEN C.AD_Group_Name END)),Never_Used = count(distinct(CASE WHEN C.Status = 'A' THEN C.AD_Group_Name END)) FROM groups_atrib AS C) t)")
                cmd.Connection = SQLConnection

                SQLConnection.Open()
                Using sdr As SqlDataReader = cmd.ExecuteReader()
                    While sdr.Read()
                        Active = Active +sdr("Active")
                        Disabled = Disabled + sdr("Disabled")
                        Idle = Idle + sdr("Idle")
                        Never_Used = Never_Used + sdr("Never_Used")
                        Excluded = Excluded + sdr("Excluded")
                        Total = Total + sdr("Total")

                    End While
                End Using

                'CLOSE
                SQLConnection.Close()
                SQLConnection.Dispose()

End function


Precisaria de uma forma de realizar o calculo acima, mas não cheguei em nenhuma logica, talvez realizar os selects separados e depois trazer em uma função para chegar na porcentagem correta..

Alguma ideia ?


---------------------------------------------------------------
"Já está provado por A+B que A+B num prova nada"
---------------------------------------------------------------

 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por ALEVALE em 08/08/2018 15:47:54