myContactCenterHandbuch

Formeln

Die Formelsprache der Wandanzeigen — Werte, Operatoren, Listenabfragen, Bedingungen, Zeilenbezug und Zeitzonen — und was die Fehlermeldungen bedeuten.

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 wie Conversations.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) ist IsLogin das Feld jedes Agenten. Den Eintrag selbst nennen Sie it.
  • Abfragen lassen sich verketten: Conversations.Where(ConversationType = "InboundCall").Max(QueuedTimeSpan).
  • Lässt sich die Bedingung für einen Eintrag nicht auswerten — etwa Skill.Name bei 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

  • Now und alle Zeitpunkte, die der Server liefert — StartTime, LoginTime, RaiseTime —, sind UTC.
  • Zeitspannen wie Now - StartTime oder QueuedTimeSpan hä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

    ↑ ↓ auswählen · Eingabe öffnen · Esc schließen