Jag fick en mailfråga om hur man skapar filterfrågor på ett bra sätt när det riskerar att bli komplicerat.
Ett filter som bara tar med objekt med värde större än 34 (”varde” > 34) och mindre än 85 ( AND ”varde” < 85) är ganska enkelt, men hur gör man om man däremellan dessutom har en större mängd tal som också skall exkluderas?
Det enkla är att bara fortsätta med att ta bort värden som är 46 (AND ”varde” != 46) eller 75 (AND ”varde” != 75).
"varde" != 46 AND "varde" != 75
Blanda bara inte ihop AND och OR…
Risken kan vara att det kan bli lite svårt att överblicka, om det är många tal och man kanske vill redigera dessa exkluderade tal på ett smidigt sätt.
Då kan man använda funktionen IN eller NOT IN.
"varde" NOT IN (46, 75)
Det är helt enkelt en kontroll om värdet finns i den lista som är definierad innanför parentesen. Det går att lägga till hur många kommaseparerade värden man vill i listan och om det inte är tal så går det även bra med en lista med text. Fast då skall man så klart definiera textsträngarna med enkla citationstecken (som vanligt).
Sååå, om jag bara vill visa vägar från Lantmäteriets öppna data av vissa typer så kan jag skapa ett filter som:
Det blir ett väldigt kraftfullt verktyg i specifika situationer, som med den vanliga boolska algebran och LIKE ger en ganska komplett verktygslåda.
Men åter till det tidigare exemplet. Jag tar textlagret från LM öppna data och utgår från attributet KKOD, men du kan själv omsätta det till vad du vill.
I mitt exempel så vill jag bara visa värden mellan 5 och 90, men inte 7, 9, 13, 15, 43, 47, 75, 78 eller 79. Med upprepade AND så ser det ut såhär:
Ganska tydligt om man använder radbryt kan man tycka, men jämför med nedanstående där NOT IN används för att uppnå samma resultat.
Du kan själv välja hur du gör dina urval, men jag tenderar att välja det där jag behöver skriva så lite som möjligt.