SQL GO!!!

select 'Blog focado em SQL Server' from blog where nome ='SQLGO.wordpress.com'

Como resolver o “Divide by zero” no reporting services

Olá galera, voltei para deixar uma dica vocês!

Eu estava quebrando a cabeça com um erro costumeiro, “Divide by zero”, mas não importava o IIF que eu montasse, ele acabava tentando realizar a divisão.

Depois de muito tentar, resolvi apelar para o google e achei uma forma muiiiito fácil de fazer a divisão, e logo após resolver o problema consegui montar o IIF novamente Humpfff.

Vamos lá!

Montei uma query simples para esse exemplo:

Select *

FROM (VALUES      (0,0),(0,6),(6,0),(23,234)

,(647,435),(645,874),(354,422),(9,11)

,(32,22),(45,46),(76,2) ) as Tabela (Valor1, Valor2)

Resultado da query

E o resultado da divisão entre o primeiro valor pelo segundo, retornado a percentagem, junto com o bendito erro!!!

img2

Warning              1             [rsRuntimeErrorInExpression] The Value expression for the textrun ‘Textbox5.Paragraphs[0].TextRuns[0]’ contains an error: Attempted to divide by zero.

O jeito mais fácil foi criar um código em VB, mas não precisa se assustar, é bem simples!

  1. No toolbar, clique em report, depois em report properties.
  2. Na aba “code”, cole o código abaixo:

img3

Public Function Divisao(ByVal dividendo As Double, ByVal divisor As Double) As Double

If divisor = 0 Then

Return 0

Else

Return dividendo / divisor

End If

End Function

Se o valor for um número inteiro irá retornar NAN ou Infinity, nesse caso está como decimal, então retorna #Error

Googlando, eu achei uma maneira de evitar o erro usando um truque de matemática, bem fácil também.

Agora, veja como ficou o código de cada campo:

%

=Fields!Valor1.Value/Fields!Valor2.Value

IIF

=IIf(Fields!Valor2.Value = 0

,0

,Fields!Valor1.Value / IIf( Fields!Valor2.Value = 0

,1

,Fields!Valor2.Value))

Code

=Code.Divisao(Fields!Valor1.Value,Fields!Valor2.Value)

Truque de matematica

=IIf(Fields!Valor2.Value = 0

,0

,Fields!Valor1.Value * (Fields!Valor2.Value ^ -1))

E o resultado é o seguinte:

img4

Pronto, tudo resolvido!

Até a próxima!

Deixe um comentário