Reports

Microsoft Query

Die Auswertung der Daten erfolgt am besten in Form von Excel-Tabellen. Dieses Medium ist nicht nur eine logische Wahl, weil die Büro-PC's im Gegensatz zu den Callcenter-PC's wahrscheinlich unter Microsoft Windows und mit Microsoft Office laufen werden, sondern auch, weil Excel-Tabellen ein beliebtes Medium sind, um elektronische Daten zwischen Firmen auszutauschen. Somit werden die Auftraggeber des Callcenters vermutlich dieses Medium benutzen wollen.

Als Alternative kann auch Microsoft Access verwendet werden, welches einen recht leistungsfähigen Reportgenerator enthält. Hierüber können die Reports für den Ausdruck formatiert werden, was in Excel wesentlich schwerer ist. Allerdings ist Access weniger verbreitet; auch liefert es kein geeignetes Austauschformat.

Unter Windows muss ein ODBC-Treiber für mySQL installiert werden. MyODBC 3.51 für Windows kann unter http://dev.mysql.com/downloads/ heruntergeladen werden (siehe mySQL Connector/ODBC). Ein direkter Link zum deutschen Mirror der GWDG (Gesellschaft für wissenschaftliche Datenverarbeitung mbH Göttingen) ist http://ftp.gwdg.de/pub/misc/mysql/Downloads/MyODBC3/MyODBC-3.51.11-2-win.exe.

Bei der Installation des Treibers wird eine ODBC-Datenquelle mit dem Namen callcenter auf die Datenbank callcenter angelegt, die sich (im vorliegenden Fall) auf dem Rechner 192.168.0.1 befindet. Benutzername und Passwort müssen natürlich mit den bei der Installation angegebenen übereinstimmen (siehe auch Installation / Installation der Datenbank).

Microsoft Query läßt sich in Excel über den Menüpunkt „Daten“, „Externe Daten importieren“, „Neue Abfrage erstellen“ aktivieren. Hierauf öffnet sich ein Dateidialog, über den man eine existierende, gespeicherte Abfrage öffnen oder über Assistenten neu erstellen kann. Die einfachste Möglichkeit zur Erstellung führt über den Schalter „Neue Quelle“, mit der darauffolgenden Auswahl „ODBC DSN“. Hier kann dann die oben erstellte ODBC-Datenquelle callcenter ausgewählt werden. Nach Auswahl von Tabellen, darzustellenden Spalten und einschränkenden Kriterien hat man eine einfache Abfrage, die jedoch Fehlerhaft ist. So fügt der Assistent offenbar automatisch falsche Einschränkungen der Form „<Tabelle 1>.pkey = <Tabelle 2>.pkey“ hinzu. Daher ist nach Ausführung der Abfrage die Ergebnismenge zu klein, in vielen Fällen sogar leer – nur die Titelzeile ist zu sehen.

Führt man – während der Cursor auf der Titelzeile steht – jedoch den Menüpunkt „Daten“, „Externe Daten importieren“, „Abfrage bearbeiten“ aus, so öffnet sich ein weit mächtigeres Bearbeitungswerkzeug (siehe Abbildung). Die Fehlermeldung „Diese Abfrage kann mit dem Assistenten nicht bearbeitet werden“ erschien sowohl bei Excel 2000 als auch bei Excel 2003, doch der Assistent ließ sich in beiden Fällen öffnen; zumindest bei Excel 2003 waren die erstellten Abfragen auch funktionsfähig.


Gespeicherte Abfragen

Microsoft Query speichert Abfragen in normalen Textdateien. Im Falle einer ODBC-Datenquelle hat die Datei die Extension *.dqy (für „database query“). Die Datei lässt sich mit einem normalen Editor (Notepad, Wordpad) bearbeiten. Auf diese Weise kann jede Abfrage für den mySQL-Kommandozeilen-Client nach Excel portiert werden.

Eine gespeicherte Abfrage kann durch den Menüpunkt „Daten“, „Externe Daten importieren“, „Daten importieren“ in eine Excel-Tabelle eingefügt werden.

Anbei ein Beispiel für die Ausgabe aller Aufträge seit einem bestimmten Zeitpunkt (i.a. der Tagesanfang). Das Zeichen „“ markiert Absätze/Zeilenenden, das Zeichen „“ Tabulatoren. Die Datei enthält:

XLODBC¶

DSN=callcenter;DESC=MySQL ODBC 3.51 Driver¶ DSN;DATABASE=callcenter;SERVER=192.168.0.1;UID=callcenter;PASSWORD=hd6wUKgc89h;

PORT=3306;OPTION=3;STMT=;¶

select contractor, contracttitle, date as contractdate, salutation, numbers.firstname as firstname, numbers.surname as surname, birthday, job, bankname, banknumber, accountnumber, accountowner, street, zipcode, location, prefix, phonenumber, prefix2, phonenumber2, contracts.field1 as field1name, numbers.field1 as field1, contracts.field2 as field1name, numbers.field2 as field2, contracts.field3 as field1name, numbers.field3 as field3, contracts.field4 as field1name, numbers.field4 as field4, agents.firstname as agentfirstname, agents.surname as agentsurname, id, max(dialtime) as lastcalldate, remark from numbers, contracts, agents, calls, sip where contracts.pkey = numbers.contract and agents.pkey = numbers.agent and numbers.contract = contracts.pkey and calls.number = numbers.pkey and calls.phone = sip.pkey and numbers.state = 7 and agents.normal = 1 and numbers.normal = 1 and (dialtime >= ?) and (dialtime <= ?) group by numbers.pkey order by contractor, contracttitle, lastcalldate¶

Anrufzeit nach Zeitpunkt (Format yyyy-mm-dd hh:mm:ss)Anrufzeit vor Zeitpunkt (Format yyyy-mm-dd hh:mm:ss)¶

1111¶

contractorcontracttitlesalutationfirstnamesurnamestreet zipcodelocationprefixphonenumberprefix2phonenumber2banknamebanknumberaccountnumberaccountowner birthdayfield1field1field2field2field3field3field4field4firstnamesurnameidclientremark¶

Die hier vorgestellte Abfrage gibt alle Informationen zu Abschlüssen aus, einschließlich des Zeitpunkts der letzten stattgefundenen Anwahl. Die Abfrage (dialtime >= ?, Text der Abfrage „Datum heute...“) beschränkt die ausgegebenen Abschlüsse auf diejenigen, die nach dem eingegebenen Zeitpunkt (i.a. der Tagesbeginn) gemacht wurden.

Abfrage-Beispiele

Hier folgen einige Beispiele für Report-Abfragen.

Logins seit angegebenem Zeitpunkt, angeordnet nach Client, Zeit, Agent:

-----------------------------------------------------------------------

select logintime, logouttime, firstname, surname, client from logins, agents, sip where logintime >= ? and agents.pkey = agent and sip.pkey = phone order by client, logintime

 

Anzahl/Dauer Logins seit angeg. Zeitpunkt, angeordnet nach Client und Agent:

----------------------------------------------------------------------------

select agents.firstname, agents.surname, agents.id, sip.client, count(*), sum(logouttime - logintime) as duration from logins, agents, sip where logintime >= ? and logins.agent = agents.pkey and logins.phone = sip.pkey and logouttime > '0000-00-00 00:00:00' group by agents.pkey, sip.pkey order by sip.client, agents.id

 

Liste aller Anrufe seit angeg. Zeitpunkt:

-----------------------------------------

select agents.id, prefix, phonenumber, dialtime, hanguptime from calls, agents, numbers where dialtime >= ? and agents.pkey = calls.agent and numbers.pkey = number order by dialtime

 

Anzahl/Dauer Anrufe seit angeg. Zeitpunkt:

------------------------------------------

select count(*), max(hanguptime - dialtime) as longest, sum(hanguptime - dialtime) as total from calls, numbers where dialtime >= ? and numbers.pkey = number and hanguptime > '0000-00-00 00:00:00'

 

Anzahl/Dauer Anrufe seit angeg. Zeitpunkt, geordnet nach Status, Client, Agent:

-------------------------------------------------------------------------------

select agents.firstname, agents.surname, agents.id, states.statename, sip.client, count(*), max(hanguptime - dialtime) as longest, sum(hanguptime - dialtime) as total from calls, agents, numbers, sip, states where dialtime >= ? and agents.pkey = numbers.agent and numbers.pkey = calls.number and sip.pkey = calls.phone and states.pkey = numbers.state and hanguptime > '0000-00-00 00:00:00' group by agents.pkey, numbers.state, calls.phone order by sip.client, states.statename, agents.id

 

Tageweise Auswertung des Telefonie-Aufkommens seit Installation:

----------------------------------------------------------------

select count(*), max(hanguptime - dialtime) as longest, sum(hanguptime - dialtime) as total, date_format(dialtime, '%Y-%m-%d') as day from calls where hanguptime > '0000-00-00 00:00:00' group by day order by day

Verknüpfungen innerhalb von Excel

Die Verwendung dieser Abfragen in verknüpften Tabellenblättern wird durch eine Eigenheit von Excel erschwert. Und zwar überschreibt die Titelzeile der Abfrage die Zeile, ab der Daten eingefügt werden. Die unter der Titelzeile stehenden Zeilen werden jedoch nicht überschrieben, sondern eingefügt, wie mit dem Menüpunkt „Einfügen“ / „Zeile“. Bei einer Aktualisierung werden die alten Zeilen gelöscht und anschließend die neuen eingefügt. Daraus folgt natürlich, daß alle in den eingefügten Datenbereich hineinführenden relativen Verknüpfungen verschoben werden, und zwar unter den Datenbereich. Also müssen alle relativen Verknüpfungen nach jeder Aktualisierung der Daten neu erstellt werden – besser verwendet man absolute Verknüpfungen.

Verknüpfungen sind natürlich in vielerlei Hinsicht nützlich. So können die Daten der Abfrage beispielsweise anders angeordnet werden (Beispiel: die Spaltentitel der vertragsabhängigen Felder lauten field1, field2 und so weiter, es wäre natürlich praktisch, wenn diese Spaltentitel durch die im Vertrag vorgegebenen Werte ersetzt würden), oder sie können weiter zusammengefasst werden, ohne weitere Abfragen nötig zu machen. Auch kann die Anordnung geändert werden, zum Beispiel kann eine Zeile auf mehrere aufgeteilt werden.