none
[Duvida]Calculando porcentagem RRS feed

  • Pergunta

  • Tem alguma função que calcula porcentagem?

    Eu achei uma matéria na net sobre isso, mas em alguns relatórios, a função feita por eles está deixando o processamento lento D+!!!

    Tem vez q o relatório demora 20 minutos pra ser feito (tirando a função do relatório ele leva menos de 30 segundos)

    Então eu estava pensando em resolver isso na própria query...

    Mas ai tive outro problema (como fazer isso?)

    Atualmente estou fazendo assim:

    Crio uma variável @total e faço isso na procedure:

    PROCEDURE [dbo].[REL_ATE_GRA_BEN_TOT]
        [VARIÁVEIS]
        @total AS DECIMAL(15,2)
    AS
    SELECT @total = SUM(A.ateValorTotal)
    FROM SGAS_DB.dbo.Gss_Atendimento AS A
    WHERE [<SELEÇÃO>];

    SELECT A.ateBeneficiario, A.ateFamilia, ((SUM(A.ateValorTotal)/@total)*100) AS Porcentagem,
           COUNT(A.ateFamilia) AS Qtde, SUM(A.ateValorTotal) AS Valor
    FROM SGAS_DB.dbo.Gss_Atendimento AS A
    WHERE [<SELEÇÃO>];
    GROUP BY A.ateBeneficiario, A.ateFamilia
    ORDER BY A.ateBeneficiario, A.ateFamilia
    RETURN

    Assim eu queria saber se resolvendo assim esta certo.
    terça-feira, 29 de janeiro de 2008 15:34

Respostas

  • Ta, essa função fica na propriedade Code do relatorio

    Public Function GetLabel(ByVal currentValue As Double, ByVal totalValue As Double) As String
        Return Format(currentValue / totalValue, "P1")
    End Function

    Eu uso essa função para colocar a porcentagem no Gráfico, por exemplo eu uso na legenda ficando assim :

    15% CONSULTAS
    20% TRANSPLANTES

    e etc...

    Para fazer isso, na função da Label da legenda eu coloco assim :

    =Code.GetLabel(Sum(Fields!Valor.Value), Sum(Fields!Valor.Value, "grafico")) + " " + Fields!gruDescricao.Value

    ....

    Bom... é isso, o que estava querendo dizer é que queria que tirasse essa função do report e resolver essa parada de porcentagem logo na query... ai eu poderia puxar esse valor somente com o comando Fields!Porcentagem.Value

    Entende?



    -----
    EDITADO
    -----

    Aff. a lentidão não era por causa da função era pq eu estava fazendo isso :
    =Code.GetLabel(Sum(Fields!Valor.Value), Sum(Fields!Valor.Value, "grafico")) + " " + Fields!gruCodigo.Value
    Isso era em outra linha de código, eu estava concatenando um valor inteiro. O jeito certo de fazer é :
    =Code.GetLabel(Sum(Fields!Valor.Value), Sum(Fields!Valor.Value, "grafico")) + " " + Fields!gruCodigo.Value.ToString()
    terça-feira, 29 de janeiro de 2008 18:29

Todas as Respostas

  •  

    Bom dia Renan,

     

    Pode colar aqui a funcao que leva 20 minutos? As vezes essa expressão pode ser otimizada.

     

    Att

    Boreki

     

     

    terça-feira, 29 de janeiro de 2008 18:02
  • Ta, essa função fica na propriedade Code do relatorio

    Public Function GetLabel(ByVal currentValue As Double, ByVal totalValue As Double) As String
        Return Format(currentValue / totalValue, "P1")
    End Function

    Eu uso essa função para colocar a porcentagem no Gráfico, por exemplo eu uso na legenda ficando assim :

    15% CONSULTAS
    20% TRANSPLANTES

    e etc...

    Para fazer isso, na função da Label da legenda eu coloco assim :

    =Code.GetLabel(Sum(Fields!Valor.Value), Sum(Fields!Valor.Value, "grafico")) + " " + Fields!gruDescricao.Value

    ....

    Bom... é isso, o que estava querendo dizer é que queria que tirasse essa função do report e resolver essa parada de porcentagem logo na query... ai eu poderia puxar esse valor somente com o comando Fields!Porcentagem.Value

    Entende?



    -----
    EDITADO
    -----

    Aff. a lentidão não era por causa da função era pq eu estava fazendo isso :
    =Code.GetLabel(Sum(Fields!Valor.Value), Sum(Fields!Valor.Value, "grafico")) + " " + Fields!gruCodigo.Value
    Isso era em outra linha de código, eu estava concatenando um valor inteiro. O jeito certo de fazer é :
    =Code.GetLabel(Sum(Fields!Valor.Value), Sum(Fields!Valor.Value, "grafico")) + " " + Fields!gruCodigo.Value.ToString()
    terça-feira, 29 de janeiro de 2008 18:29