Jump to content
  • 0

Perioden van 4 weken


Sanne

Question

Posted (edited)

Gewenst is een rapportage van dagelijkse gebeurtenissen in perioden van 4 weken.

 

Hiervoor wordt een jaar opgedeeld in 13 perioden van 4 weken.

1 periode is precies 28 dagen.

Een periode begint op een maandag en eindigt op een zondag.

Periode 1 start op de maandag van de week waarin 1 januari valt.

(Periode 1 kan dus in december van het vorige jaar beginnen.)

 

Het gevolg is dat ik 2 zaken moet berekenen:

 

A. Gegeven een datum: in welke periode van welk jaar valt deze datum?

 

B. Gegeven een periode: op welke datum begint de periode en op welke datum eindigt de periode?

 

Zijn er mensen die met mij mee willen denken? Of mij in de richting willen wijzen naar een bron waar ik hier meer informatie over kan vinden?

 

----------------

 

Gaanderweg de posting, zijn - tot mijn spijt - de uitgangspunten voor het berekenen van de periode gewijzigd ... !

 

Periode 1 begint NIET op de maandag van de week waarin 1 januari valt.

 

Periode 1 start gelijk met weeknummer 1 volgens de fiscale weeknummering (waarbij de week op maandag begint).

Dat betekent dat periode 2 altijd op de maandag van week 5 begint.

En periode 3 begint op de maandag van week 9.

 

Bijkomende voorwaarden zijn:

Een jaar kan maximaal 13 perioden bevatten.

Bevat een jaar 53 weken, dan zal periode 13 - bij wijze van uitzondering - uit 5 weken bestaan.

 

 

-------------------------------

Edited by Guest

21 answers to this question

Recommended Posts

  • 0
Posted

Gaaf, dit lijkt me wel iets voor een Custom Function.... Ik zal eens wat gaan puzzelen thuis vanavond :) Dit moet wel te doen zijn :)

 

Wat je bijvoorbeeld kan doen is DayOfYear(datum) delen door 28 en afronden naar boven op hele getallen. De omgekeerde weg kun je dan bewandelen voor het bepalen van de begindatum van de periode.

  • 0
Posted

Ik heb de functionaliteit op dit moment wel in FileMaker Pro ZES nodig :(

 

Ben natuurlijk desalniettemin ook geïnteresseerd of FMP7 hier nog nieuwe inzichten in zal brengen. Het lijkt me dat aan de grondslag van de custom functions toch een formule moet liggen die ook in FMP6 uit te voeren is.

 

----------

 

Flash, wat jij voorstelt is de formule:

 

(DayofYear(Datum) / 28) + Mod(1 - Mod( (DayofYear(Datum) / 28) ; 1) ; 1)

Deze formule neemt het aantal dagen dat de datum ligt van 1 januari van zijn jaar, deelt dat getal door 28 en rondt dat naar boven af.

 

De formule "gaat nat" (kent iedereen die term?) op een datum als 31-12-2003.

 

31-12-2003 is een woensdag.

 

01-01-2004 valt op een donderdag.

Periode 1 van een jaar begint op de maandag van de week waarin 1 januari valt.

Periode 1 van het jaar 2004 start daarom op maandag 29-12-2003 en eindigt op zondag 25-01-2004 (28 dagen later).

 

31-12-2003 levert in de bovenstaande formule het periodenummer "14" op, terwijl deze datum in periode 1 van het jaar 2004 valt.

 

 

  • 0
Posted

Dat is de basis geweest voor http://www.clarify.net/viewtopic.php?t=1539 ...

 

Ik heb de functionaliteit op dit moment wel in FileMaker Pro ZES nodig

 

Ik push de data in Exel laat daar enkele datefucties op los en pull alles terug in FM...

Ik heb alleen maar info voor 'financial' periods...

En wat jij nodig hebt gaat daar iets buiten door je bijkomende voorwaarden....

Misschien heb je wel iets aan een excerpt over datumgebruik....

mag geen reclame maken....

  • 0
Posted

je kan het volgende gebruiken:

 

datumveld -

If(DayofWeek(datumveld) = 1; 6; DayofWeek(datumveld)) +

If(DayofWeek(datumveld) = 1; 0; 2)

 

Deze bepaald van < datumveld > de feitelijke datum van de maandag in dezelfde week. Die kan je gebruiken om de maandag te bepalen van 1 januari.

Vervolgens kan je dan vanuit die maandag gaan tellen met 28 dagen.

  • 0
Posted
31-12-2003 levert in de bovenstaande formule het periodenummer "14" op, terwijl deze datum in periode 1 van het jaar 2004 valt.

 

 

En een soort "modulo (365,25/28 )" correctie over die hele formule heen? Zodat het periodenummer onafhankelijk van het jaartal altijd tussen 1 en 13 ligt? :)

 

Ik baal er echt van dat ik hier op m'n werk geen filemaker heb.... :(

 

Ik heb aan Rony al eens een biertje verloren (die staat nog Rony, ik vergeet niets ;) ) met een uitspraak over dagnummering. Bij Filemaker is gelukkig begonnen bij het begin van de jaartelling, dus kun je gewoon het dagnummer "ab ovo" nemen... naaah wacht eens, dat gaat ook nat bedenk ik me net.... Ik moet echt even een veldtestje kunnen doen.... geef me vanavond een uurtje, dat gaat lukken :lol: Maar waarschijnlijk ben ik dan alweer te laat :oops:

  • 0
Posted

Misschien kun je WeekofYearFiscal gebruiken. hiermee kun je aangeven dat de weeknummering op een maandag begint. Je hoeft dan alleen nog maar naar boven af te ronden en je bent er. Een complete formule (inclusief naar boven af ronden):

 

Case(
Int(WeekofYearFiscal(Datum;2)/4)=WeekofYearFiscal(Datum;2)/4
;WeekofYearFiscal(Datum;2)/4;
Int(WeekofYearFiscal(Datum;2)/4)+1)

 

regel 1: begin controle

regel 2: controleer of een periode precies op een weeknummer begint

regel 3: zo ja, neem weeknummer en deel het door 4

regel 4: zo nee, neem het integer deel van de periode en tel er 1 bij op

 

Niet uitvoerig getest, maar zou denk ik moeten werken.

  • 0
Posted (edited)

Kijk, Wim, uh, ik bedoel Wouter, nu gaan we ergens heen. Jouw formule werkt *bijna* :)

 

Voor zaterdag 1 januari 2005 levert de formule periode 14 op. En periode 14 bestaat niet. Een jaar bestaat maximaal uit 13 perioden. In het geval een jaar uit 53 weken bestaat, zal periode 13 - bij wijze van uitzondering - uit 5 weken bestaan.

 

Dat heb ik opgelost door de Min()-functie te gebruiken:

 

Min( 13 ; 

Case( 
Int( WeekofYearFiscal( Datum ; 2 ) / 4) = WeekofYearFiscal( Datum ; 2 ) / 4 ;  
 WeekofYearFiscal( Datum ; 2 ) / 4 ; 
 Int( WeekofYearFiscal( Datum ; 2 ) / 4 ) + 1 )
)

 

Het ziet er naar uit dat het vinden van het nummer van de 4-weekse-periode waar een datum bij hoort, dus gelukt is.

 

Kunnen we een stapje verder gaan?

 

Kan er ook worden vastgesteld van WELK jaar de periode is? Immers, zaterdag 1 januari 2005 valt in periode 13 van het jaar 2004.

 

Dus simpelweg [Year( Datum )] zal niet gaan lukken ... :?:

 

 

Edited by Guest
  • 0
Posted (edited)

OK, die bleek niet zo moeilijk te vinden. Als het periode 13 is, en de datum zit in januari, neem dan het vorige jaar, anders het huidige jaar:

 

If( (Periodenummer = 13) and (Month(Datum) = 1) ; 
 Year(Datum) - 1 ; 
 Year(Datum) 
)

 

Uh, dat levert dan hooguit weer een probleem op bij maandag 29 december 2003, die in periode 1 van jaar 2004 valt. Omdat de periode niet 13 is (maar periode 1), nam deze datum jaar 2003 (en had 2004 moeten geven).

 

Dus, als de periode 1 is, en de datum zit in december, neem dan het volgende jaar, anders het huidige jaar:

 

Case( 
 (Datum Periode nummer Correctie = 13) and (Month(Datum) = 1) ; 
     Year(Datum) - 1 ; 

 (Datum Periode nummer Correctie = 1) and (Month(Datum) = 12) ; 
     Year(Datum) + 1 ; 

 Year(Datum) 
)

 

Volgende stapje? Wie gaat er mee?

 

Wat is de startdatum van een bepaalde periode die wordt gegeven met de twee getalvelden [Periodenummer] en [Periodejaar] ?

 

 

-------------------------

Edited by Guest
  • 0
Posted

Dat is dan toch de 1 + (4 * (<> -1))-ste maandag van <>? Waarbij nog wel even iets bedacht moet worden voor die laatste periode die dus 5 weken kan hebben. Over een uur ben ik thuis, dan hobbel ik graag even met je mee :)

  • 0
Posted
Dat is dan toch de 1 + (4 * (<> -1))-ste maandag van <>? Waarbij nog wel even iets bedacht moet worden voor die laatste periode die dus 5 weken kan hebben. Over een uur ben ik thuis, dan hobbel ik graag even met je mee :)

 

Trouwens, voor het geval dat periode 13 5 weken heeft hoeft niet eens iets bedacht te worden. Het is weliswaar mogelijk dat een bepaalde datum in een ander jaar ligt dan het jaar waar de betreffende periode bij hoort, maar dat geldt uiteraard NOOIT voor de begindatum. De begindatum van een periode ligt per definitie in hetzelfde jaar als de bijbehorende periode. Periode 1 begint dus op de 1e maandag van het jaar en iedere volgende periode 4 maandagen later :idea: Ook dit stapje zou dus niet zo moeilijk hoeven zijn....

  • 0
Posted
Periode 1 begint dus op de 1e maandag van het jaar

 

Nou, nee, dat hoeft niet.

 

Periode 1 begint tegelijk met fiscale week 1.

 

Fiscale week 1 van het jaar 2004 begint bijvoorbeeld op maandag 29 december 2003.

 

Dus periode 1 van jaar 2004 begint op maandag 29 december 2003.

 

Ik ben nog op zoek naar de beschrijving van die fiscale week 1 die op maandag begint. Er was iets met als 1 januari voor of na een donderdag viel of zo ... :?:

 

 

  • 0
Posted
Ik ben nog op zoek naar de beschrijving van die fiscale week 1 die op maandag begint. Er was iets met als 1 januari voor of na een donderdag viel of zo ... :?:

WeekofYearFiscal ():

Given a date, this function returns a number between 1 and 53 representing the week containing the date, figured according to the day used in the starting day parameter.

 

The second parameter indicates which day is considered the first day of the week.

 

The first week of the year is the first week that contains four or more days of that year. For example, if you select 1 (Sunday) as the starting day, then January 1 must fall on Sunday, Monday, Tuesday, or Wednesday for that week to be the first week of the fiscal year. If you select 2 (Monday) as the starting day, then January 1 must fall on Monday, Tuesday, Wednesday, or Thursday for that week to be the first week of the fiscal year.

  • 0
Posted

Oh jee: dit komt toch niet uit de online-help van FileMaker, hè? :lol:

 

Wat mij er aan doet denken: die is bij mij uitgevallen op OS X. Als ik die oproep, dan verschijnt er helemaal niks. Maar daar start ik over een tijdje wel een ander draadje over ...

  • 0
Posted

Misschien een techniekje die ook wel werkt zonder echt calculaties te gebruiken en bovendien erg snel is. Maak een bestand met alle datums in (je kan bijvoorbeeld de datums van de komende 10 jaar stockeren). Voorzie een veldje waarin je bijhoudt in welke periode een datum zich bevindt: gestockeerd (geen calculatie).

 

Om die data te vullen kun je uiteraart een scriptje gebruiken die loopt met een ingewikkelde calculatie, maar ge kunt ook met een tellerke werken. (Als ik dag 7 ben, begin opnieuw, enz...). Voordeel is dat je zo nog gestockeerde waarden kan opslaan in velden: tot welk kwartaal van mijn boekhouding behoort die datum, ...

 

Deze techniek is erg handig, als je bijvoorbeeld ook de lege gaten in een agenda of rapport wil zien.

 

Koen

  • 0
Posted

1. Oh jee: dit komt toch niet uit de online-help van FileMaker, hè? :lol:

 

2. Wat mij er aan doet denken: die is bij mij uitgevallen op OS X. Als ik die oproep, dan verschijnt er helemaal niks. Maar daar start ik over een tijdje wel een ander draadje over ...

 

1. Yep :lol::P:lol::wink:

 

2. no excuse :wink:

 

En wat Koen oppert is een gangbare toepassing op databasegebied....

..niet zozeer in FM vóór de 7, met het gemis aan tabellen.

Vooral met de 'bijkomende info' die je erin kwijtkunt is dat een vrij handige oplossing/toepassing....

  • 0
Posted
En wat Koen oppert is een gangbare toepassing op databasegebied....

 

En het is ook een bijzonder handige oplossing. Helaas niet voor de situatie waar ik het nu voor nodig heb. Maar het is fijn om alternatieven te hebben.

 

Ik zou het nu toch liever met een calculatie doen ... !

 

Ik ben gebleven bij: gegeven de getalvelden [Periodenummer] en [Periodejaar] wil ik de begindatum en de einddatum van de genoteerde periode berekenen ...

 

 

  • 0
Posted

Sanne,

 

Ik zal proberen je nog een stapje verder te helpen.

 

Bepaal eerst de eerste maandag van het periodejaar

 

[Eerste_maandag]
Date(1;1;Basisjaar)-(DayofWeek(Date(1;1;Basisjaar))-2)

 

vervolgens kun je het begin van een periode berekenen door:

 

Eerste_maandag + ((Periodenr-1)*28) 

 

Nu alleen nog de einddatum en je bent er. Dit moet niet zo moeilijk zijn muv je speciale periode van 5 weken. (+28 of +35 dagen afhankelijk van je periode)

 

Wouter

  • 0
Posted
Bepaal eerst de eerste maandag van het periodejaar:

Date(1;1;Basisjaar)-(DayofWeek(Date(1;1;Basisjaar))-2)

 

Die klopt *bijna*.

 

Maar voor het jaar 2005 geeft deze formule als eerste maandag 27 december 2004.

 

Week 1 van het jaar 2005 begint echter op maandag 3 januari 2005 ...

 

Dit kan opgelost worden door te kijken in welk weeknummer 1 januari van het jaar valt. Als het weeknummer 53 is, dan moet week 1 dus 7 dagen later beginnen:

 

Veld: [Maandag_Week1] = 

If(

WeekofYearFiscal( Date( 1 ; 1 ; Periode jaar ) ; 2) = 53 ; 

 Date(1;1;Periodejaar)-(DayofWeek(Date(1;1;Periodejaar))-2) + 7 ; 
 Date(1;1;Periodejaar)-(DayofWeek(Date(1;1;Periodejaar))-2)

)

 

Nu hebben we dus de maandag waarop week 1 van het gegeven jaar begint.

 

Dan is het vinden van de startdatum van de gegeven periode geen moeite: dat is immers de maandag waarop week 1 van het gegeven jaar begint + de gegeven periode x 28 dagen:

 

Veld [Periode_Startdatum] = 

Maandag_Week1 + ((Periodenummer - 1) * 28)

 

Volgende stapje: wat is dan de einddatum van die periode?

 

Die is te vinden door te kijken naar de datum die 4 weken verder dan de startdatum ligt. Is dat namelijk week 53, dan betreft het hier een periode die 5 weken heeft.

Ligt die datum niet in week 53, dan heeft de periode gewoon 4 weken en ligt de einddatum dus op startdatum + 27 dagen.

 

veld [Periode_Einddatum] = 

If( 

(WeekofYearFiscal(Periode_Startdatum + 28; 2) ) = 53 ; 

 Periode_Startdatum + 27 + 7 ; 
 Periode_Startdatum + 27

)

 

Pff: we hebben alles rond!

Van een gegeven datum kan berekend worden in welke periode in welk jaar de datum valt.

En van een gegeven periodenummer en jaartal kan zowel startdatum als einddatum berekend worden.

 

Nou, als klap op de vuurpijl: hoe ziet dit er in FileMaker Pro 7 uit? Wie doet er mee? :)

 

 

  • 0
Posted

De berekening voor het veld met de start van de periode kan bijvoorbeeld zo:

Let ( 
[
JaarStart = Date( 1 ; 1 ; Jaar ) ;
Maandag1 = JaarStart - ( DayofWeek ( JaarStart ) - 2 ) + If ( WeekofYearFiscal ( JaarStart ; 2) = 53 ; 7 ; 0 )
] ;
Maandag1 + ( ( Periode - 1 ) * 28 )
)

 

waarbij Periode en Jaar of andere velden zijn (bij een gewoon calculatieveld) of parameters (bij een custum function)

 

rmw

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...