If beräkning, -har jag tänkt rätt?

Tråden skapades och har fått 11 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Stockholm
  • 2008-11-10 11:55

Hej,
Är denna If beräkning rätt?
Alltså:
Är kunden HS, så skall en beräkning göras på "Sidorna" enligt formlen, annars är det bara "Sidorna" som skall visas, utan beräkning, vid något att kundnr....

..hmmm lite krystat med bilden så kanske det förstås...

Har jag gjort rätt?

Mvh
Magnus

Jepp, ser rätt ut.

Om du nu alltså skall beräkna sidor på ett visst sätt för kunden HS och för alla andra kunder skall du bara ha vad som nu står i fältet sidor.

I alla fall så returneras en siffra.

Kan förtydliga hur en if-sats fungerar:

If ( villkor ; villkoret är sant ; villkoret är falskt )

Exempel:

if ( 1=1; "sant" ; "falskt) => "sant"

if ( 1=2; "sant" ; "falskt) => "falskt"

Symbolen => betyder "ger" eller "returnerar" och har inget med FileMaker att göra.

Senast redigerat 2008-11-10 13:11
  • Medlem
  • Stockholm
  • 2008-11-10 13:10

Hej Taz_1999,
Jag tackar och bockar för din hjälp!
Tack för ditt exempel oxå.

Mvh
Magnus

  • Medlem
  • Stockholm
  • 2008-11-10 15:03

Hej igen Taz_1999,
Nu fick jag reda på att ytterligare företag skall läggas in med sina egna beräkningar.
Då kanske man skall göra annorlunda, -att man på deras kundkort lägger upp varje företags specifika data....det är kanske en början....det blev plötsligt lite mer komplicerat

Mvh
Magnus

Nja, det finns flera lösningar, du kan ha en värdelista på kundkortet, som anger ett par olika beräkningar som kunden kan välja mellan.

(Jo förresten, om ni i er affärsprocess tillåter tokigheter som att varenda kund skall ha en unik kalkyl och andra specialvillkor, undantag från dessa och mera specialvillkor ovanpå det, så kan ni slänga bort alla databaser och börja om med färgkritor och kartoteks-kort, ni blir precis lika effektiva.)

Eller så kan du förlänga din ifsats något, dvs göra om den till en sk case-sats.

Case (
villkor ; villkoret är sant ;
villkor ; villkoret är sant ;
villkor ; villkoret är sant ;
villkor ; villkoret är sant ;
villkor ; villkoret är sant ;
returvärde )

Exempel, säg att de tre kunder som skall ha detta heter HS, AB och CC

Case (
Kundnummer="HS" ; (410/2*,37/15,5)*(Sidor) ;
Kundnummer="AB" ; (410/2*,37/15,5)*(Sidor) ;
Kundnummer="CC" ; (410/2*,37/15,5)*(Sidor) ;
Sidor)

Det betyder att om villkoret inte uppfylls på första raden, går FileMaker vidare till nästa och nästa, och om det inte finns flera villkor, så returnerar FileMaker vad som nu står som sista grej, returvärdet. Så fort FileMaker dock har hittat ett villkor som uppfylls, så slutar FileMaker att utvärdera villkoren, vilket ju är bra.

Så länge antalet kunder som skall ha specialkalkyler är litet så kan du ju bygga det hela på det här viset.

Alternativ kan du på kundkortet införa någon (eller flera) av tre olika saker:

A. En värdelista med kryssryta Ja/Nej vilket betyder att denna kund skall ha specialformeln. Specialkalkyl kan vi kalla det fältet.

B. En värdelista med fyra-fem olika värden som alla representerar olika kalkyler, tex 1=Den du har, 2=en variant med 0,3 istället för 0,37 osv... Kalkylmetod kan vi kalla det fältet.

C. Ett fält som endast innehåller siffran ifråga, 0.33, 0.35, 0.37 osv osv. Kalkylvärde kan vi kalla det fältet. Är det tomt kör man med den vanliga kalkylen.

Så här kan A realiseras:

If(Kunder::Specialkalkyl="Ja"; (410/2*,37/15,5)*(Sidor) ; Sidor)

Så här kan B realiseras:

Case (
Kunder::Kalkylmetod="1" ; (410/2*,37/15,5)*(Sidor) ;
Kunder::Kalkylmetod="2" ; (410/2*,35/15,5)*(Sidor) ;
Kunder::Kalkylmetod="3" ; (410/2*,33/15,5)*(Sidor) ;
Sidor)

Så här kan C reliseras:

If (
not IsEmpty(Kunder::Kalkylvärde) ; (410/2 * Kunder::Kalkylvärde /15,5)*(Sidor) ;
Sidor)

Jo, not betyder inte och IsEmpty tittar om ett fält är tomt. Så tillsammans blir dessa "Inte tomt".

Lycka till.

  • Medlem
  • Stockholm
  • 2008-11-10 19:16

Hej Taz_1999,
Tack för alla förslag!
Jag tog en funderare, och ibland skall man inte försvåra saker, man vill så mycket ibland, så min lösning blev, att jag på varje kund lägger jag in formlens värde (enkelt förklarat) som sedan multipliceras mot sitt värde.

Jag skall ändå titta lite djupare på dina förslag...

Mvh
Magnus

Ursprungligen av agnwik:

Hej Taz_1999,
Tack för alla förslag!
Jag tog en funderare, och ibland skall man inte försvåra saker, man vill så mycket ibland, så min lösning blev, att jag på varje kund lägger jag in formlens värde (enkelt förklarat) som sedan multipliceras mot sitt värde.

Kul att det uppskattades.

Du kan slå upp i hjälpen en funktion som heter Evaluate, det betyder att Filemaker kan använda en formel som står i ett fält, i en beräkning.

Står det 4+4 i ett fält som heter Kalkyleringsformel så kommer ett beräkningsfält som innehåller beräkningen "Evaluate(Kalkyleringsformel) att returnera 8. Det är ganska så coolt.

  • Medlem
  • Stockholm
  • 2008-11-10 19:23

Summera rader i en portal, till en totalsumma, samt nedräkning

Hej,
Hur summerar man ner i en portal till en totalsumma, per kund och månad, samt att alla kunders summa skall "räknas" ner till 2500.

Alltså, varje månad så får man inte överskrida summan 2500, av alla kunders totalsumma i varje portal, tillsammans.

Alla tips önskvärda.

Mvh
Magnus

Ursprungligen av agnwik:

Hej,
Hur summerar man ner i en portal till en totalsumma, per kund och månad, samt att alla kunders summa skall "räknas" ner till 2500.

Alltså, varje månad så får man inte överskrida summan 2500, av alla kunders totalsumma i varje portal, tillsammans.

Portalen bygger på en relation, säg att den heter Kalkyler_Kunder och det är en relation mellan tex tabellen Kalkyler och tabellen Kunder som gör att vissa poster som skall vara med visas i portalen.

Om du skapar fält i Kalkyler som har sådana här beräkningar:

Sum(Kalkyler_Kunder:Sidor), så får du en summa av alla siffror som står i fältet Sidor som syns via relationen Kalkyler_Kunder.

Upprepa detta för andra fält: Halvsida, Helsida, Stripar, Cover, så ser det ut så här:

Sum(Kalkyler_Kunder:Sidor) + Sum(Kalkyler_Kunder:Halvsida) + Sum(Kalkyler_Kunder: Helsida) osv...

Vill du sedan koppla ett villkor till detta, så är vi inne på en if-sats igen:

If(
Sum(Kalkyler_Kunder:Sidor) + Sum(Kalkyler_Kunder:Halvsida) + Sum(Kalkyler_Kunder: Helsida) ≥ 2500; 2500;
Sum(Kalkyler_Kunder:Sidor) + Sum(Kalkyler_Kunder:Halvsida) + Sum(Kalkyler_Kunder: Helsida) ≥ 2500 )

Fetstil: Vad som returneras om summan är lika med eller över 2500, dvs 2500.
Understruket: Vad som beräknas och returneras om summan är under 2500.

  • Medlem
  • Stockholm
  • 2008-11-10 21:00

Hej Taz_1999,
Vad skulle detta forum vara utan dig, -tråkigt helt klart!
Tack vare dig, med din support och ideer på lösningar jobbar man vidare med
FileMaker!

Jag förstår ditt svar och skall ta tag i detta imorgon morgon, när hjärnan är utvilad!

Tack!

Mvh
Magnus

  • Medlem
  • Stockholm
  • 2008-11-11 13:13

Hej Taz_1999,
Jag förstår inte riktigt vart jag skall skriva in fältet Kalkyler eller Kalkyler_Kunder, i Kundregistret eller i Rapport kund? Lägger in några skärmdumpar på hur det ser hur.

Tack!
Mvh
Magnus

Beror på vad fältet skall göra? Om det innehåller funktionen "Sum", så skall du tänka så här:

Layouten med portalen, den visar poster från en viss tabellförekomst i relationsdiagrammet, det är alltså den jag "står" i.

Den layouten visar poster i en portal, denna är baserad på en relation mellan den tabellförekomst i relationsdiagrammet jag står i och de linjer som går ut från den. Det är dessa andra tabeller som linjerna visar att jag är relaterad till och det är de posterna jag kan "se".

Vilket i sin tur betyder, att om jag skall summera poster via en relation, så måste fälten skapas i den tabellförekomst som det går streck ifrån bort till en annan tabell. Eller kortare uttryckt, du skall skapa fälten i den tabell du står i (samma som layouten visar poster ifrån).

Förstod du det där?

1
Bevaka tråden