2014

Apr

30

Av Rolf

FileMaker sparar normalt beräkningsresultat för att det ska kunna indexeras och inte behöva räknas om vid varje tillfälle det används. Ett beräkningsresultat räknas bara om i de fall något fält i beräkningen ändrar innehåll. Ibland är det inte tillräckligt!

FileMaker försöker vara smart och inte göra fler beräkningar än nödvändigt. Ett beräkningsfält beräknas egentligen bara när något av fälten i formeln ändras. På så sätt kan FileMaker ”spara” beräkningsresultatet och lägga in resultatet i indexet för fältet. Det betyder att när du söker i fältet kommer det att gå snabbt att hitta det du söker.

Använder du något värde som hämtas med en Get-funktion, t.ex. Get (AktuelltDatum), behöver beräkningen uppdateras varje gång den används. Det är en inställning som du gör för fältet. I dialogrutan för Definiera fält (där du skriver beräkningsformeln) klickar du på knappen Tillval för index och markerar kryssrutan ”Lagra inte beräkningsresultatet — utför ny beräkning när det behövs”.

Ber_tillval

 

Nackdelen är att fältet inte indexeras, dvs. det kommer att gå långsamt att söka i fältet, FileMaker behöver i princip gå genom alla poster i databasen och utföra beräkningen.

Men hur gör man då om man vill söka i t.ex. icke-indexerade datumfält? Antag t.ex. att det finns en massa poster i en tabell, varje post har ett datum och du behöver söka fram alla poster vars datum är närmare än 30 dagar från dagens datum (eller datumet har passerats). Det första sättet som du antagligen kommer att tänka på är att göra ett beräkningsfält med formeln:

Datum - Get (AktuelltDatum)

Du kan sedan söka alla poster som har värdet 30 eller mindre i fältet. För att det ska beräknas med aktuellt datum måste det dock ställas in att inte lagras, det blir då som sagt en icke-indexerad och långsam sökning.

Du kan istället göra ett beräkningsfält som subtraherar 30 från postens datumfält:

Datum - 30

Det blir ett indexerat fält som innehåller ett datum 30 dagar tidigare än postens datum., Du kan nu söka efter alla poster där beräkningsfältet med formeln ”Datum-30” är mindre än dagens datum och kommer att hitta exakt samma poster, fast med en indexerad och snabb sökning.

För att söka alla som är mindre än dagens datum söker du efter ”<//” i sökläget (// byts automatiskt ut mot dagens datum).

Skriv en kommentar

Din epost-adress stannar hos oss.