[FOSSGIS-Talk] Aufsummieren von Spalten im Ausdruckseditor

Andreas Neumann a.neumann at carto.net
Mo Nov 4 13:40:16 CET 2019


Hallo Claas, 

Ich glaube nicht, dass das geht mit QGIS Expressions, weil eben Window
functions fehlen. 

Falls Du das wirklich brauchst in QGIS, würde ich Nyall Dawson fragen.
Er hatte damals für uns die aggregate functions und dürfte da nahe am
Thema dran sein. Aber andere könnten das sicher auch umsetzen. 

Oder du schreibst selber eigene Python custom expressions. 

Grüsse, 

Andreas 

On 2019-11-04 12:50, Claas Leiner wrote:

> Hallo Zusammenn,
> 
> ich versuche gerade mit dem Ausdruckseditor das Aufsummieren
> von Spaltenwerten umzusetzen, komme aber zu keiner Lösung:
> 
> Problemstellung:
> 
> Es gibt eine Spalte "Id", die einfach eine Folge von Linenabschnitten beschreibt, eine Spalte "length" welche die Längen der Linienabschnitte abbildet. Außerdem gibt es die Spalte "bereich", mit der die einzelnen Bereiche benannt werden, für die die Aufsummierung umgesetzt werden soll.
> 
> Jetzt soll für jeden Bereich eine  Aufsummierung der Strecke ("length") je folgenden Abschnitt vorgenommen werden, so dass das Ergebnis mit der Laufsumme folgendermaßen aussieht:
> 
> id    length       bereich    laufsumme
> 1    1631.737272    4306    1631.737272
> 2    11.4693348    4306    1643.2066068
> 3    10.2346697    4306    1653.4412765
> 4    5.1664905    4306    1658.607767
> 5    5.0219197    4306    1663.6296867
> 6    10.4880995    4306    1674.1177862
> 7    57.6267049    4306    1731.7444911
> 8    220.8260778    4306    1952.5705689
> 9    310.3634339    4306    2262.9340028
> 10    121.3497062    4306    2384.283709
> 
> In PostGis (leider nicht in den sqlite-versionen, die mit QGIS oder SpatiaLite ausgeliefert werden) lässt sich das mit Window-Funktionen umsetzen:
> ------
> SELECT
> id,
> "length",
> "bereich",
> SUM("length") OVER (ORDER BY id,bereich ASC) AS laufsumme
> 
> FROM strassen
> ORDER BY id ASC
> 
> ---------
> 
> Im Ausdruckseditor bin ich mit nicht zum Ziel gekommen. Am Ende habe ich die aufzusummierenden Abschnitte in Arrays geschrieben:
> 
> -------------
> array_to_string(
> 
> array_slice(
> ( array_agg(  "length" , group_by:= "bereich"  ) ),
> (minimum(  "id" ,group_by:= "bereich"  )) -1 , "id" -1
> 
> )
> )
> ---------------------------------------------------------
> 
> In der dritten Zeilte steht dann beispielsweise:
> 
> 1631.737272,11.4693348,10.2346697
> 
> Aber es gibt ja keine sum() Funktion ohne Agreggierung, mit der man auf den String zugreifen kann (max und min gibt es).
> 
> Hat jemand eine Idee, wie sich die Auffsummierung im Ausdruckseditor umsetzen lässt?
> 
> Viele Grüße,
> 
> Claas
> 
> -- 
> -----------------------------------------
> GKG-Kassel - Dr.-Ing. Claas Leiner
> QGIS-Support und mehr
> 
> Geodatenservice, Kartenwerkstatt &
> GIS-Schule Kassel
> 
> Wilhelmshöher Allee 304 E
> 34131 Kassel
> Tel. 0561/56013445
> claas.leiner at gkg-kassel.de
> ----------------------------------------
> http://www.gkg-kassel.de
> ----------------------------------------
> Unterstützen Sie QGIS
> QGIS-DE e.V. | http://qgis.de
> QGIS Projekt | http://qgis.org/de/site/
> -- 
> ....................................................................
> FOSSGIS 2020, die Konferenz für Open Source GIS mit OpenData und
> OpenStreetMap in Freiburg im Breisgau!
> 11.-14. März 2020 an der Universität Freiburg
> https://fossgis-konferenz.de/2020/
> 
> FOSSGIS Veranstaltungen 2019
> https://www.fossgis.de/node/322
> 
> FOSSGIS e.V, der Verein zur Förderung von Freier Software aus dem
> GIS-Bereich und Freier Geodaten!
> https://www.fossgis.de/             https://twitter.com/fossgis_eV
> 
> ____________________________________________________________________
> FOSSGIS-Talk-Liste mailing list
> FOSSGIS-Talk-Liste at fossgis.de
> https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste


Mehr Informationen über die Mailingliste FOSSGIS-Talk-Liste