summera antal via if-statements

Tråden skapades och har fått 2 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Boden
  • 2007-12-10 10:45

Använder ett category (textfält) som kryssrutor med värden som A1, A2, A3, A4.

Sätter upp en beräkning:

Är det A1 = if (category "A1";1;0)
Antal A2 = if (category "A2";1;0)
.
.
.

Problemet:
Antal A1 blir noll om både A1 och A2 är förkryssade.
Hur löser jag detta?
Jag vill att Antal A1 skall bli en etta även om både A1 och A2 är ikryssade.
även att Antal A2 skall bli en etta även om både A1 och A2 är ikryssade.

Sedan summerar jag antal A1 i de poster jag har.


Jag har även en visning av category som en lista på samma sida, där det kommer upp A1 om denna är förkryssad.

Jibe

Ok, ett par saker kan vara lite tokiga i detta. För det första så rimmar det illa att använda textfält i beräkningar, FM 7, 8, 8.5, 9 är mycket noggrannare (petigare) med datatyper än tidigare versioner, så det är nog att skaffa sig lite problem att blanda datatyper. Jag säger alltså inte att du gör det, men det är något att vara uppmärksam på. (Det kan vara så lätt som att om du jämför ett textvärde ("A1") med ett fält som är numeriskt som råkar innehålla "A1" eller vice versa så kommer inte FM att fatta det.

Sedan är din beskrivning lite förvirrande för mig i alla fall, jag förstår tex inte hur många textfält du har, om beräkningsfältet med if-satserna är ett fält eller flera och huruvida det innehåller alla siffror och framför allt vad det är du vill åstadkomma med detta. Om du summerar saker så bör du ha ett eller flera statistikfält vilket du inte nämner att du har. Försöker du summera saker i flera poster eller i en post? En liten bakgrundsförklaring kanske vore bra.

Nåväl, allt detta är lätt förklarat, jag har på min gamla FileMaker-site ett exempel på just hur man summerar saker med hjälp av relationer istället. Exemplet heter "Antal Ja och Nej i en enkät" och handlar just om hur man kan summera hur många "Ja"-svar man fått på en enkät och hur många "Nej"-svar man har fått. Exemplet är gjort för FM 6, men det är bara att konvertera till FM (nyare versioner) så kommer det att fungera.

http://kurser.intelligentmammals.se:16080/fm/tips/dbs/index.html

Sedan antar jag även att du skrivit av din If-sats ur minnet lite fel, så här skall den se ut:

Beräkningsfältet "Antal A2" skall ha följande beräkning:

if (category="A2";1;0)

...och beräkningsresultat skall vara numeriskt, och tag bort krysset för "beräkna inte om alla fält är tomma" nere till vänster, vilket är default.

Är det inte numeriskt beräkningsresultat så kan du inte summera det hela, datatypen är alltså fel.

Men det verkliga felet är nog att du har ett fält "category" och på det har du en värdelista med värdena "A1", "A2", "A3" osv.

När du kryssar för både A1 och A2 så kommer fältet faktiskt att innehålla detta:

A1
A2

...dvs två värden med radbrytningar emellan. Därför kommer din if-sats att fallera, för du jämför ju å ena sidan värdet:

A1
A2

med andra sidan:

A1

Alltså fungerar det inte.

Istället skall du använda dig av funktionen "Patterncount" som är till just för detta, den räknar antalet förekomster av ett visst ord, fras eller liknande inuti ett fält oberoende av allt annat som står i samma fält. Med den kan du kolla om fältet innehåller A2 oberoende på om den även innehåller A1, A3, A4 osv.. Så du skall ändra din beräkning "Antal A2" till att se ut så här:

If ( PatternCount ( category ; "A2" ) > 0; 1 ; 0 )

Så frasen "Patterncount(text; söktext)>0 ersätter alltså ordet "villkor" i en if-sats, ugefär så här alltså:

If ( PatternCount ( text ; söktext ) ; resultat1 ; resultat2 )

Lycka till!

/Ola

  • Medlem
  • Boden
  • 2007-12-11 15:02

Det var det jag var på jakt efter, tack så mycket igen för dina uttömmande svar.
Detta löste hela problematiken, och jag förstår nu hur jag har tänkt fel. Jag har FM6 än så länge.

TACK IGEN

Jibe

1
Bevaka tråden