none
Somar campo ReportItems!txt.value - Erro Aggregate Function RRS feed

  • Pergunta

  • Olá, preciso fazer a soma de um total, tenho 4 datasets, cada dataset tem 12 colunas referentes aos 12 meses do ano, cada linha de coluna possui um número de diferentes informações, mas algumas linhas eu fiz o calculo por <<Expr>> -> (=IIF(REPORTITEMS!x1 = 0,0, ROUND((REPORTITEMS!x2.Value/REPORTITEMS!x1.Value),2)).

    Agora preciso somar o total em um Textbox na coluna "Total", na teoria seria nomear a textbox (x3) e colocar o seguinte código =SUM(ReportItems!x3.value), mas na hora de rodar ele apresenta o erro "Uses an aggregate function os a report item."

    Em alguns fóruns vi algumas coisas relacionadas a adicionar uma function no Code, em outros adicionar um textbox no header.

    Gostaria de saber se alguem sabe fazer e como fazer.

     

    Obrigado!

    segunda-feira, 17 de outubro de 2011 13:50

Todas as Respostas

  • Pesquise sobre o RunningValue(CAMPO, SUM, "Escopo"), vai resolver o seu problema. O SSRS não aceita item de relatório em funções de agregação.

     

    Boa sorte.


    Wyllian de Lima - Se a resposta ajudou vote como útil !
    terça-feira, 18 de outubro de 2011 18:39
  • Wyllian, obrigado pela ajuda mas eu já tentei esta opção...aperece o mesmo erro.

    No exemplo abaixo acho que consigo explicar melhor.

    -------------------------------------------------

                      Jan       Fev           TOTAL

    Penet.VN   0,65     1,40

    Penet.VU   1,83     0,85

    -------------------------------------------------

     

    os resultado dos campos Penet já são feitos por expression, esta tudo agrupado pelo mês..até Dez.

    O que eu preciso é somar o conteúdo dos campos..ai nesse caso eu teria que nomear a textbox e fazer um =SUM(ReportItems!textbox.value), mas ai esta o problema, eu não posso fazer SUM para o TOTAL, ele me volta o erro de aggregate function.

     

    Eu já vi em alguns exemplos algo relacionado ao Code. mas sem sucesso tambem.

     

    Se alguem conseguir ajudar eu agradeço.

    quarta-feira, 19 de outubro de 2011 12:11
  • Bom dia RocaB,

    Há algumas formas de se fazer isto.

    Todas não testei ainda mas acredito ser possível.

    No total você quer o resultado da somatória em Penet.VN de janeiro até dezembro, e abaixo do Penet.VU de janeiro até dezembro, certo?

    Eu vou considerar apenas o Penet.VN de janeiro até dezembro, e vamos colocar os nomes da caixa de texto para cada de forma sequencial, ou seja

    Penet.VN(Janeiro) = textbox1

    Penet.VN(Fevereiro) = textbox2

    Penet.VN(Março) = textbox3

    e assim por diante até Penet.VN(Dezembro) = textbox12

     

    Logo, no textbox13 (referente ao TOTAL), você colocará uma fórmula MUITO complexa, segue abaixo:

    =CDbl(CDbl(ReportItems!textbox1.value)+CDbl(ReportItems!textbox2.value)+CDbl(ReportItems!textbox3.value)+

    CDbl(ReportItems!textbox4.value)+CDbl(ReportItems!textbox5.value)+CDbl(ReportItems!textbox6.value)+

    CDbl(ReportItems!textbox7.value)+CDbl(ReportItems!textbox8.value)+CDbl(ReportItems!textbox9.value)+

    CDbl(ReportItems!textbox10.value)+CDbl(ReportItems!textbox11.value)+CDbl(ReportItems!textbox12.value))

     

    Eu sei, ficou de forma extensa demais, mas como você percebeu, não dá pra usar o RunningValue visto que o valor em cada célula já é um cálculo.

    A outra forma, como dito anteriormente é utilizar um code. Você pode fazer isto da seguinte forma:

    Cole no seu code as seguintes linhas de comando:

    Function TOTAL(byval Janeiro as Double, byval Fevereiro as Double, byval Marco as Double, byval Abril as Double, byval Maio as Double, byval Junho as Double, byval Julho as Double, byval Agosto as Double, byval Setembro as Double, byval Outubro as Double, byval Novembro as Double, byval Dezembro as Double) as double
    TOTAL = Janeiro+Fevereiro+Marco+Abril+Maio+Junho+Julho+Agosto+Setembro+Outubro+Novembro+Dezembro
    End Function

     

    E na célula do total, você vai colocar da seguinte forma:

     

    =code.TOTAL(CDbl(ReportItems!textbox1.value),CDbl(ReportItems!textbox2.value),CDbl(ReportItems!textbox3.value),

    CDbl(ReportItems!textbox4.value),CDbl(ReportItems!textbox5.value),CDbl(ReportItems!textbox6.value),CDbl(ReportItems!textbox7.value),

    CDbl(ReportItems!textbox8.value),CDbl(ReportItems!textbox9.value),CDbl(ReportItems!textbox10.value),

    CDbl(ReportItems!textbox11.value),CDbl(ReportItems!textbox12.value)

    Eu não tenho certeza se a opção de utilizar CODE vai funcionar, visto que não pude testar se irá converter para CDbl os valores de cada caixa de texto para poder mandar para o código. Em tese, a mais prática e mais fácil de funcionar é a primeira.

     

    Obs.: Eu tive que dar enter em algumas separações por vírgula ou + nas fórmulas que irão para célula, pois ficaria estranho aqui no tópico, caso você copie para o seu relatório, não esqueça de tirar os "enters".



    Rodrigo Ataíde.
    segunda-feira, 12 de dezembro de 2011 13:04
  • Rodrigo,

    Concordo plenamente com a sua sugestão, alias seria a minha também.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
    quarta-feira, 14 de dezembro de 2011 12:36
  • Rodrigo,

    Concordo plenamente com a sua sugestão, alias seria a minha também.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    Júnior, outra solução, que não sei se é viável, não testei ainda, seria fazer um RunningValue do grupo "table1_Details_Group".

    Talvez ficasse menos trabalhoso dessa forma, porém, estudando o Runningvalue, aparentemente se em algum ponto do grupo de detalhes o valor for nulo, a expressão de agregação somará até o último valor válido.

    Talvez quando o RocaB tentou realizar o RunningValue, não usou um grupo, usou apenas textbox, e ai gerou a mensagem de erro informando que um textbox não suporta funções de agregação.


    Rodrigo Ataíde.
    quarta-feira, 14 de dezembro de 2011 12:48