--- title: "Funktionen und Filterargumente" slug: "funktionen-und-filterargumente" updated: 2025-08-22T10:30:00Z published: 2025-08-22T10:30:00Z canonical: "docs.vasgard.com/funktionen-und-filterargumente" --- > ## Documentation Index > Fetch the complete documentation index at: https://docs.vasgard.com/llms.txt > Use this file to discover all available pages before exploring further. # Funktionen und Filterargumente Es gibt viele weitere Funktionen und Filterargumente, die dabei helfen die Daten weiter zu bearbeiten, zu filtern und zu formatieren. ## Mathematische Funktionen ### Einfache Berechnungen Es ist möglich mit ermittelten Werte weiter zu rechnen. Dazu werden einfach die Zeichen für Addition (**+**), Subtraktion (**-**), Multiplikation (*****) und Division (**/**) benutzt. Code-Beispiel: ```plaintext VALUES count(...) * count(...) + count(...) AS 'Ergebnis' ``` ### max Die Funktion ermittelt den maximalen Wert aus einer übergebenen Liste. Syntax: **max()** Code-Beispiel: ```plaintext VALUES max(x.liste) AS 'Maximaler Wert' ``` ### min Die Funktion ermittelt den minimalen Wert aus einer übergebenen Liste. Syntax: **min()** Code-Beispiel: ```plaintext VALUES min(x.liste) AS 'Minimaler Wert' ``` ### sum Diese Funktion summiert alle Werte im übergebenen Parameter. Syntax: **sum()** Code-Beispiel: ```plaintext VALUES sum(assets[asset_type='Risk'].risk_value) AS 'Summe' ``` > [!WARNING] > Achtung! > > Wenn einer der Listenwerte **NoData** liefert (also leer ist), wird für die gesamte Summe der > > Wert **NoData** zurückgeliefert. Die übergebenen Listen sollten daher zunächst durch die **default/defaults** Funktion mit sinnvollen Standardwerten belegt werden. Code-Beispiel: ```plaintext VALUES sum(defaults(assets[asset_type='Risk'].risk_value,0)) AS 'Summe' ``` ## Formatierungen ### format_array Diese Funktion gibt den übergebenen Wert als einen String zurück, die einzelnen Werte getrennt durch den angegebenen Separator. Wird kein Separator angebenen, so wie der Standardseparator **Komma** benutzt. Der dritte Parameter gibt an, wie das Array eingeschlossen wird, standardmäßig werden eckige Klammern benutzt. Syntax: **format_array(, , )** Code-Beispiel: ```plaintext VALUES format_array(x.text) VALUES format_array(x.text, ':') VALUES format_array(x.text, ':', ' ') ``` ### format_date Datumsangaben können nach eigenen Wünschen formatiert werden. Wird kein Format angegeben, so wird ein Standardformat benutze, welches nur das Datum und nicht die Uhrzeit ausgibt. Hier werden nur einige gebräuchliche Formate angegeben. Syntax: **format_date(,’’)** Gängige Formate: - **%d.%m.%Y** (Tag.Monat.Jahr): z. B. *20.08.2019* - **%d.%m.%y** (Tag.Monat.Jahr): z. B. *20.07.19* - **%D** (Monat/Tag/Jahr): z. B. *07/20/19* - **%A %d. %b %yD** (Wochentag Tag Monatsname Jahr): z. B. *Don 21. Nov 2024* - **%d. %b %Y** (Tag. Monatsname Jahr): z. B. *20. Jul 2019* - **%d. %B %Y - %R Uhr’** (Tag Monatsname Jahr - Stunde:Minute Uhr): z. B. *20. November 2019 - 14:33 Uhr* - **%T** (Stunde:Minute:Sekunden:) z. B. *11:42:38* - **%H Stunden %M Minuten** (Stunden Stunden Minuten Minuten): z. B. *11 Stunden 42 Minuten* Code-Beispiel: ```plaintext VALUES format_date(x.date) VALUES format_date(x.date, '%d.%m.%y') AS Datum VALUES format_date(x.date_of_last_change, '%d. %b %Y - %R Uhr') AS 'Datum' VALUES format_date(x.date_of_last_change, '%D') AS 'Datum' ``` Ausgabebeispiele: ![](https://cdn.document360.io/d068286e-12b7-4de8-b129-2985cf0b4f54/Images/Documentation/format_date-beispiel-1.png) ![](https://cdn.document360.io/d068286e-12b7-4de8-b129-2985cf0b4f54/Images/Documentation/format_date-beispiel-2.png) ### format_datetime Die Parameter der Funktion sind genau so wie die der Funktion **format_date**. Wird kein Format angegeben, so wird ein Standardformat benutzt, welches das Datum und die Uhrzeit ausgibt. Syntax: **format_datetime(, )** Code-Beispiel: ```plaintext VALUES format_datetime(x.datum) ``` Ausgabebeispiel: ![](https://cdn.document360.io/d068286e-12b7-4de8-b129-2985cf0b4f54/Images/Documentation/format_datetime-beispiel.png) ### format_number Attributfelder, die Zahlen enthalten oder berechnete Ergebnisse können weiter formatiert werden, um sie besser lesbar zu machen. Syntax: **format_number(,)** - **comma=’.’** Das Komma wird als Punkt dargestellt: z. B. *1.2* - **comma=’,’** Das Komma wird als Komma dargestellt: z. B. *1,2* - **dot=’.’** Das 1000er Trennzeichen wird als Punkt dargestellt: z. B. *1.293.234* - **dot=’,’** Das 1000er Trennzeichen wird als Komma dargestellt: z. B. *1,293,234* - **grouping=** So wird die Anzahl der zu gruppierenden Zeichen festgelegt. Diese Angabe ist nur sinnvoll zusammen mit **dot**. - **decimals=** Die Anzahl auszugebener Nachkommastellen, bei Wert=2 werden 2 Nachkommatellen ausgegeben, dabei wird nur abgeschnitten, nicht gerundet. - **’.2f’** Es werden 2 Nachkommstellen ausgegeben, aber es wird mathematisch gerundet. Code-Beispiel: ```plaintext VALUES format_number(x.sum, grouping=3) AS 'Summe' VALUES format_date(x.procent_value, decimals=2) AS 'Prozentwert' VALUES format_date(x.value, '.2f') AS 'Wert' ``` Ausgabebeispiele: ![](https://cdn.document360.io/d068286e-12b7-4de8-b129-2985cf0b4f54/Images/Documentation/format_number-beispiel-1.png) ![](https://cdn.document360.io/d068286e-12b7-4de8-b129-2985cf0b4f54/Images/Documentation/format_number-beispiel-2.png) ## Konvertierungen ### date Die Funktion konvertiert den angegebenen Parameter in ein Datum. Syntax: **date()** Code-Beispiel: ```plaintext X-VALUES date(x.wert) ``` ### flat Die Funktion ebnet eine Liste von Listen im ersten Parameter in eine einfache Liste. Leere Listeneinträge werden verworfen. Syntax: **flat()** Code-Beispiel: ```plaintext X-VALUES flat(assets[asset_type='Training' AND (display_name contains 'ISMS')].participants) X-VALUES flat(assets[asset_type='Application'].zielobjekte) ``` Ein weiteres Beispiel findet sich unter [Ausgaben aller ToDos aus allen Cases mit Case und Status](/v1/docs/beispiel-queries). ### default Wenn Wert 1 leer ist, so wird Wert 2 zurückgegeben. Syntax: **default(, )** Code-Beispiel: ```plaintext VALUES default(x.wert, 0) ``` ### defaults Um abzufangen, wenn Attribute in einer Liste nicht ausgefüllt sind, kann die Funktion **default** genutzt werden. Wenn **Wert 1** den Inhalt **NoData** als Inhalt hat, als nicht ausgefüllt ist, dann wird **Wert 2** zurückgegeben. Damit kann abgefangen werden, dass Attribute, über die Summen gebildet werden, alle einen Wert haben, indem bei nicht gesetztem Attribut, der Wert **0** angenommen wird. Syntax: **defaults(, )** Code-Beispiel: ```plaintext VALUES sum(defaults(assets[asset_type='Risk'].risk_value,0)) AS 'Summe' ``` ### lookup_displayname Sind Attribute nicht bei dem Asset selber eingetragen, sondern verlinkt, so ist dort nur die UUID Nummer enthalten, anstatt dem Anzeigenamen des verlinkten Assets. Hier kann der entsprechende Anzeigename dann mit der Funktion **lookup_displayname** ermittelt und angezeigt werden. Syntax: **lookup_displayname()** Code-Beispiel: ```plaintext VALUES lookup_displayname(x.owner) AS 'Besitzer' ``` ### map Mit **map** werden Feldinhalten Werte zugewiesen und diese dann ausgegeben. Syntax: **map(:, :, ....)** Code-Beispiel: ```plaintext map(x.status, {'aktiv':'Aktiv', 'prod':'Produktion', 'planed':'Geplant'}) map(x.own_mta, {'< 1 Tag':0, '< 3 Tage':1, '< 5 Tage':2, 'keine MTA': 4}) ``` Zudem ist es möglich auch die Reihnefolge mit **map** anzupassen. Syntax: **orderby map(x., {: 1, : 2, : 3})** Code-Beispiel: ```plaintext TYPE table X-VALUES assets[asset_type="Risk" and risk_matrix EXISTS] orderby map(x.risk_matrix, {"Green": 1, "Yellow": 2, "Red": 3}) VALUES x.name values x.risk_matrix ``` ## Zählen ### count Count zählt die Anzahl der Assets im ersten Parameter. Es wird oft verwendet, wenn die Angabe **GROUPBY** (Sortieren nach einem angegebenen Attribut) verwendet wird. Syntax: **count()** Code-Beispiel: ```plaintext TYPE 'table' X-VALUES assets GROUPBY x.status VALUES first(x.status) VALUES count(x) TYPE 'table' X-VALUES [1] VALUES count(assets[asset_type='Server']) AS 'Server Gesamt' VALUES count(assets[asset_type='Server' AND status='Produktiv']) AS 'Produktive Server' VALUES count(assets[asset_type='Server' AND status='Inaktiv']) AS 'Inaktive Server' ``` ### count_equals **Count_equals** zählt die Anzahl der Elemente im ersten Parameter, die gleich dem zweiten Parameter sind. Syntax: **count_equals(, )** Code-Beispiel: ```plaintext VALUES count_equals(assets[asset_type='Server'].status, 'deployment') ``` ## Abfragen ### if_equals Mit dieser Funktion kann abgefragt werden, ob ein Wert einen bestimmten Inhalt hat und abhängig davon, wird ein Wert gesetzt. So können Werte für die Ausgabe im Report ersetzt werden, durch andere definierte Werte. Wenn das Attribut den **Wert 1** hat, dann wird **Wert 2** zurückgegeben, sonst **Wert 3**. Syntax: **if_equals(, , , )** Code-Beispiel: ```plaintext VALUES if_equals(x.status, 'Produktiv', 'OK', 'nicht OK') AS 'Produktiv' VALUES if_equals(x.type, 'Cloud', 'Webanwendung', x.type) ``` ### if_exists Mit dieser Funktion wird abgefragt, ob **Wert 1** existiert, dann wird der **Wert 2** zurückgegeben, ansonsten **Wert 3**. Syntax: **if_equals(, , )** Code-Beispiel: ```plaintext VALUES if_exists(x.verantwortliche, x.verantwortliche, ' ') VALUES if_exists(x.is_extern, 'PASS', 'FAIL') AS 'Externer Mitarbeiter' ``` ### if_greater Mit dieser Funktion kann **Wert 1** auf größer ***Wert 2*** abgeprüft werden. Ist die Bedingung erfüllt, so wird ***Wert 3*** zurückgegeben, ansonsten **Wert 4**. Syntax: **if_greater(, , , )** Code-Beispiel: ```plaintext VALUES if_greater(x.anzahl, 100, 'JA', 'NEIN') ``` ### exists Mit **exists** kann abgefragt werden, ob das Attributfeld einen Wert beinhaltet. Diese Funktion wird oft in Filterausdrücken verwendet. Syntax: **( exists)** Code-Beispiel: ```plaintext TYPE 'table' X-VALUES assets[(status exists)] VALUES x AS 'Asset Name' VALUES x.status AS 'Status' ``` ### contains Mit **contains** kann abgefragt werden, ob das Attributfeld einen bestimmten Wert beinhaltet. Diese Funktion wird oft in Filterausdrücken verwendet. Syntax: **( contains )** Code-Beispiel: ```plaintext TYPE 'table' X-VALUES assets[(status contains 'Prod')] VALUES x AS 'Asset Name' VALUES x.status AS 'Status' ``` ## Datumsfunktionen ### now Die Funktion hat keine Parameter und gibt das aktuelle Datum mit der aktuellen Zeit aus. Syntax: **now()** Code-Beispiel: ```plaintext VALUES now() VALUES format_date(now()) ``` ### timespan Die Funktion **timespan** konvertiert eine Zeitangabe in ein internes Format, mit dem dann bei Datumsangaben gerechnet werden kann. Datumsfelder müssen mit der Funktion [**date**](/v1/docs/funktionen-und-filterargumente#konvertierungen) erst umgewandelt werden. Syntax: **timespan()** Folgende Werte sind möglich. Dabei ist es möglich eine Zeitdauer anzugeben oder einen festen Wert zu setzen. Es können sowohl positive als auch negative Zahlenwerte angegeben werden. - **years=** - **months=** - **weeks=** - **days=** - **hours=** - **minutes=** - **seconds=** - **microseconds=** - **year=** - **month=** - **week=** - **day=** - **hour=** - **minute=** - **second=** - **microsecond=** Code-Beispiel: ```plaintext VALUES now() + timespan(months=1) VALUES date(x.date_of_last_change) + timespan(years=1) VALUES now() + timespan(day=1, months=1) VALUES date(x.date) + timespan(day=1, days=-1) ``` Ausgabebeispiele: ![](https://cdn.document360.io/d068286e-12b7-4de8-b129-2985cf0b4f54/Images/Documentation/timespan_beispiel-1.png) ## ![](https://cdn.document360.io/d068286e-12b7-4de8-b129-2985cf0b4f54/Images/Documentation/timespan-beispiel-2.png) ![](https://cdn.document360.io/d068286e-12b7-4de8-b129-2985cf0b4f54/Images/Documentation/timespan-beispiel-3.png) ## Sonstige ### distinct Mithilfe dieser Funktion werden Redundanzen, die in einer Tabelle auftreten können, eliminiert und die Werte werden jeweils nur einmal angezeigt. Diese Angabe erfolgt direkt hinter X-VALUES und bekommt dann in **()** die Assets, die dargestellt werden sollen. Diese Funktion ist auch nur dort sinnvoll. Syntax: distinct() Code-Beispiel: ```plaintext X-VALUES distinct(assets[asset_type='Server']) ``` ### first Mit first wird nur das erste Asset einer Reihe von Assets ausgegeben. Diese Funktion wird oft verwendet, wenn nach der UUID gesucht wird, oder aus einer Liste nur das erste Asset ausgegeben werden soll. Syntax: **first()** Code-Beispiel: ```plaintext VALUES first(assets[uuid=x.server]) AS 'Server' VALUES first(x.responsible).full_name VALUES first(assets[x=uuid]).display_name ``` ### last Mit **last** wird nur das letzte Asset einer Reihe von Assets ausgegeben. Syntax: **last()** Code-Beispiel: ```plaintext VALUES last(x.responsible).full_name ``` ### user Mit der Funktion user wird der aktuell angemeldete User ermittelt und das Attribut username ausgegeben. Syntax: **user()** Code-Beispiel: ```plaintext VALUES user() AS 'aktueller User' ``` ### user_asset Mit der Funktion **user_asset** wird das Asset des aktuell angemeldeten Benutzer ermittelt. Hier können durch Hinzufügen der Attributbezeichungen alle Attribute aus der Assetklasse **Mitarbeiter** ausgegeben werden. Standardwert ist hier der Anzeigename, wenn nichts angegeben wird. Syntax: **user_asset().** Code-Beispiel: ```plaintext VALUES user_asset().uuid AS 'UUID des aktuellen Users' VALUES user_asset().full_name AS 'Aktueller User' ``` Mit dieser Funktion lassen sich personalisierte Queries erstellen, indem darauf gefiltert wird. ```plaintext X-VALUES assets[asset_type='Employee' AND uuid=user_asset().uuid] X-VALUES assets[asset_type='Process' AND (owner=user_asset().uuid)] ``` ### type Mit der Funktion **type** wird das Format des angezeigten Attributes ausgegeben. Diese Funktion hilft bei der Erstellung von Queries, indem ermittelt werden kann, welchen Tpy dieses Feld hat, z. B. **str** (String), **bool** (Boolean), **list** (Liste). Syntax: **type()** Code-Beispiel: ```plaintext VALUES type(x) AS 'Feldtyp' VALUES type(x.name) AS 'Feldtyp' VALUES type(x.wert) AS 'Feldtyp' ```