Analytics Overview

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 :slight_smile:

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.

Ich freue mich über Denkanstöße!

Grüße
Seppos

In der SQL Anweisung einfach die Summe für das Feld Label ziehen.
Dann sollte er Quasi pro Kundennummer addieren.

Hey. Sorry, ich fange hier ganz nah bei Null an :slight_smile: Habe noch nie ein Grafana Dashboard umgebaut und google jeden SQL Query. :slight_smile:

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:

image

Ich hätte aber gern:

image
Wobei “Kunde A” Der Inhalt hinter “Label Firmenname” ist.

Des Weiteren kann man ja im Dashboard oben die Label auswählen:

image

Hier hätte ich auch gern den Inhalt des Labels stehen und nicht nur den Namen des Labels.

Wisst ihr, wie ich das am Besten mache?

Danke und Grüße
seppos

Hi Seppos,

Please try out following query:

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;

Kind regards,
Stefan

1 Like

Worked fine !! Thank you @Stefan !

I changed the variable “Label” also.

Original:

SELECT DISTINCT label_name,label_value FROM labels WHERE $__timeFilter(record_timestamp) ORDER BY label_name;
SELECT DISTINCT label_value FROM labels WHERE $__timeFilter(record_timestamp) ORDER BY label_value;

Now I´m able to filter all calls to one customer.

But: After enabling a filter there are no calls visible in the overview.

Do you have an idear?

Hi,

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.

Kind regards,
Stefan