SSRS: Wyznaczanie w grupach średniej z uwzględnieniem wartości NULL

25-Kwi-2018

Jak SQL wyznaczy średnią z 10 NULL i 20 ?

NULL zostanie pominięte, mamy więc (10+20)/2 = 15

My jednak chcielibyśmy mieć NULL rozpatrywane jako zero: (10 + 0 + 20) / 3 = 10

Jak zaimplementować taką interpretację NULL w raporcie SSRS?

Na początku zakładam tabelę z przykładowymi danymi:

zakładam tabelę z przykładowymi danymi:

use tempdb
go
 
create table test
(
 [year] int,
 [quarter] int,
 [value] int
)
go
 
insert test values
 (2018,1,10),
 (2018,2,20),
 (2018,3,30),
 (2018,4,40),
 (2019,1,100),
 (2019,2,200),
 (2019,3,NULL),
 (2019,4,NULL)

teraz tworzę raport, który pracuje na tych danych, z grupowaniem po roku. Definicja data set:

SELECT [year],[quarter],[value] FROM test

wygląd raportu:


grupowanie:


Oglądam raport i wygląda tak:


Funkcja Avg rzeczywiście opuszcza NULL i to jest dobrze, bo funkcje agregujące domyślnie tak się w SQL mają zachowywać.

Ponieważ Ty chcesz, aby NULL było równe 0, to wykonuję zmianę:


pod <<Expr>> mam wyrażenie:

=Avg(iif(IsNothing(Fields!value.Value),0,Fields!value.Value))

a wynik wygląda tak:


Czyli Avg „widzi” null jak 0 i uwzględnia w liczeniu średniej.

Osobiście „nie lubię” tego jak SSRS interpretuje moje dane i staram się wykonywać konwersje na poziomie zapytania, które znajduje sięw data set. Zamiast:

SELECT [year],[quarter],[value] FROM test

można napisać tak:

SELECT [year],[quarter],ISNULL([value],0) FROM test

wtedy wartości NULL zostaną wyeliminowane na poziomie SQL i SSRS będzie pracował na liczbach (zerach w przypadku NULL)

 

Dodaj komentarz:

Autor: Rafał Kraik