Jag är rätt ny i FM så detta var bra hjälp. Förstår jag dig rätt, rent generellt i att:
Om jag sorterar en tabell utifrån vissa kriterier så vill en relation alltid returnera den överersta recorden (raden) i tabellen?
Kopplat till ditt exempel så vill:
consumption = reading_value - äldre_registreringar::reading_value
returnera den övre raden i [äldre_registreringar] eftersom vi inte specifserar en specifik record.
Har jag förstått rätt?
Kanske, jag vet inte...
Relationen returnerar alla poster som matchar kriterierna i relationen, i detta fall att _kf_member_id ska vara samma som i den aktuella posten och (som jag föreslog) att _kp_reading_id ska vara mindre än den aktuella postens värde.
Denna relation kommer alltså att returnera alla tidigare registreringar för den aktuella medlemmen.
Sen fungerar FileMakers beräkningsält lite olika beroende på vad det är du försöker räkna med. I detta fall försöker vi att ta värdet i ett fält i en post, och dra ifrån värden i ett fält i en uppsättning poster. Då kommer FileMaker att plocka värdet från den första posten i den uppsättningen, vilken post det nu råkar vara. Genom att sortera posterna i relationen ser vi till att den senaste registreringen hamnar först.
Vilken funktionen har andra relationen du föreslår:
_kp_reading_id > _kp_reading_id
Kan du förklara syftet med den.
Syftet med detta kriterium (inte denna "relation", om man nu ska klyva hår ) är som jag sa ovan att få relationen att bara returnera tidigare registreringar för den aktuella medlemmen (under förutsättning att värdet av _kp_reading_id är någon slags sekvensnummer.)
Relationen mot [äldre_registreringar är ju enbart intressant vi inmatning av en ny registrering eftersom jag då vill räkna ut en differens. Då vill _kp_reading_value alltid vara större än samtliga äldre_registreringar::_kp_reading_id så jag kan inte se att denna har något syfte. Är det något jag inte förstår?
Jag vet inte om jag riktigt hänger med här (skyller på klockan...)
I beräkningsfältet consumption kommer aldrig det beräknade värdet att lagras, utan det kommer att beräknas varje gång man tittar på (eller behöver) värdet. Om du förlitar dej på att den aktuella postens _kp_reading_value alltid är störst (och alltid drar ifrån det näst högsta värdet som finns) så funkar det bra så länge du inte tittar på äldre registreringar... Eller?
Sen vet jag inte vad som skulle kunna hända om det registrerade värdet "slår runt" (från 9999 -> 0000), men sånt kanske aldrig inträffar hos er.
Så, syftet med hela relationsövningen är att hitta den föregående registreringen. Först sorterar vi ut alla tidigare registreringar för medlemmen med de båda kriterierna i relationen, sen ser vi till att de relaterade posterna är sorterade så att den senaste kommer först, och sen utnyttjar vi FileMakers sätt att utföra en beräkning med relaterade poster för att få FileMaker att dra ifrån den senaste registreringen. Och istället för att spara förbrukningsvärdena i databasen beräknas de hela tiden utifrån den förra registreringen (jag inbillar mej att det blir lättare att korrigera fel i registreringar då...)