expressie gezocht voor berekening gemiddeld cijfer over meerdere velden

Status
Niet open voor verdere reacties.

Herb66

Gebruiker
Lid geworden
25 okt 2007
Berichten
8
Beste mensen,

Ik zit met een uitdaging :(. Voor een klantonderzoek heb ik een vragenlijst ingericht waarbij klanten een cijfer kunnen geven op een aantal aspecten [aspect#] in ons onderzoek. Van die aspecten mogen ze 3 kiezen die ze het belangrijkste [belangrijkaspect#] vinden, in de tabel zien we dan een 0 (niet belangrijk) of een 1 (belangrijk). De bedoeling is dat ik een totaal gemiddelde cijfer uitreken, waarbij de drie gekozen belangrijkste aspecten 2x mee tellen.
Echter, het kan ook zijn dat iemand geen cijfer geeft omdat dat aspect niet van toepassing is ("nvt"). Die waarde wordt als "0" weergegeven in de datatabel.
Ik wil in een query op de datatabel een veld toevoegen waarin dus berekend wordt wat het gemiddelde cijfer is van het totaal aantal gegeven cijfers, over de verschillende velden.
Het komt volgens mij ongeveer op het volgende neer:
(([aspect1]*([belangrijkaspect1] +1))+([aspect2]*([belangrijkaspect2] +1))+([aspect3]*([belangrijkaspect3] +1)+([aspect4]*([belangrijkaspect4] +1))/((aantal aspecten >0)+3)

Ik krijg dit niet vertaald naar een goede expressie, een werkende. Ik heb hulp nodig blijkbaar. Wie kan me helpen?
Alvast bedankt.
 
Je goochelt iets teveel met je haakjes die niet goed staan.
Code:
([aspect1]*([belangrijkaspect1] +1))+([aspect2]*([belangrijkaspect2] +1))+([aspect3]*([belangrijkaspect3] +1))+([aspect4]*([belangrijkaspect4] +1))/((aantal aspecten >0)+3)
Of de formule gaat werken, kan ik zonder db uiteraard niet beoordelen.
 
Beste OctaFish,

dank voor je snelle bericht. Het eerste gedeelte werkt inderdaad, mijn uitdaging zit nog vooral in de teller. De optelsom in de noemer moet uiteindelijk gedeeld worden door het aantal cijfers dat groter (of ongelijk) is aan "0". +3, want er zijn 3 cijfers die dubbel meetellen. Dat laatste krijg ik niet goed ingericht.
 
Ik denk dat je hier problemen mee gaat krijgen:
Echter, het kan ook zijn dat iemand geen cijfer geeft omdat dat aspect niet van toepassing is ("nvt"). Die waarde wordt als "0" weergegeven in de datatabel.
Als iemand NVT kiest, dan moet dat resultaat m.i. niet mee worden genomen. Jij vervangt NVT nu door een 0, en dan telt hij dus wél mee. Want hoe weet je anders het onderscheid tussen 0 (0 gekozen) en 0( NVT gekozen)?
 
0 kan niet gekozen worden. NVT wordt ingelezen als 0 in de tabel. Klanten kunnen enkel beoordelen van 1-10 als cijfer. Ik ben dus op zoek naar de expressie waarbij 0 (=NVT) wordt uitgesloten van deelname aan de berekening.
 
Van die aspecten mogen ze 3 kiezen die ze het belangrijkste [belangrijkaspect#] vinden, in de tabel zien we dan een 0 (niet belangrijk) of een 1 (belangrijk).
Waar is de derde variant (NVT) dan? Die vertaal je blijkbaar toch naar een 0. Lijkt mij niet goed. Ofwel je vindt een vraag belangrijk (1) en je geeft een cijfer, ofwel je vindt hem niet belangrijk (0) en geeft een cijfer, ofwel het is niet van toepassen. Maar dan moet je geen 0 opslaan lijkt mij, maar gewoon de tekst NVT. O.i.d. En daar is perfect op te filteren in je query.
 
NVT staat in de kolom waar een cijfer gegeven wordt. wanneer ik dit als tekst laat staan, krijg ik problemen met mijn gekoppelde excel, die wil dan niet meer rekenen met die kolom. Zolang ik weet dat 0 staat voor nvt, kan ik ermee verder voor mijn dashboards.
 
Je spreekt jezelf volgens mij (weer) tegen :). Eerder gaf je volgens mij aan dat NVT in een andere keuzelijst stond. En nu staat hij in het tabel met de waardeoordelen? Dat zou ik dus echt nooit zo doen...
 
je kunt het volgende gebruiken, maar is lastig te onderhouden:

Code:
([aspect1]+2%[aspect1]+1) + ([aspect2]+2%[aspect2]+1)

even uitkijken met haakjes rond de modulo ik weet niet of access dit goed doet of dat je eventueel:

Code:
(([aspect1]+2)%([aspect1]+1))
 
in de gehele code zoiets dan:

Code:
([aspect1]*([belangrijkaspect1] +1))+([aspect2]*([belangrijkaspect2] +1))+([aspect3]*([belangrijkaspect3] +1))+([aspect4]*([belangrijkaspect4] +1))/(([aspect1]+2%[aspect1]+1) + ([aspect2]+2%[aspect2]+1) +([aspect3]+2%[aspect3]+1) + ([aspect4]+2%[aspect4]+1)+3)

maar zoals gezegd moet je mogelijk nog wat haakjes aanpassen of anders even in een aparte kolom testen
 
misschien wat eenvoudiger. Is er een expressie waarmee ik het aantal velden in 1 record kan optellen die aan een voorwaarde voldoen. (in mijn geval >"0")
Dat is volgens mij hetgeen dat ik zoek voor de noemer.
 
als er een eenvoudige oplossing was zou ik niet mijn draak van een voorbeeld komen :p
 
Omdat ik er toch een vraag over kreeg misschien nog even de uitleg:

het % teken staat in de formule voor "modulo" ook wel restwaarde van een deling. Het is een algemeen gegeven dat de restwaarde van een deling van (x+1)/x altijd 1 is, tenzij X=1, want dan is de restwaarde 0. Je kunt die nulwaarde nog 1 naar achter schuiven door de restwaarde van het volgende te gebruiken:

X+2 / (x+1)

Hier komt altijd 1 uit, tenzij X=0. Op deze manier kun je dus elementen van willekeurige grootte "X" tellen en alle elementen krijgen die groter zijn dan 0.
 
@Wampier: jouw voorbeeldje (([aspect1]+2%[aspect1]+1) + ([aspect2]+2%[aspect2]+1)) werkt niet in Access. Misschien wel in Excel, maar dat is dan ook een heel ander programma :).
 
Het is standaard SQL. Mogelijk staan er wat haakjes verkeerd maar elke SQL compliant oplossing hoort het te ondersteunen. nu weet ik echter niet hoe access command line ermee omgaat.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan