Reporting: Hoe en kalender genereren om er gegevens aan te koppelen?

0000002806     -      03-04-2018

Bij sommige rapporten wordt er soms gevraagd om een periode weer te geven in een lijst met hierin alle datums en indien nodig een totaal van verkopen.(bijvoorbeeld)

Het is daarom noodzakelijk om een lijst met datums te genereren, ook voor datums waarop er geen verkopen geregistreerd werden.

In het bijgevoegd voorbeeld genereren we een temp tabel met hierin een record voor iedere dag voor de periode van 1 maand.

Vervolgens zoeken we alle betrokken documenten uit het commercieel beheer om ze te koppelen aan de verschillende datums in de Temp tabel.

Het resultaat geeft dan een volledige kalender met de bedragen naast bepaalde datums.

Dit voorbeeld kan worden gebruikt als basis voor rapporten waarin dagen, weken of perioden opgesomd worden.

 

SET dateformat dmy

declare @mois char(7), @annee char(4), @debutmois date, @finmois date, @cntNbrJours int = 1, @DateToAdd datetime

select @mois = left(@mois_1, 2),
@annee = right(@mois_1, 4),
@debutmois = CAST('01/' + @mois_1 as DATE),
@finmois = dateadd(day, -1, dateadd(month, 1, @debutmois)),
@cntNbrJours = day(@finmois) - day(@debutmois) + 1, @DateToAdd = CAST('01/' + @mois_1 as DATE)

/*----- Génération tableau des jours du mois ----*/
CREATE TABLE [dbo].[#TmpJours](
[COMPTEUR] [INT] NULL,
[DATE] [datetime] NULL,
[ANNEE] [INT] NULL,
[MOIS] [INT] NULL,
[JOUR] [INT] NULL
) ON [PRIMARY]

declare @cnt int = 1

while @cnt <= @cntNbrJours
begin
INSERT INTO #TmpJours (COMPTEUR, DATE, ANNEE, MOIS, JOUR)
VALUES (@cnt, @DateToAdd, YEAR(@DateToAdd), MONTH(@DateToAdd), DAY(@DateToAdd));
set @DateToAdd = DATEADD(day,1,@DateToAdd)
set @cnt = @cnt + 1
end

/*---- Récupérer les données de gestion commerciale ----*/ select pieds_v.date as date, round(sum(pieds_v.TOT_TTC_FB), 2) as tot_ttc_fb into dbo.#tmpVente
from pieds_v
where pieds_v.type = 1 and month(pieds_v.DATE) = @mois and year(pieds_v.DATE) = @annee
group by pieds_v.date

/*---- Regrouper les données ----*/
select dbo.#TmpJours.compteur, #TmpJours.date, dbo.#tmpVente.tot_ttc_fb
from dbo.#TmpJours
left join dbo.#tmpVente on dbo.#tmpVente.date = dbo.#TmpJours.date
order by dbo.#TmpJours.compteur

drop table #TmpJours
drop table dbo.#tmpVente

 



Functionele cookies: Cookies die nodig zijn voor het gebruik van de website en voorkeurscookies. Ze bevatten geen persoonsgegevens. (Meer informatie)

Analytische cookies: Verzamelen van statistieken met betrekking tot het gedrag van internetgebruikers. (Meer informatie)

Marketingcookies: Om bezoekers op verschillende websites te volgen voor advertentiedoeleinden. (Meer informatie)