Jump to content
  • 0

optellen van waarden als...


Djavo

Question

goedemiddag allen, dit is mijn 1e dag op dit forum, en heb gelijk een vraagje.

 

ik heb een invoerlijst met allerlei verschillende personen

ieder van die personen heeft een aantal "dagstaten"waarin staat hoe vaak iemand die dag een bepaalde handeling heeft verricht.

 

nu wil ik het algehele totaal van die bepaalde handeling van een bepaald persoon laten zien op elk van die dagstaten als de naam van die bepaalde persoon is geselecteerd in de invoerlijst.

 

ik heb zelf een tijdje zitten klieren, maar ik kreeg het niet voor elkaar. wat is volgens jullie een goeie manier om dit op te lossen?

 

Groeten,

Djavo

Link to comment

8 answers to this question

Recommended Posts

  • 0
Je voorziet toch best een tabel personen en een tabel taken bvb.

 

Precies! En ik zou zeggen: op z'n minst! Want wat je wil doen is complexer dan het lijkt.

 

In feite heb je 4 tabellen nodig: 'Personen', 'Taken', 'Dagstaten' en 'DagstaatTaken'. In bijlage vind je een eenvoudig voorbeeld. Ik heb jou naam en die van Rony misbruikt om een boekhouding te maken van enkele huishoudelijke taken!

 

De relaties zijn als volgt:

- 1 persoon, meerdere dagstaten

- 1 dagstaat, meerdere taken

- 1 taak, meerdere dagstaten

 

Om de veel-veel relatie tussen Dagstaten en Taken te kunnen bouwen, moeten we de tussentabel DagstaatTaken maken. Deze doet bij wijze van spreken de kruising tussen Dagstaten en Taken: voor elke taak per dagstaat bestaat hier een aparte record. Omgekeerd bekeken bestaat voor elke dagstaat waar een bepalde taak op voorkomt een aparte record. In deze tabel wordt ook het aantal bijgehouden van een bepaalde taak op een dagstaat.

 

Om nu een totaal te berekenen voor een gegeven persoon en een gegeven taak, ligt het ietwat complex. In feite moeten we filteren in de tabel dagstaattaken op taak en persoon. Als we vertrekken vanuit de tabel dagstaten hebben we een probleem. We kunnen namelijk wel filteren op taak (TaakID in het voorbeeld) in de tabel DagstaatTaken maar in deze tabel komt geen persoonsID voor. De persoon is hier immers onrechtstreeks gelinkt, nl. via de tussenschakel van de dagtaken.

 

Om te kunnen filteren vanuit dagstaten moeten we eigenlijk een soort van bruggetje bouwen. We filteren vanuit Dagstaten op Dagstaten zelf door gFilterPersoon te linken aan de PersoonsID. Op deze wijze selecteren we alle dagstaten van een bepaalde persoon. In het voorbeeld gebruik ik een globaal filterveld gPersoonsID, maar we kunnen evengoed het veld fkPersoonsID gebruiken dat aanwezig is. Een keer we alle dagstaten van een persoon geselecteerd hebben, selecteren we een schakel verder de gerelateerde taken in de tabel DagstaatTaken. Maar we selecteren niet alle taken, maar enkel deze die we opgeven in het veld gFilterTaakID van Dagstaten.

 

Het berekend veld cTotaalPersoonTaak sommeert nu het aantal van taken in de gefilterde relatie.

 

Samenvattend komt het erop neer dat we de filter alleen maar kunnen inbouwen als we een relationele ketting maken van 2 table occurrences diep, waarbij in elke schakel een filter zit.

 

Hopelijk helpt dit je een beetje,

 

 

 

- Jeroen

Taken.fp7

Edited by Guest
Link to comment
  • 0

Djavo, mijn fout. Ik had niet gezien dat deze draad betrekking had op FM6.

 

Om het goed te maken heb ik het voorbeeld in FM5 nagebouwd, zie bijlage. Omdat je voor 7 nog niet met zgn. multi-predicate relaties kunt werken, hebben we wel een hulp calc nodig, en oogt het wat ingewikkelder.

 

In het nieuwe voorbeeld komt het erop neer dat we in de tabel Dagstaten 2 filtervelden inbouwen om op persoon (gFilterPersoon) en op taak (gFilterTaak) te filteren.

 

We maken een calc die per dagstaat het aantal van de in gFilterTaak opgegeven taak gaat optellen. Daarvoor hebben we in 'FM6-stijl' een samengestelde calc key nodig die dagstaatID en gFilterTaakID samenvoegt in het bestand Dagstaten en een calc key aan de andere zijde van de relatie in DagstaatTaken die fkDagstaatID en fkTaakID samenvoegt.

 

We bouwen vervolgens een selfjoin (relatie naar zichzelf) in Dagstaten van gFilterPersoon naar fkPersoon. Het is op basis van deze relatie dat we de gefilterde totalen (totaal taak per dagstaat) gaan optellen. We hebben dan het totaal per persoon van de totalen van de opgegeven taak per dagstaat, om het even raar te zeggen.

 

Veel geluk ermee,

 

 

- Jeroen

Taken.zip

Link to comment

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...