Forum QGIS
kalkulator pól kilka warunków - Wersja do druku

+- Forum QGIS (http://forum.quantum-gis.pl)
+-- Dział: Desktop GIS (http://forum.quantum-gis.pl/forum-4.html)
+--- Dział: QGIS (http://forum.quantum-gis.pl/forum-5.html)
+--- Wątek: kalkulator pól kilka warunków (/thread-1156.html)

1 2


kalkulator pól kilka warunków - Magda - 17-12-2014

Witam , mam problem z poprawnym i działającym zapisaniem warunku złożonego
Próbowałam tak:
( "ludn_liczb" <30000 )* 2
(30000< "ludn_liczb" <60000 )* 3
(60000< "ludn_liczb" <90000 )* 4
(90000< "ludn_liczb" <120000 )* 5

i tak:
( "ludn_liczb" <30000 )* 2
( "ludn_liczb" >30000 AND "ludn_liczb" <60000)* 3
itd.
i tak:
CASE WHEN "ludn_liczb" <30000 THEN 2 END
itd.
łącząc wyrażeniem AND , + , nie dając żadnego łącznika. Działa tylko po wpisaniu pierwszego warunku, jak dodam kolejny warunek to nie działa.

Będę wdzięczna za pomoc.


RE: kalkulator pól kilka warunków - martel - 17-12-2014

Też nie udało mi się znaleźć sposobu na połączenie iluś warunków w jeden ciąg wykonywalny, możesz ewentualnie aktualizować to samo pole kilka razy przy użyciu kalkulatora pól dla poszczególnych warunków, wpisywania w sumie tyle samo co jedna długa formuła Wink I tak dla pierwszego przypadku będzie:
CASE WHEN "ludn_liczb" < 30000 THEN "ludn_liczb"*2 END
I potem analogicznie:
CASE WHEN "ludn_liczb" > 30000 AND "ludn_liczb" <60000 THEN "ludn_liczb"*3 END
itd.


RE: kalkulator pól kilka warunków - martel - 17-12-2014

Ok, errata, jednak da się to zrobić jednym wyrażeniem i powinno być ok jak wpiszesz tak:
case when "ludn_liczb" <30000 then "ludn_liczb"*2 when "ludn_liczb" <60000 then "ludn_liczb"*3 when "ludn_liczb" <90000 then "ludn_liczb"*4 (itd. w zależności od liczby przedziałów) end


RE: kalkulator pól kilka warunków - Magda - 18-12-2014

Dziękuję za pomoc, faktycznie spełnia kilka warunków ale coś jest nie tak ponieważ
jako wynik pojawiają się liczby 12, 9 i 4 zamiast 2,3 i 4.

Zachodzi sprzeczność ponieważ liczba np. 10000 spełnia wszystkie warunki tzn. jest zarówno ,30000 jak i <60000 jak i ,90000. Trzeba jakoś zastosować przedziały :
"ludn_liczb" <30000
30000 < "ludn_liczb" <60000
60000 < "ludn_liczb" <90000


RE: kalkulator pól kilka warunków - randyX - 18-12-2014

Witam,

W tym wypadku zadziała wielokrotna kombinacja Wink warto by było pomyśleć o odpowiednim domykaniu przedziałów (np. <= zamiast < itp.) bo przy wartości równej 30000 - wynik będzie zerowy

Kod:
case when "ludn_liczb" <30000 then "ludn_liczb"*2 else
(case when "ludn_liczb" <60000 and "ludn_liczb" > 30000 then "ludn_liczb"*3 else
(case when "ludn_liczb" <90000 and "ludn_liczb" > 60000 then "ludn_liczb"*4 else
(case when "ludn_liczb" > 90000 and "ludn_liczb" < 120000 then "ludn_liczb"*5 end)end)end)end

Pozdrawiam


RE: kalkulator pól kilka warunków - martel - 18-12-2014

"Dziękuję za pomoc, faktycznie spełnia kilka warunków ale coś jest nie tak ponieważ
jako wynik pojawiają się liczby 12, 9 i 4 zamiast 2,3 i 4"
Zachodzi sprzeczność ponieważ liczba np. 10000 spełnia wszystkie warunki tzn. jest zarówno ,30000 jak i <60000 jak i ,90000. Trzeba jakoś zastosować przedziały"

Nie zachodzi sprzeczność, bo warunki się nawzajem wykluczają i powiedzmy przykładowe 10000 spełniając pierwszy warunek nie będzie już brane pod uwagę w drugim jak i każdym kolejnym warunku.

"W tym wypadku zadziała wielokrotna kombinacja Wink warto by było pomyśleć o odpowiednim domykaniu przedziałów (np. <= zamiast < itp.) bo przy wartości równej 30000 - wynik będzie zerowy"

Nie będzie zerowy, gdyż wtedy 30000 łapie się do drugiego przedziału, zamiana < na <= spowoduje tylko, iż wtedy 30000 będzie jeszcze w pierwszym przedziale zamiast w drugim. Jedyne co nie może być, to dwa domknięcia ze znakiem równości, czyli np. <=30000 i w następnym >=30000.


RE: kalkulator pól kilka warunków - randyX - 18-12-2014

Niestety - dwa domknięcia spowodują error.

W tej sytuacji nie może coś przynależeć jednocześnie do dwóch przedziałów- musi przynależeć albo do pierwszego albo do drugiego:

1 - ludn<= 30000 , 2 - 60000>= ludn > 30000 (oczywiście czy to ma być do 1 czy do 2 przedziału łatwo zamienić)

Dlatego też jedynie jednostronne znaki wieksze/mniejsze bądź równe wchodzą w grę.


RE: kalkulator pól kilka warunków - martel - 18-12-2014

No oczywiście, że jak jedna wartość będzie należeć do dwóch zbiorów bądź do żadnego, to będzie błąd, to chyba logiczne, jednak w formule, którą podałem:
ludn <30000, <60000, <90000
błędu nie ma, można ten znak zamienić na <= celem przesunięcia granic przedziału o 1, ewentualnie ostatnią wartość trzeba by zmienić jakby chcieć: <90000 i ostatni >=90000


RE: kalkulator pól kilka warunków - popej - 19-12-2014

Cześć,

nie potrafię zgadnąć, jaki powinien być wynik tej operacji, ale np. zakładając, że to mają być liczby 2..5, to można spróbować tak:
Kod:
case
when "ludn_liczb" < 30000 then 2
when "ludn_liczb" < 60000 then 3
when "ludn_liczb" < 90000 then 4
else 5
end



RE: kalkulator pól kilka warunków - martel - 19-12-2014

Wynikiem ma być iloczyn wartości pola (w tym przypadku liczba ludności) i podanego współczynnika przy spełnieniu określonego warunku (gdy liczba ludności zawiera się w danym przedziale), dlatego po "then" trzeba powtórzyć "ludn_liczb" * (i tu wpisać współczynnik). Składnia podana wcześniej:
case when "ludn_liczb" <30000 then "ludn_liczb"*2 when "ludn_liczb" <60000 then "ludn_liczb"*3 when "ludn_liczb" <90000 then "ludn_liczb"*4 (itd. w zależności od liczby przedziałów) end
działa dobrze.