Ga naar inhoud
  • 0

Tellen van waarde tussen grenzen in een herhalend veld


Bachje

Vraag

Dat was een lange title maar ik hoop dat het daarmee duidelijk is.

 

ik heb in onze school database een aantal herhalende velden met cijfers. Dus een vak waarvoor ze meerdere beoordelingen krijgen waar later een gemiddele berekend wordt. tot zover geen probleem

Ecter voor elke student komt dit weld meerdere keren voor voor verschillende opdrachten. lk opdracht is een eigen kaart gelinkt aan de studenten kaart waar de totalen verschijnen.

Nu moet ik weten hoe vaak 1 student op voor de verschillende opdrachten een cijfer tussen de 4 en 6 heeft gehad.Ik heb gestoeit met if , geneste if, if else,

case, count en combinaties daarvan maar ik krijg het niet kloppend. asl ik habndmatig tel kom ik consequnt op hogere waarden dan de berkening weergeeft. ik vermoed dat het in de herhaling zit.

 

wie kan mij een goede formule geven. Ik snap dat ik eerst een veld moet maken waarin ik controleer op de waarde (dat heb ik met de if functie geprobeerd: If ( vaknaam ≥ 4,1 ; If ( vaknaam < 6 ; 1 ; 0 ) ;0 ) - of zou ik hier voor elke herhaling die formule opnieuw moeten geven?, ik hoop het niet, het zijn veel herhaling - en vervolgens heb ik een resume veld die telt hoe vaak de if reeks de waarde 1 geeft. Die staat op totaal van alle herhalingen tegelijk (op lopend totaal zette of andere opties levert niets op.

ik heb soortgelijke formule met Case gemaakt maar die leverde ook niets op. Ik heb naar de list-functie gekeken maar kon niet ontdekken hoe dat voor mij kon werken

Ik doe vast iets heel simpels fout, maar ik zie het niet.

 

alvast bedankt voor het meedenken

 

Franc

Link naar reactie

6 antwoorden op deze vraag

Aanbevolen berichten

  • 0

Ik weet niet of ik precies snap waar je heen wilt, maar als je een berekeningsveld maakt met tien herhalingen (of zoveel als je gebruikt) met daarin

 

 CheckWaarde [berekening, resultaat: getal, tien herhalingen ] = HerhalendVeld ≥ 4 and HerhalendVeld ≤ 6

 

krijg je een boolean resultaat (0 of 1)

dan een tweede berekeningsveld

 

Resultaat [berekening, getal resultaat]  = sum ( CheckWaarde )

geeft je het totaal van de herhalingen waarin het cijfer tussen 4 en 6 lag

 

werken met herhalende velden wordt vaak beschouwd als minder verkieslijk, omdat je gauw in allerlei rapportageproblemen raakt. beter is het om het relationeel op te lossen.

 

PS: het kan ook met 1 veld:

 

Let 
(
[
lijst = List ( HerhalendVeld ) ;
zessen = PatternCount ( lijst ; "6" );
vijven = PatternCount ( lijst ; "5" );
vieren = PatternCount ( lijst ; "4" )
];
zessen + vijven + vieren
)

maar dat is alleen zinnig als het aantal waarden dat voor kan komen tussen 4 en 6 beperkt is, dus bijv. alleen tienden en niet ook honderdsten van een rapportcijfer. want je moet alles uitschrijven in de Let() en wel als PatternCount ( lijst ; "¶6¶" ), PatternCount ( lijst ; "¶5,9¶" ) enz. met ¶ anders krijg je dubbeltellingen. ik denk dat de eerste suggestie met twee velden trouwens wel sneller werkt.

Link naar reactie
  • 0

Beste Kjoe,

 

dank voor je reactie. ik kom hier niet veel verder mee.

 

I

 CheckWaarde [berekening, resultaat: getal, tien herhalingen ] = HerhalendVeld ≥ 4 and HerhalendVeld ≤ 6

 

krijg je een boolean resultaat (0 of 1)

dan een tweede berekeningsveld

 

Resultaat [berekening, getal resultaat]  = sum ( CheckWaarde )

geeft je het totaal van de herhalingen waarin het cijfer tussen 4 en 6 lag

 

ik heb namelijk geen berekening. Het enig wat moet gebeuren is dat er geteld wordt hoe vaak er een beoordeling tussen 4 en 6 heeft plaats gevonden in het herhalende veld op alle records die gelinkt zijn aan die student.

Dus alleen het laaste deel van jet formuile is bruikbaar

Met if kom ik er niet uit om hem in alle herhalingen te laten kijken. Met count lukt het ook niet

 

al verder zoekend na jouw beschrijving kreeg ik ineens een helder moment

 

Een student moet voor een bepaald vak een aantal opdrachten doen. 5 van die opdrachten vormen een record, de volgende 5 nog een record enz.

dus laten we zeggen dat de student zo 12 opdrachten doet. hij heeft dan 60 cijfers gekregen. ik wil nu weten hoe vaak dat cijfer tussen 4 en 6 lag (maar ook hoe vaak het tussen 6 en 7,5 lag en hoe vaak daarboven).

De formuler moet dus op het record tellen. Dan kan ik daarna een optelling doen van alle records van die student.

 

en aangezien het over veel heerhaling, records en vakken gaat (deze truc moet voor 7 vakken gedaan worden) én om tinden achter de komma is de let en list eigenlijk geen optie.

 

Waar het mij om gaat is met welke script functie(s) ik dit zou kunnen doen.

Als ik dit doe krijg ik alleen de eerste waarde uit het veld.

If ( opdrachtveld ≥ 4,1 and opdracht veld < 6 ; 1 ; 0 ) ;0 )

Nu kan ik natuurlijk voor elke herhalende waarde diezelfde stap maken maar dan programeer ik me suf...... :oops:

 

en dan mijn idee, (vast al veel vaker besproken en ontdekt)

If ( herhaalveld  < 4,0 ; 0 ; If ( herhaalveld  < 6,0 ; 1 ; 0 ) )

door eerst waarden uit te sluiten en dan te kijken naar de rest onder een waarde én dat op evenveel herhalingen te zetten werkt het wel.

 

opgelost dus

zijn er nog addertjes onder het gras?

Link naar reactie
  • 0
De formuler moet dus op het record tellen. Dan kan ik daarna een optelling doen van alle records van die student.

Dat was toch wel zo'n beetje wat ik ook in mijn hoofd had. Ik gaf alleen de twee berekeningen voor het record, aannemende dat je zelf wist hoe je verder moest.

Nu kan ik natuurlijk voor elke herhalende waarde diezelfde stap maken maar dan programeer ik me suf......

Valt toch mee, een berekening op een herhalend veld met zelf evenveel herhalingen, doet filemaker voor alle herhalingen. Dus bij tien herhalingen hoef je niet tien keer dezelfde berekening in te voeren. Wel natuurlijk voor elk apart herhalend veld, en voor elke test op interval die je wilt doen. Maar ik neem aan dat je 1 vak per record hebt, dus slechts 1 herhalend veld.

If ( herhaalveld  < 4,0 ; 0 ; If ( herhaalveld  < 6,0 ; 1 ; 0 ) )

geeft hetzelfde resultaat als

HerhalendVeld ≥ 4 and HerhalendVeld < 6

Link naar reactie
  • 0

Het is misschien off-topic maar... waarom herhalende velden? Naar mijn mening zou je hiervoor een nieuw tabel kunnen maken en ben je direct niet afhankelijk van de hoeveelheid records die beschikbaar zijn. Herhalende velden komen uit een periode dat filemaker nog niet relationeel was en toen was het handig. Daarnaast kun je dan veel eenvoudiger via de relatie bepalen hoe de vlag erbij hangt per student.

Link naar reactie
  • 0

De database is van voor het relationele tijdperk.... en door de jaren heen aangepast., vandaar de herhalende velden.

En als dat dan op veel plekken wordt toegepast is het weer een flinke klus om dat er uit te sleutelen.

 

Maar ik ben geïnteresserd, misschien levert het voordeel op....kun je me een voorbereld geven hoe je dat dan denkt op te bouwen?

Op elke kaart van het project staan nu 7 opdrachten met elk 5 detail beoordelingen (dat zijn de herhalende velden). als die allemaal voldoende zijn afgesloten is dat onderdeel voldoende.

elke student moet nu 12 van die opdrachten doen om te mogen afstuderen.

Bedoel je dan dat ik elk van de 7 opdrachten een eigen tabel moet geven? met daarin de 5 detail beoordelingen als 5 velden?

Wat is dan mijn voordeel?

Link naar reactie
  • 0

Even uit de losse pols en op basis van aangereikte gegevens zie ik de volgende tabellen:

 

Student, project, opdracht, opdrachtregels (detail beoordelingen).

 

Leg een relatie tussen een TO van opdracht en opdracht regels en je hebt je herhalende velden niet meer nodig. Deze kun je vervolgens gebruiken in onderstaande situatie:

 

Een TO tussen Student_resultaten en Project_Student en Project_Student en Opdracht_Project en Opdracht_Project en Opdrachtregels_Opdracht. Dit geeft een detail overzicht per student waarbij je de projecten kan tonen, de opdrachten per project en de details per opdracht.

 

Zoals je hierboven ziet hoef je dus geen tabel te maken per opdracht. Alle opdrachten, ongeacht van welke student of van welk project komen allemaal in het tabel opdrachten te staan. De relatie bepaald aan welk project deze gerelateerd is. Kies dus een sleutel dioe uniek is per opdracht en per project. Een volgnr. is in dit geval meestal het meest gebruikelijke. Zo kun je ook nog eens een nummering toepassen op de projecten.

 

Werk altijd in groepen TO's waarbij de layout leidend is. Zo hou je overzicht en raak je niet in de war wanneer je een gerelateerd veld wil plaatsen op een Layout formulier.

 

Hopelijk kun je hier iets mee.

Link naar reactie

Doe mee aan dit gesprek

Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.

Gast
Beantwoord deze vraag...

×   Geplakt als verrijkte tekst.   Plak in plaats daarvan als platte tekst

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...