Jeder Wert auf einer Wandanzeige kommt aus einer Formel. Eine Formel ist ein einzelner Ausdruck über die Live-Daten des Contact Centers, etwa
Conversations.Count(State = "Waiting")
— die Zahl der wartenden Konversationen. Welche Daten es gibt, beschreibt Daten für Formeln; fertige Formeln stehen unter Beispiele. Dieselbe Sprache verwenden die Leistungsindikatoren, mit etwas anderen Daten, siehe unten.
Was eine Formel liefern muss
| Stelle | Ergebnis |
|---|---|
| Beschriftung, digitale Anzeige, Tabellenspalte | ein beliebiger Wert |
| Instrument, Statusindikator | eine Zahl |
| Zeilenformel einer Tabelle oder eines Diagramms | Ja/Nein |
| Reihe eines Diagramms | eine Zahl oder Zeitspanne |
Grundregeln
- Eine Formel ist ein Ausdruck — ohne Anweisungen, Variablen oder Kommentare.
- Groß- und Kleinschreibung spielt bei Namen keine Rolle:
conversations.count()ist dasselbe wieConversations.Count(). Beim Vergleich von Texten zählt sie dagegen:SkillName = "support"findet das Wissensgebiet „Support“ nicht. - Leerzeichen und Zeilenumbrüche zwischen den Teilen sind beliebig.
- Felder und Methoden hängen Sie mit einem Punkt an:
Conversations.First().Agent.Name,Name.StartsWith("A"). - Listenabfragen brauchen Klammern, auch ohne Inhalt:
Agents.Count(). - Anführungszeichen sind die geraden
"— typografische „ “ ergeben einen Syntaxfehler.
Werte
| Schreibweise | Bedeutung | Beispiel |
|---|---|---|
| ganze Zahl | Zahl | 42 |
| Kommazahl mit Punkt | Kommazahl | 2.5 |
Text in doppelten Anführungszeichen; ein " im Text wird verdoppelt |
Text | "Support" |
true, false |
Ja, Nein | IsLogin = true |
null |
leer | Agent = null |
Now |
die aktuelle Serverzeit, in UTC | Now - StartTime |
TimeSpan(Stunden, Minuten, Sekunden), TimeSpan.FromMinutes(5), TimeSpan.Zero |
Zeitspanne | QueuedTimeSpan > TimeSpan(0,2,0) |
DateTime(Jahr, Monat, Tag), DateTime.MinValue |
Zeitpunkt | ChangeTime = DateTime.MinValue |
| der englische Name eines Zustands oder Typs in Anführungszeichen | Zustand, Typ | State = "Waiting" |
Zustände und Typen vergleichen Sie über ihren englischen Namen, siehe Zustände und Typen; hier ist die Groß- und Kleinschreibung gleichgültig, ein unbekannter Name ist ein Fehler.
Umwandeln können Sie mit den .NET-Typnamen, etwa Int32(x) oder
Double(Agents.Count()), und mit Convert.ToInt32(…) oder
Convert.ToString(…); Kurznamen wie int oder double kennt die Sprache
nicht. Zum Rechnen stehen alle Funktionen von Math bereit —
Math.Round(x), Math.Round(x, 1), Math.Max(a, b), Math.Abs(x) —, dazu
die Methoden der Werte selbst: Name.ToUpper(), Subject.Length,
QueuedTimeSpan.TotalSeconds, StartTime.ToLocalTime().
Operatoren
Nach Vorrang geordnet, der stärkste zuerst:
| Operatoren | Bedeutung |
|---|---|
. [ ] |
Feld, Methode, Index |
-x, not x bzw. !x |
Vorzeichen; Verneinung von Ja/Nein |
*, /, % bzw. mod |
Punktrechnung. Ganze Zahlen teilen ganzzahlig: 7 / 2 ergibt 3, 7 / 2.0 ergibt 3,5. |
+, -, & |
Strichrechnung, auch mit Zeitspannen und Zeitpunkten: Now - StartTime ergibt eine Zeitspanne. & verkettet Texte. |
= bzw. ==, <> bzw. !=, <, >, <=, >= |
Vergleich |
and bzw. && |
und |
or bzw. || |
oder |
Bedingung ? Wert1 : Wert2 |
Bedingung, siehe unten |
Klammern ( ) ändern die Reihenfolge.
Verkettet & einen Zustand, eine Zeitspanne oder einen Zeitpunkt mit Text,
erscheint der Wert unübersetzt: Zustände englisch, Zeitspannen mit
Sekundenbruchteilen, Zeitpunkte in UTC. Formatieren Sie deshalb selbst, etwa
"Längste Wartezeit: " & Conversations.Max(QueuedTimeSpan).ToString("mm\:ss").
Listenabfragen
Jede Liste — Konversationen, Agenten, Wissensgebiete … — kennt diese Abfragen:
| Abfrage | liefert | bei leerer Liste | Beispiel |
|---|---|---|---|
Count() |
die Anzahl | 0 | Agents.Count() |
Count(Bedingung) |
die Anzahl der Einträge, für die die Bedingung gilt | 0 | Conversations.Count(State = "Waiting") |
Where(Bedingung) |
die Einträge, für die die Bedingung gilt | leer | InboundCalls.Where(SkillName = "Support").Count() |
First(), First(Bedingung) |
den ersten (passenden) Eintrag | leer | Agents.First(IsLogin).Name |
Min(Feld), Max(Feld) |
den kleinsten bzw. größten Wert | 0 bzw. 00:00:00 | Conversations.Max(QueuedTimeSpan) |
Sum(Feld) |
die Summe | 0 bzw. 00:00:00 | ACDs.Sum(WaitingCalls) |
Average(Feld) |
den Mittelwert | 0 bzw. 00:00:00 | Conversations.Average(QueuedTimeSpan) |
- In den Klammern gelten die Felder des einzelnen Eintrags: In
Agents.Count(IsLogin)istIsLogindas Feld jedes Agenten. Den Eintrag selbst nennen Sieit. - Abfragen lassen sich verketten:
Conversations.Where(ConversationType = "InboundCall").Max(QueuedTimeSpan). - Lässt sich die Bedingung für einen Eintrag nicht auswerten — etwa
Skill.Namebei einer Konversation ohne Wissensgebiet —, zählt er als nicht passend. - Ob es mindestens einen Eintrag gibt, prüfen Sie mit
Conversations.Count(State = "Waiting") > 0.
Bedingungen
iif(Bedingung, Wert1, Wert2) und Bedingung ? Wert1 : Wert2 liefern
Wert1, wenn die Bedingung gilt, sonst Wert2. Beide Werte müssen vom
selben Typ sein:
iif(Wrapup, WrapupTimeSpan, TimeSpan.Zero)
Agents.Count(IsLogin) = 0 ? "niemand" : "besetzt"
Row und it
In Tabellenspalten, Zeilenformeln und Diagrammreihen steht die
aktuelle Zeile als Row bereit. Ihre Felder nennen Sie auch ohne Row:
In einer Agententabelle sind Name und Row.Name dasselbe.
Innerhalb einer Listenabfrage bezeichnet it den Eintrag der Liste; die
Zeile bleibt über Row erreichbar. In einer Wissensgebiets-Tabelle zählt so
jede Zeile ihre eigenen Wartenden:
Conversations.Count(Skill.Id = Row.Id and State = "Waiting")
Heißt ein Feld der Zeile wie eine Liste — Agenten haben etwa die Felder
Skills und Languages —, meint der Name allein die Liste. Das Feld
erreichen Sie mit Row.Skills bzw. in einer Abfrage mit it.Skills.
Zeit und Zeitzonen
Nowund alle Zeitpunkte, die der Server liefert —StartTime,LoginTime,RaiseTime—, sind UTC.- Zeitspannen wie
Now - StartTimeoderQueuedTimeSpanhängen davon nicht ab. - Eine Beschriftung, deren Formel einen Zeitpunkt liefert, zeigt ihn in
der Ortszeit des Rechners. In Tabellen und in Texten, die Sie selbst
bilden, rechnen Sie um:
StartTime.ToLocalTime(),Now.ToLocalTime().ToString("HH:mm").
Fehlermeldungen
Beim Eingeben prüft der Designer jede Formel; ist sie fehlerhaft, färbt sich das Feld, und darunter steht die Meldung, oft mit der Stelle „(am Index n)“. Die häufigsten:
| Meldung | Ursache |
|---|---|
| Unbekannter Bezeichner '…' | Der Name ist falsch geschrieben, oder die Liste gibt es nicht. |
| Es existiert keine Eigenschaft oder Feld '…' im Typ '…' | Das Feld gibt es an diesem Eintrag nicht, siehe Daten für Formeln. |
| Operator '…' inkompatibel zum Operandentyp '…' und '…' | Die Werte passen nicht zusammen, etwa eine Zahl und eine Zeitspanne. |
| Ausdruck vom Typ '…' erwartet | Das Ergebnis hat den falschen Typ — ein Instrument bekommt keine Zahl, eine Zeilenformel kein Ja/Nein. |
| Mehrdeutiger Aufruf der Methode '…' in Typ '…' | Die Angaben passen zu mehreren Fassungen einer Funktion. |
| Syntaxfehler | etwa ein einzelnes | oder typografische Anführungszeichen |
| Zeichenkettenliteral nicht abgeschlossen | Ein " fehlt. |
| Zeichenliteral muss genau ein Zeichen enthalten | Ein Text steht in einfachen statt doppelten Anführungszeichen. |
| Ausdruck erwartet | Die Formel ist leer, oder nach einem Operator fehlt etwas. |
Eine Beschriftung mit fehlerhafter Formel zeigt auf der Wandanzeige die Formel selbst.
Tritt erst beim Rechnen ein Fehler auf — etwa First().Name auf einer
leeren Liste —, zeigt das Element einen leeren Wert: 0, leeren Text,
00:00:00 oder „Nein“.
Unterschiede zu den Leistungsindikatoren
| Wandanzeige | Leistungsindikator | |
|---|---|---|
| gerechnet | im Programm Wandanzeige, jede Sekunde | auf dem Server |
| Filter | die Filter des Anzeigenelements | keine |
Agents |
alle eingerichteten Agenten, die zum Filter passen — angemeldete zählt Agents.Count(IsLogin) |
nur die angemeldeten Agenten |
ACDs |
mit Kennzahlen wie Open und WaitingCalls |
nur die Einstellungen der Verteilregeln |
Alarms |
die aktiven Alarme | leer |
Configuration, TimeStamps, ConversationStates, ConversationTypes, Bins |
vorhanden | nicht vorhanden |