none
Problema com lógica // ERRO com a COUNT do ReportViewer. RRS feed

  • Pergunta

  • = Count (IIF (Fields!Auditado.Value > Fields!Reducao.Value, (Fields!Auditado.Value / IIF (Fields!Itens.Value <= 0, (IIF ( Fields!Itens.Value = 0 , "" , 1 )), Fields!Itens.Value)),




    IIf (Fields!Reducao.Value > Fields!Vendas.Value, (Fields!Reducao.Value / IIF (Fields!Itens.Value <= 0, (IIF ( Fields!Itens.Value = 0 , "" , 1)), Fields!Itens.Value)),




    Fields!Vendas.Value / IIF (Fields!Itens.Value <= 0, (IIF ( Fields!Itens.Value = 0 , "" , 1 )) , Fields!Itens.Value))))

    Então, retirando a parte em negrito e adicionando o número 1, eu consigo retornar o número total de linhas. Pois, caso o valor de itens seja 0, então ele vai dividir o campo "Total" (Que vai receber o maior valor de uma entre três colunas [Vendas, Reducao, Auditoria]) por 1. O problema é que agora eu preciso dividir todos os valores da coluna TOTAL pelas linhas de quantidade de itens. Bem, tudo ótimo até aí, pois eu consigo fazer a contagem da coluna itens, o problema são os itens com valor "0" que estão sendo contados também. A ideia é simplesmente contar todos os números maiores que 0.

    Alguém já fez algo semelhante ou pode me ajudar?


    Assunto = dúvida

    • Movido Gustavo Maia Aguiar sexta-feira, 27 de julho de 2012 19:43 (De:SQL Server - Desenvolvimento Geral)
    sexta-feira, 27 de julho de 2012 13:45

Respostas

  • Como falei em outro post e como Eduardo postou acima, se você quer fazer uma contagem conditional é mais fácil utilizar Sum do que Count, ao invez de somar o valor do campo, some "1" para cada valor que esta de acordo com a sua condição:

    =Sum(iif(Fields!Valor.Value > 0, 1, 0))

    Isso retorna o numero de instancias maiores que zero dentro do escopo do grupo em que você colocar a expressão.


    Boreki[MSFT] - SQL Server Reporting Services

    • Marcado como Resposta Richard Juhasz quarta-feira, 23 de janeiro de 2013 16:02
    sexta-feira, 27 de julho de 2012 19:59

Todas as Respostas

  • Amigo, bom dia.

    Da forma com está ele vai contar sim, pois o item que possui valor "0" também é um objeto, logo ele vai ser contato independentemente do valor preenchido.

    Tente fazer com sum e faça da seguinte forma: (IIF ( Fields!Itens.Value > 0 , 1 , 0 ))

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    sexta-feira, 27 de julho de 2012 13:56
  • Mas ai ele vai somar, certo? eu preciso apenas do número de linhas.

    Eu tentei com a dica, mas retorna

    #Error

    = Count ( INT (IIF (Fields!Auditado.Value  > Fields!Reducao.Value, (Fields!Auditado.Value \ IIF (Fields!Itens.Value <= 0, (IIF ( Fields!Itens.Value > 0 , 1 , 0 )), Fields!Itens.Value)), IIf (Fields!Reducao.Value > Fields!Vendas.Value, (Fields!Reducao.Value \ IIF (Fields!Itens.Value <= 0, (IIF ( Fields!Itens.Value > 0 , 1 , 0 )) , Fields!Itens.Value) ), Fields!Vendas.Value \ IIF (Fields!Itens.Value <= 0, (IIF ( Fields!Itens.Value > 0 , 1 , 0 )) , Fields!Itens.Value)))))

    Você não pode votar em sua própria postagem
    E se estou contando ele não me permite acrescentar SUM :/

    Porém, eu acabei de fazer um teste e, caso o valor seja "Valor = 0" Então ele vai receber " ", porém, vai tentar dividir o TOTAL por nulo, isso gera #ERRO... Ou seja, estou ferrado rs...
    sexta-feira, 27 de julho de 2012 13:59
  • Vc pode colocar código inteiro para análise por favor.

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    sexta-feira, 27 de julho de 2012 19:30
  • Como falei em outro post e como Eduardo postou acima, se você quer fazer uma contagem conditional é mais fácil utilizar Sum do que Count, ao invez de somar o valor do campo, some "1" para cada valor que esta de acordo com a sua condição:

    =Sum(iif(Fields!Valor.Value > 0, 1, 0))

    Isso retorna o numero de instancias maiores que zero dentro do escopo do grupo em que você colocar a expressão.


    Boreki[MSFT] - SQL Server Reporting Services

    • Marcado como Resposta Richard Juhasz quarta-feira, 23 de janeiro de 2013 16:02
    sexta-feira, 27 de julho de 2012 19:59