einddatum op basis van looptijd opslaan

Status
Niet open voor verdere reacties.

Meneerblaauw

Gebruiker
Lid geworden
4 dec 2015
Berichten
26
Ik krijg data aangeleverd met een startdatum en een looptijd (in maanden). In veel queries wordt echter de einddatum (startdatum + aantal maanden) gevraagd. In de query kan ik dat met DateAdd("m";[looptijd];[startdatum]) prima voor elkaar krijgen. Aangezien deze einddatum met grote regelmaat gevraagd wordt, zou ik echter liever in de tabel een extra veld willen opbouwen die deze datum voorberekent, zodat ik niet iedere keer de berekening in de query hoef op te nemen.
Op table niveau lijkt DateAdd echter niet te werken. Heeft iemand een suggestie hoe ik (zonder VBA, er ligt hier een afspraak dat er geen vba gebruikt mag worden) dit voor elkaar kan krijgen?
 
via een update query het veld einddatum bijwerken in de tabel?
 
dus na het inlezen, een update-query draaien.. Ik ga kijken of ik daarmee verder kan, maar ik sta open voor andere suggesties.:)
 
Wat schiet je daar mee op? Heb je nog steeds een query nodig. Wat is dat trouwens voor rare afspraak dat je geen VBA mag gebruiken? Ik zou, als je die berekening vaker nodig hebt, daar namelijk een simpele functie voor maken die je dan vervolgens in je query zet. Databases bouwen is vooral een kwestie van vooruit denken, en niet zaken blokkeren om wat voor rare redenen dan ook. Functionaliteit lijkt mij in dit geval veel belangrijker dan dat men niet wil dat er met VBA iets wordt gemaakt.
Overigens zou ik te allen tijde en met grote stelligheid en nadruk willen beklemtonen in jouw werkomgeving dat het not done is om redundante data te genereren. En dat ga je dus nu wél doen. Berekeningen horen niet thuis in tabellen. Punt.
 
Vanuit BI oogpunt ben ik het uiteraard niet volledig met je eens dat redundantie onbespreekbaar is, maar dat terzijde.
Ik zit erg tijdelijk op deze positie en mijn rol zal binnenkort worden overgenomen door een medewerker die absoluut niet bekend is met VBA. De hele database heeft een levensverwachting van max 6 maanden, maar er is uiteraard risico op verlenging. Parallel wordt aan een fundamentele DWH omgeving gewerkt, waardoor deze database om meerdere redenen niet te fancy mag worden (politiek). Daar zal deze datum via ETL worden gegenereerd waarmee deze datum eenvoudig beschikbaar is voor reporting.

Met de update query heb ik de functie slechts 1 keer nodig en kan het aangemaakte veld gebruikt worden voor reporting queries.
thnx jwaque
 
Als je dan toch op deze manier wilt werken, kun je net zo goed een berekend veld aan je tabel toevoegen; dan hoeft er ook geen query gedraaid te worden en valt er ook niks te vergeten.
 
Daar was ik eigenlijk naar opzoek. De functie dateadd kan echter niet in dit berekende veld gebruikt worden. Als er er een andere manier om deze berekening uit te voeren, hou ik me aanbevolen.
 
Dat ik ooit nog eens een berekend veld ging aanbevelen.... hoe diep kun je zinken :). Laat ik het er vooral duidelijk bij zeggen: berekende velden horen niet thuis in een tabel. Berekeningen maak je in queries. Ik snap niet dat Microsoft dat er in gezet heeft, want daarmee ben je in één klap alle compatibiliteit met andere database systemen kwijt. Ik vind dat een te hoge prijs... (er zijn meer van dat soort frutsels trouwens, velden met meerdere waarden bijvoorbeeld hebben hetzelfde nadeel)
Dat gezegd hebbende: hiermee bereik je het gewenste effect:
PHP:
     IIf([Startdatum] Is Null Or [Looptijd] Is Null;Null;DateSerial(Year([Startdatum]);Month([Startdatum])+[Looptijd];Day([Startdatum])))
 
Berekende velden horen inderdaad niet thuis in fatsoenlijke database omgevingen. Desalniettemin ben ik erg blij met je oplossing. Ik ga het verwerken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan