Hallo zusammen,
ein Kunde von uns importiert alle CRM Kontakte ins Pascom Telefonbuch, dabei wird auch ein Label “Kundennummer” gefüllt.
Label-1 hat also immer die Kundennummer gespeichert.
Herr Meier hat zB die Kd Nummer 5
Herr Müller die 6
Frau Schulze wieder die 5
Das klappt auch gut
Jetzt möchte der Kunde im Analytics auswerten, wie viele Anrufe pro Kunde erfolgt sind. Dabei würde ja das Label helfen, allerdings sehe ich per default nur, wie viele Anrufe ein gefülltes Label “Kundennummer” haben. Ich würde aber gern nach dem Inhalt des Labels filtern.
Hat das zufällig schon jemand gebaut und kann mir einen Hinweis geben?
Ich würde gern das Overview Dashboard kopieren und dann den Filter “Label” oben so umbauen, dass man einfach eine Kundennummer auswählen kann.
Hey. Sorry, ich fange hier ganz nah bei Null an Habe noch nie ein Grafana Dashboard umgebaut und google jeden SQL Query.
So sieht das SQL im Default aus:
SELECT now() as time,
l.label_name as metric,
count(*) as value
FROM filter_calls($__timeFrom(), $__timeTo(),'all','${user:csv}','${label:csv}','$fromName','$fromNumber','$toName','$toNumber') as r INNER JOIN labels as l on r.record_id = l.record_id
GROUP BY l.label_name
ORDER BY value desc;
Und es zeigt mir aktuell:
Ich hätte aber gern:
Wobei “Kunde A” Der Inhalt hinter “Label Firmenname” ist.
Des Weiteren kann man ja im Dashboard oben die Label auswählen:
Hier hätte ich auch gern den Inhalt des Labels stehen und nicht nur den Namen des Labels.
SELECT now() as time,
l.label_value as metric,
count(*) as value
FROM filter_calls($__timeFrom(), $__timeTo(),'all','${user:csv}','${label:csv}','$fromName','$fromNumber','$toName','$toNumber') as r INNER JOIN labels as l on r.record_id = l.record_id
WHERE l.label_name='Firmennamen'
GROUP BY l.label_value
ORDER BY value desc;
Function filter_calls accepts and filters only by label name so you should provide ‘*’ instead of ‘${label:csv}’. In addition to that you would need to provide filtering in WHERE part of the query.
For the table panel the query would be something like:
SELECT *,
COALESCE((SELECT string_agg("displayName" || ': ' || "value",', ') FROM jsonb_to_recordset(data->'labels') AS result("displayName" text, "value" text)),'') as labels,
data->'queue'->>'agentName' as agent
FROM filter_calls($__timeFrom(), $__timeTo(),'all','${user:csv}','*','$fromName','$fromNumber','$toName','$toNumber')
WHERE data->'labels' @> '[{"value":"${label:csv}"}]'::jsonb
ORDER BY record_timestamp desc;
Please keep in mind that you need to change all panels because all rely on the same function filter_calls
Also execution time of the queries would be degraded since we return all the data and filter one more time.