- 20 Jun 2025
- 6 Minuten zu lesen
- Drucken
- DunkelHell
- pdf
Beispiel-Queries
- Aktualisiert am 20 Jun 2025
- 6 Minuten zu lesen
- Drucken
- DunkelHell
- pdf
Beispiele für einfache Funktionen
X-VALUES Wert ist nicht vorhanden
Werden alle Angaben in den VALUES Werten gemacht, so enthält der X-VALUES Wert keine Informationen.
Es gibt dann auch nur eine Ausgabezeile. Dieser X-VALUES Ausdruck kann dann folgendermaßen angegeben werden. Der Wert in den eckigen Klammern darf nicht leer sein.
X-VALUES [1]
Ermitteln der Anzahl der Assets je CI-Klasse
Mit distinct werden die einzelnen Assetklassen voneinander getrennt. Mit count werden die Assets gezählt.
TYPE 'table'
X-VALUES distinct(assets.*.asset_type) ORDERBY x
VALUES x AS "Asset-Klasse"
VALUES count(assets[asset_type=x].ci_number) AS "Anzahl"
Ermitteln der Anzahl von Hierarchy Dummys je CI-Klasse
Wie bei Ermitteln der Anzahl der Assets je CI-Klasse mit extra Zählung von Dummy-Assets.
TYPE 'table'
X-VALUES distinct(assets.*.asset_type) ORDERBY x
VALUES x AS "Asset-Klasse"
VALUES count(assets[asset_type=x].ci_number) AS "Anzahl"
VALUES count(assets[is_hierarchy_dummy=true AND asset_type=x]) as 'davon Dummys'
Ermitteln der Anzahl Assets in der CCDB
TYPE 'table'
X-VALUES ['Assets']
VALUES x as 'Name'
VALUES count(assets) as 'Gesamt'
Ausgaben aller ToDos aus allen Cases mit Case und Status
Listet alle Cases mit ToDos auf flat beschränkt die Liste auf die Cases, die ToDos (=remediations) haben.
Achtung!
Es werden nur Cases ausgewertet, für die man berechtigt ist.
TYPE 'table'
X-VALUES flat(cases[remediations.status exists].remediations)
VALUES x.case.name AS 'Case Name'
VALUES x.name AS 'ToDo Name'
VALUES x.description AS 'Beschreibung'
VALUES x.status AS 'Status'
Alle nicht geschlossenen Maßnahmen mit Fristdatum, sortiert nach Frist
Hier werden Hierarchie Dummies ignoriert.
TYPE 'table'
X-VALUES assets[asset_type='Measure' AND (status != 'Closed') AND ((NOT(is_hierarchy_dummy=true)) OR (NOT(is_hierarchy_dummy exists)))] ORDERBY x.deadline
VALUES x.name as Name
VALUES x.status as Status
VALUES format_date(x.deadline, '%d.%m.%y') AS Frist
Ausgabe aller Tickets mit Informationen
TYPE 'table'
X-VALUES tickets ORDERBY x.created_at
VALUES x.subject AS 'Betreff'
VALUES x.status AS 'Status'
VALUES x.created_by AS 'erstellt von'
VALUES x.priority AS 'Prio'
VALUES x.ticket_type AS 'Ticket-Typ'
VALUES format_date(x.created_at, '%d.%m.%y') AS 'Datum'
Zählen von Ergebnissen in einem bestimmten Case
Beispiel für die Funktion count_equals():
TYPE 'table'
X-VALUES cases[name='ISMS RA'].evaluations
VALUES count_equals(x.eval_result, 'MISS') AS 'MISS'
VALUES count_equals(x.eval_result, 'FAIL') AS 'FAIL'
VALUES count_equals(x.eval_result, 'PARTIAL') AS 'PARTIAL'
VALUES count_equals(x.eval_result, 'PASS') AS 'PASS'
VALUES count_equals(x.eval_result, 'N/A') AS 'N/A'
Beispiel für defaults
Beispiel für den Einsatz von defaults an Hand der Berechnung der Summe von Risiken:
TYPE 'table'
X-VALUES [1]
VALUES sum(defaults((assets[asset_type='IR_Field'].risk_value),0)) AS 'Summe'
Anforderungen in einem bestimmten Case mit Ergebnis
TYPE 'table'
X-VALUES flat(cases[name='CAIQ 3.01 - Zoom'].evaluations) ORDERBY
x.requirement.name
VALUES x.requirement.name AS 'Anforderung'
VALUES x.eval_result AS 'Ergebnis'
Benutzung der Result-Spalte zum Anzeigen, ob es Nachfolger gibt
Die Ergebnisse in der Result-Spalte werden nur im generierten Bericht grün oder rot.
TYPE 'table'
X-VALUES assets[asset_type='Process' AND (not(successors exists)) AND
(start_delivery exists)] ORDERBY x.start_delivery
VALUES x AS 'Prozess'
VALUES column_type='result' if_greaterorequals(now(),
date(x.start_delivery)+timespan(months=1),'FAIL', 'PASS') AS 'Neu (<1 Monat)'
VALUES x.start_delivery AS 'Startdatum'
Beispiele für die Formatierung von Zahlen und Daten
Formatierung von Zahlen mit format_number
TYPE 'table'
X-VALUES [1,2,3,(5.5),4000,5000]
VALUES x
VALUES format_number(x, decimals=2) AS '2 Nachkommastellen'
VALUES format_number(x, dot='.') AS 'Punkt'
VALUES format_number(x, grouping=3, dot='.') AS '3er Gruppe mit Punkt'
VALUES format_number(x, grouping=2, dot=';') AS '2er Gruppe mit Semikolon'
Zählen von noch offenen Anforderungen in einem Case und Ausgabe in Prozent
Beispiel dafür, wie man mit gezählten Ergebnissen rechnen kann (letzte Zeile). Zur besseren Lesbarkeit wird das Ergebnis auf zwei Stellen hinter dem Komma gekürzt.
TYPE 'table'
X-VALUES cases[name='CAIQ 3.01 - Zoom'].evaluations
VALUES count(x.eval_result) AS 'Gesamt'
VALUES count_nonequals(x.eval_result, 'MISS') AS 'schon bearbeitet'
VALUES format_number(count_nonequals(x.eval_result, 'MISS') * 100 /
count(x),decimals=2) AS '% bearbeitet'
Ausgabe in einer Tabelle durch Ersetzung der Werte kürzen
TYPE 'table'
X-VALUES assets[asset_type='Process' and (own_level_confidentiality exists) ]
VALUES x.display_name as 'name'
VALUES x.own_level_confidentiality as 'C'
VALUES x.own_level_integrity as 'I'
VALUES x.own_level_availability as 'A'
VALUES x.own_level_confidentiality + ' / ' + x.own_level_integrity + ' / ' + x.own_level_availability AS 'CIA lang'
VALUES if_equals(x.own_level_confidentiality, '0 - Keine Auswirkung', '0',
if_equals(x.own_level_confidentiality, '1 - Geringe Auswirkungen', '1',
if_equals(x.own_level_confidentiality, '2 - Mittlere Auswirkungen', '2',
if_equals(x.own_level_confidentiality, '3 - Schwere Auswirkungen', '3', '')))) + ' - ' +
if_equals(x.own_level_integrity, '0 - Keine Auswirkung', '0',
if_equals(x.own_level_integrity, '1 - Geringe Auswirkungen', '1',
if_equals(x.own_level_integrity, '2 - Mittlere Auswirkungen', '2',
if_equals(x.own_level_integrity, '3 - Schwere Auswirkungen', '3', '')))) + ' - ' +
if_equals(x.own_level_availability, '0 - Keine Auswirkung', '0',
if_equals(x.own_level_availability, '1 - Geringe Auswirkungen', '1',
if_equals(x.own_level_availability, '2 - Mittlere Auswirkungen', '2',
if_equals(x.own_level_availability, '3 - Schwere Auswirkungen', '3', '')))) AS 'CIA kurz'
Beispiele für das Rechnen mit Daten
Ausgabe aller Prozesse, die vor mindestens einem Monat gestartet sind
Achtung:
now() + timespan(months=1): Jetzt in einem Monat
now() + timespan(month=1): Datum von heute, der Wert des Monats wird auf den ersten Monat dieses Jahres gesetzt (Januar)
TYPE 'table'
X-VALUES assets[asset_type='Process' AND
(start_delivery<(now()-timespan(months=1)))]
VALUES x
TYPE 'table'
X-VALUES assets[asset_type='Process'] limit 10
values now() + timespan(months=1)
values now() + timespan(month=1)
Bearbeitungszeit eines Risikos ausrechnen von geöffnet bis geschlossen
Beispiel für das Rechnen mit Daten.
TYPE 'table'
X-VALUES assets[asset_type='Risk' AND (closed_at exists)]
VALUES x.display_name AS 'Risiko'
VALUES format_date(x.identified_date, '%d.%m.%y') AS 'Geöffnet am'
VALUES format_date(x.closed_at, '%d.%m.%y') AS 'Geschlossen am'
VALUES date(x.closed_at) - date(x.identified_date) AS 'Bearbeitungszeit'
Auswertung auf letztes Änderungsdatum von Assets der Klasse 'Business_Partner'
Das Datum im Attribut date_of_last_change sieht fast aus wie ein Datum, ist aber ein String. Deshalb ist die Funktion date erforderlich, um mit den Daten rechnen zu können:
TYPE 'table'
X-VALUES assets[asset_type='Business_Partner' ] orderby x.date_of_last_change
VALUES x.display_name
VALUES x.date_of_last_change
VALUES date(x.date_of_last_change)
VALUES if_greaterorequals(date(x.date_of_last_change), date('2021-01-01'), 'neu', 'alt') as 'if >= 2021-01-01'
Beispiele für komplexe VALUES-Audrücke
Ausgabe aller Ansprechpartner mit zugehöriger Firma und E-Mail Adresse
Das folgende Beispiel ermittelt „Kontaktpersonen“, die zu Kunden (=Customer) oder Geschäftspartner/ Lieferanten (=Business Partner) gehören.
Zu der „Contact Person“, die im X-VALUES bestimmt wird, wird in den letzten beiden Zeilen die Firma herausgesucht. In der vorletzten Zeile ist die Firma ein Kunde; in der letzten Zeile ist die Firma ein Geschäftspartner/Lieferant.
TYPE 'table'
X-VALUES assets[asset_type='Contact_Person']
VALUES x.name as 'Name'
VALUES x.first_name as 'Vorname'
VALUES x.last_name as 'Nachname'
VALUES x.email as 'Email'
VALUES x.address as 'Adresse'
VALUES assets[(asset_type='Customer') and (contact_persons contains [{'contact': x.uuid}])].display_name as 'Firma (Kunde)'
VALUES assets[(asset_type='Business_Partner') and (contact_persons contains [{'contact': x.uuid}])].display_name as 'Firma (Lieferant)'
Balkendiagramm der Schwachstellen aller Assets nach Status
Es wird kein Filter im X-VALUES genutzt, weil über count die Assets in den VALUES Werten gezählt werden.
TYPE 'bar' colors=['purple', 'red', 'orange', 'yellow']
X-VALUES ['Assets']
VALUES count(assets[vuln_status.0.vuln_number_critical > 0]) AS 'critical'
VALUES count(assets[vuln_status.0.vuln_number_high > 0]) AS 'high'
VALUES count(assets[vuln_status.0.vuln_number_medium > 0]) AS 'medium'
VALUES count(assets[vuln_status.0.vuln_number_low > 0]) AS 'low'
Ausgeben aller Teilnehmer einer Schulung
Assets der Klasse „Training“ werden gesucht und auf den Namen „ISMS“ gefiltert. Dann wird eine Liste mit allen Teilnehmern erstellt. Die Funktion flat macht die Liste für eine Ausgabe zugänglich.
In der letzten Zeile wird der Filter aus dem X-VALUES umgeschrieben und geändert, um an die Firma der Teilnehmer zu gelangen.
TYPE 'table'
X-VALUES flat(assets[asset_type='Training' AND (display_name contains 'ISMS')].participants)
VALUES lookup_displayname(x.participant) AS 'Teilnehmer'
VALUES if_equals(x.successful, true, 'Bestanden', if_equals(x.successful, false, 'Durchgefallen', 'Nicht teilgenommen')) AS 'Ergebnis'
VALUES format_date(x.participate_date,'%d.%m.%y') AS 'Datum der Prüfung'
VALUES assets[asset_type='Employee' AND (uuid = x.participant)].company.display_name AS 'Firma des Teilnehmers'
Die Ergebnisse und Namen können auch kombiniert werden (Konkatenation von Strings):
TYPE 'table'
X-VALUES flat(assets[asset_type='Training' AND (display_name contains 'ISMS')].participants)
VALUES lookup_displayname(x.participant) + ' / ' + if_equals(x.successful, true, 'Bestanden', if_equals(x.successful, false, 'Durchgefallen', 'Nicht teilgenommen')) AS 'Teilnehmer / Ergebnis'
VALUES format_date(x.participate_date,'%d.%m.%y') AS 'Datum der Prüfung'
VALUES assets[asset_type='Employee' AND (uuid = x.participant)].company.display_name AS 'Firma des Teilnehmers'
Die Auswertung geschieht hier auf zwei Wegen. Der erste Weg nutzt if_equals, während der zweite Weg die Funktionen default() und map() nutzt:
TYPE 'table'
X-VALUES flat(assets[asset_type='Training' AND (display_name contains 'ISMS')].participants)
VALUES lookup_displayname(x.participant) AS 'Teilnehmer'
VALUES if_equals(x.successful, true, 'Bestanden', if_equals(x.successful,false, 'Durchgefallen', 'Nicht teilgenommen')) AS 'if_equals'
VALUES default(map(x.successful, {true:'Bestanden', false:'Durchgeknallt'}), 'n/a') AS 'default(map())'
Beispiel für viele Funktionen in einer Query
TYPE 'table'
X-VALUES assets[asset_type= 'Risk' AND (NOT(status='Vermieden')) AND (NOT(status='Nicht relevant')) AND (current_deadline<(now()+timespan(months=4)))]
VALUES format_date(now(), '%d.%m.%y') AS 'Erstellungsdatum'
VALUES x.display_name AS 'Nummer'
VALUES x.description AS 'Bezeichnung'
VALUES format_array(x.responsible.full_name, ' / ', '') AS 'Verantwortlich'
VALUES if_equals(x.risk_matrix, 'Green', 'Grün', if_equals(x.risk_matrix, 'Yellow', 'Gelb', if_equals(x.risk_matrix, 'Red', 'Rot', x.risk_matrix))) AS 'Indikator'
VALUES format_number(x.risk_value, dot='.') AS 'Risiko'
VALUES format_date(x.current_deadline, '%d.%m.%y') AS 'Umsetzungsfrist'
VALUES x.prolongation_count AS 'Anzahl Prolongationen'
VALUES format_date(min(x.prolongations.original_deadline), '%d.%m.%y') AS 'ursprüngliche Umsetzung'
VALUES x.status AS 'Status'