Bonkster's SQL Server 2005 Blog
SQL Server 2005 & Google Tips

Deze blog-entry beschrijft hoe je eenvoudig een multi-value parameter kunt doorsturen van rapport A naar rapport B. Ik ben zelf lange tijd aan het klooien geweest om dit voor elkaar te krijgen. De oplossing was uiteindelijk erg simpel, het werkt precies hetzelfde als een normale parameter doorsturen. Het probleem was dat SSRS2005 standaard een (0) achter de parameter zet in de drillthrough aktie.

Wat ik zijn de gekozen weeknummer van Report A doorsturen naar Report B.

Report A: Parameter @GeselecteerdeWeekID (Multi-value)
Report B: Parameter @GeselecteerdeWeekID (Multi-value)

Ga naar de cell die je wilt linken naar Report B en klik op "Properties". Ga vervolgens naar "Navigation" en klik daar op "Jump to Report". Selecteerde het Report B.
....vervolgens selecteer je de parameter die je wilt doorsturen.
Klik de parameter aan. Standaard zet hij een (0) erachter, deze moet je weghalen en het werkt goed! Haal je de (0) niet weg stuurt hij alleen de eerste waarde van de reeks waarden door. Kies je bijvoorbeeld de weken: 200801, 200802,200803 , dan stuurt hij alleen 200801 door!

http://www.sqlblog.nl/component/option,com_jomcomment/id,98/opt,com_content/task,trackback/

 

Recursieve Querys

Posted In: . By Ronald Kraijesteijn

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.