Gegevensbronnen
De gegevens waar waarvan de demo de resultaten toont komen uit een drietal MS Excel Spreadsheets:
...
De gegevens zijn uit de MS Excel sheets overgebracht naar een MS SQL 2014 database server. Zowel de AFAS als de REGAS De gedetailleerde REGAS uren registratie gegevens bevatten het AFAS personeelsnummer waarmee de gegevens van beide systemen gecombineerd kunnen worden.
Tabblad Contract uren AFAS vs geschreven in REGAS
Voor dit scherm word gebruikt gemaakt van de MS Excel sheets met personeelsgegevens en de gecumuleerde tijdregistratie gegevens.
Op dit scherm zijn 2 staafdiagrammen. De gegevens zijn deels berekend in MS SQL Server en deels in Power BI.
SQL Server berekeningen
Om de gegevens te kunnen weergeven, wordt een deel van de berekeningen uitgevoerd in SQL Server. In een view en een functie worden de uren berekend welke in de rapportage worden gebruikt.
Er zijn in de MS Excel sheet alleen totaal uren geregistreerd over de gehele periode. Voor de demonstratie zijn deze uren opgedeeld in verschillende categorieën. Deze "opdeling" is in de tabel in SQL Server opgeslagen.
Er is een selectie van het personeel gebruikt omdat het REGAS tijdschrijven Excel sheet nog geen AFAS personeelsnummer bevat en gegeven op naam moeten worden gecombineerd. Dit is handmatig uitgevoerd.
De periode beslaat een aantal dagen van begin datum tot einddatum. Binnen deze periode vallen een aantal dagen waarin niet gewerkt wordt, zoals bv. weekeinden en officiële vakantiedagen. Hiervoor word de volgende functie gebruikt.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
CREATE FUNCTION [dbo].[NetWorkDays](
@StartDate DATETIME
,@EndDate DATETIME
) RETURNS INT
AS
BEGIN
DECLARE
@result INT
,@StartDate2 DATETIME
,@EndDate2 DATETIME
,@HolidayCount INT
SET @StartDate2 = DATEADD(d,8-DATEPART(dw, @StartDate), @StartDate)
SET @EndDate2 = DATEADD(d,1-DATEPART(dw ,@EndDate), @EndDate)
SET @result = DATEDIFF(d, @StartDate2, @EndDate2) * 5 / 7
+ DATEDIFF(d, @StartDate, @StartDate2) - 1
+ DATEDIFF(d, @EndDate2, @EndDate)
- CASE WHEN DATEPART(dw,@StartDate) = 1 THEN 1 ELSE 0 END
- case when DATEPART(dw,@EndDate) = 7 THEN 1 ELSE 0 END
SET @HolidayCount = (SELECT COUNT(*) FROM Holiday WHERE [Date] BETWEEN @StartDate AND @EndDate)
RETURN @result - @HolidayCount
END |
De geregistreerde uren worden in een SQL view naar percentages berekend. Het percentage wordt op medewerker niveau berekend.
De geregistreerde periode is "hard" in de view geprogrammeerd.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
CREATE VIEW [dbo].[TijdschrijvenPersoneel]
AS
SELECT
T.[VolledigeNaam]
-- UREN
,[TotaalUren]
, dbo.NetWorkDays('2018-01-01','2018-04-04') AS NetWorkDays
, WerkzameUPW/40 * dbo.NetWorkDays('2018-01-01','2018-04-04') * 8 AS ExpectedHours
, [TotaalUren] - [OverlegUren] - [Training] - [Superuser] - [Vakgroephouder] - [Fondsenwerven] AS ClientUren
, [OverlegUren]
, [Training]
, [Superuser]
, [Vakgroephouder]
, [Fondsenwerven]
, ((WerkzameUPW/40 * dbo.NetWorkDays('2018-01-01','2018-04-04') * 8) - [TotaalUren]) AS NietGeschreven
-- Percentages
, ([TotaalUren] - [OverlegUren] - [Training] - [Superuser] - [Vakgroephouder] - [Fondsenwerven])/(WerkzameUPW/40 * dbo.NetWorkDays('2018-01-01','2018-04-04') * 8) * 100 AS ClientPercentage
, ([OverlegUren])/(WerkzameUPW/40 * dbo.NetWorkDays('2018-01-01','2018-04-04') * 8) * 100 AS OverlegPercentage
, ([Training])/(WerkzameUPW/40 * dbo.NetWorkDays('2018-01-01','2018-04-04') * 8) * 100 AS TrainingPercentage
, ([Superuser])/(WerkzameUPW/40 * dbo.NetWorkDays('2018-01-01','2018-04-04') * 8)* 100 AS SuperuserPercentage
, ([Vakgroephouder])/(WerkzameUPW/40 * dbo.NetWorkDays('2018-01-01','2018-04-04') * 8) * 100 AS VakgroephouderPercentage
, ([Fondsenwerven])/(WerkzameUPW/40 * dbo.NetWorkDays('2018-01-01','2018-04-04') * 8) * 100 AS FondsenwervenPercentage
, ((WerkzameUPW/40 * dbo.NetWorkDays('2018-01-01','2018-04-04') * 8) - [TotaalUren]) / (WerkzameUPW/40 * dbo.NetWorkDays('2018-01-01','2018-04-04') * 8) * 100 AS NietGeschrevenPercentage
FROM Personeel P
LEFT JOIN TijdSchrijven T on T.VolledigeNaam = P.VolledigeNaam
WHERE T.VolledigeNaam IS NOT NULL |
Uitwerking view - percentage berekening
Om het percentage te berekenen is het uitgangspunt het aantal contracturen van het betreffende personeelslid. Dit wordt in de view weergegeven in de kolom ExpectedHours. Het zijn de te verwachten uren over de geslecteerde periode.
Vervolgens kunnen we de percentages berekenen door de geregistreerde gespecificeerde uren te relateren aan de te verwachten uren. Door de totaal geregistreerde uren te relateren aan de te verwachten uren, kunnen we bereken hoeveel uren ten opzichte van het contract ontbreken. Dit zijn de niet geregisrteerde uren.Voor het initiële rapport met gecumuleerde uren is een beperkte selectie van personeelsleden gebruikt. De uren zijn gekoppeld op basis van naam en niet cliënt gebonden uren zijn gegenereerd om rapportage mogelijk te maken.
Pagina beschrijving:
Expand | ||||||
---|---|---|---|---|---|---|
| ||||||
|
Expand | ||||||
---|---|---|---|---|---|---|
| ||||||
|