Het kan handig zijn om data uit je Active Directory (AD) op te nemen in je Datawarehouse. In mijn situatie was het handig omdat de klant graag wilde zien of een gebruiker die uit dienst was nog steeds in AD bestond. Deze koppeling had men op dit moment niet, de helpdesk moest dus handmatig van alles controleren.
Lees meer…
Ik heb me de laatste tijd vaak geirriteerd aan de volgende foutmelding:
The selected report is not ready for viewing. The report is still being rendered or a report snapshot is not available. (rsReportNotReady).
Lees meer…
Als je een rapportage in Reporting Services maakt wil je deze rapportage vaak naar Excel kunnen exporteren. Reporting Services vernaggeld nogal eens wat aan de opmaak. Zo worden er vaak kolommen ingevoegd die er eigenlijk niet horen en krijg je vaak afrondingsproblemen.
Lees meer…
Ik liep onlangs tegen een vraagstuk aan die ik wel interessant vond om op mijn blog te plaatsen. Het behandelt een veelvoorkomende situatie waarbij je een dataset meerdere keren gebruikt, ook wel een recursieve query genoemd. Men vroeg het aantal gewerkte weken per periode per uitzendkracht.
Per periode kan iemand meerdere declaraties hebben waarbij het getal “weken gewerkt” wordt bijgehouden. Om te bepalen hoeveel weken iemand in een periode heeft gewerkt pakken we de laatste “weken gewerkt” in een periode en trekken daar de laatste “weken gewerkt” uit de vorige periode vanaf, klinkt simpel toch?
Onderstaande afbeelding toont het resultaat wat we als basis gaan gebruiken om “weken gewerkt” per periode vast te kunnen stellen:

We hebben onze data gegroepeerd op jaar, Periode444Nummer, krachtcode en pakken de MAX(WekenGewerkt) per periode. Als we nu willen weten hoeveel weken iemand heeft gewerkt in periode 6-2008 moeten we 76-72 uitvoeren. Iemand heeft tenslotte aan het einde van periode 6-2008 76 weken gewerkt en aan het einde van periode 5-2008 72 weken gewerkt. Dit verschil is wat hij in periode 6 heeft gewerkt.

Om dit alles mogelijk te maken genereren we bovenstaande standaard dataset die we vervolgens kunnen hergebruiken, ook wel Common Table Expression genoemd (CTE). Ook voegen we een rijnummer toe per krachtcode en sorteren dit op krachtcode, jaar en periodenummer. Verder hebben we ook het vorige jaar nodig om te kunnen bepalen hoeveel weken iemand gewerkt heeft in de eerste periode van het huidige jaar! Dit zorgt voor een resultaat dat er ongeveer zo uitziet:

De sortering zorgt ervoor dat alles netjes in volgorde staat zodat we straks eenvoudig de weken van elkaar kunnen aftrekken!
Vervolgens maken we onderstaande query en voeren dit op de eerdere gegenereerde dataset uit:

De kracht zit hem in het stukje met de cirkel eromheen. Hierbij joinen we de tabel op zichzelf zodat we het resultaat van de vorige week gewerkt kunnen vinden. Dit trekken we van de huidige week af en vinden zo het resultaat.
De complete query ziet er ongeveer zo uit:

Uiteraard kun je dit voorbeeld in veel meer situaties gebruiken, bijvoorbeeld voor het berekenen van cumulatieven.