Lister der Funktionen in Envision - Software zur Bestandsoptimierung

Liste der Funktionen in Envision












Startseite » Ressourcen » Hier

Das Hauptziel von Funktionen ist, die Fähigkeiten Envisions für Fälle, in denen die Syntax der Grundsprache nicht ausreichen würde, zu erweitern. Im Folgenden werden die von Lokad unterstützten Funktionen angegeben.


Syntax der Funktionen

Die allgemeine Syntax für Funktionen ist:
x = fun(arg1, arg2, arg3) by [Group] sort [Order]
Wird fun durch den Namen der Funktion ersetzt, dann wird das argN, die Liste der durch Kommas getrennten Argumente, an die Funktion übergeben. Alle Funktionen arbeiten mit Vektoren.

Nur bestimmte Funktionen unterstützen die zusätzliche by und sort Optionen. Während die Syntax ähnlich zu der der Aggregatoren ist, sind diese Funktionen keine Aggregatoren. Die by Option ist optional und wenn sie ausgelassen wird, entspricht sie by 1. Sowohl Group, als auch Order unterstützen Vektor-Tupele, das heißt, mehrere durch Kommata getrennte Vektoren, wie beispielsweise:
R = rank() by [A, B] sort [1]

Mathematische Funktionen

  • abs(number): Ähnlich zur ABS-Funktion in Excel.
  • ceiling(number): Ähnlich zur OBERGRENZEN-Funktion in Excel.
  • exp(number): Ähnlich zur EXP-Funktion in Excel.
  • floor(number): Ähnlich zur UNTERGRENZE-Funktion in Excel.
  • log(number, base): Ähnlich zur LOG-Funktion in Excel. Das base-Argument ist optional, wenn es ausgelassen wird, wird davon ausgegangen, dass es 10 ist.
  • max(num1, num2, num3, .., numN): Ähnlich zur MAX-Funktion in Excel.
  • min(num1, num2, num3, .., numN): Ähnlich zur MIN-Funktion in Excel.
  • percent(N) by [Group]: gibt den Wert N geteilt durch die Summe aller Werte innerhalt der Group zurück.
  • norminv(number): Ähnlich zur NORMINV-Funktion in Excel, mit einer mittleren Abweichung bei 0 und einer Standardabweichung bei 1.
  • pow(number, exponent): Ähnlich zur POTENZ-Funktion in Excel. Envision unterstützt auch den Potenz-Operator number ^ exponent, der dieselbe Berechnung ausführt.
  • round(number, digits): Ähnlich zur RUNDEN-Funktion in Excel. Das zweite Argument ist optional und stellt die Anzahl der Ziffern, die erhalten werden sollen, dar.
  • sqrt(number): Ähnlich zur WURZEL-Funktion in Excel.

Textfunktionen

  • concat(text1, text2, ..., textN): Textwerte von text1 zu textn verketten.
  • contains(text, pattern): gibt true zurück, wenn der Text Teile des Musters enthält.
  • endswith(text, pattern): gibt true zurück, wenn der Text mit Teilen des Musters endet.
  • field(text, separator, index): gibt das n-te Feld in einem Textwert zurück (nullindiziert), das mehrere durch ein angegebenes Trennzeichen getrennte Teilzeichenfolge enthält. Z.B.: field("a-b-c-d-", "-", 2) == "c". Diese Funktion soll die Parsing-Werte, die in einer einzigen Tabellenspalte verkettet wurde, erleichtern.
  • indexof(text, pattern): gibt den Index des ersten Teils vom Muster im Text zurück oder -1, wenn kein Teil gefunden wird.
  • lowercase(text): gibt den Text in Kleinbuchstaben zurück.
  • parsedate(text, format): wandelt den Text in ein Datum nach dem angegebenen Format um, wobei das Format optional ist. Wenn das Format ausgelassen wird, wird das Datum nach dem Datumsformat des automatischen Erkennungsverhaltens von Envision geparst. Wird das Format angegeben, wird das Datum nach dem erwarteten Format geparst. Für weitere Details zur Syntax des Formats siehe auch benutzerdefinierter String für Datumsformat. Falls kein Datum geparst werden kann, wird stattdessen das Datum 2001-01-01 zurückgegeben.
  • parsenumber(text): wandelt den Text in eine Zahl um. Der Parser nutzt das automatische Erkennungsverhalten für Zahlenformate von Envision. Wenn keine Zahl geparst werden kann, wird stattdessen Null zurückgegeben.
  • parsetime(text, format): wandelt eine Tageszeit in eine Bruchzahl zwischen 0 und 1 um, was den Bruchteil eines Tages darstellt. Das Format ist optional. Wenn kein Format angegeben wird, wird der Standardwert yyyy-MM-dd HH:mm:ss benutzt. Envision nutzt den .NET benutzerdefiniertes Format für Zeit.
  • replace(text, pattern, replacement): ersetzt im Text alle Erscheinungen des Musters durch den Ersatz. Diese Funktion ist ähnlich zur WECHSELN-Funktion in Excel, die das Argument instance_num ausgelassen werden.
  • startswith(text, pattern): gibt true zurück, wenn der Text mit dem Muster beginnt.
  • strlen(text): gibt die Länge des Text-Arguments zurück.
  • substr(text, start, count): die Startposition wird durch start definiert. Falls negativ, ist es ein Offset des Endes des Strings, andernfalls ist es ein Offset vom Beginn des Strings. Die Länge des zurückgegebenen Substrings wird von count definiert, und wenn count < 0 als 0 behandelt. Wenn der Segmentbeginn oder die Segmentlänge ihn teilweise oder gänzlich außerhalb des Strings legen, z.B. substr("A", 2, 1), wird das Segment abgeschnitten, so dass es passt. Funktion substr(text, start) wird als substr(text, start, <infinity>) definiert.
  • uppercase(text): gibt den Text in Großbuchstaben zurück.

Kalenderfunktionen

  • "\{myDate:yyyy-MM-dd}": benutzerdefiniertes Datumsformat über String-Interpolation. Das Datumsformat wird über das Token nach dem Semikolon festgelegt. Weiterführende Information über Formatzeichenfolge für Datum.
  • chineseYear(date): gibt das aktuelle Jahr des chinesischen Kalenders zurück.
  • chineseYearEnd(date): gibt den letzten Tag des aktuellen chinesischen Kalenders zurück.
  • chineseYearStart(date): gibt den ersten Tag des aktuellen chinesischen Kalenders zurück.
  • date(y, m, d): gibt ein Datum zurück, das aus Jahr, Monat und Tag gebildet ist und als Argument übergeben wird. Es wird erwartet, dass die Argumente y, m und d Zahlen sind.
  • monday(date): gibt den ersten Montag vor dem Datum (eingeschlossen) zurück.
  • month(date): gibt den Index des Monats, das mit dem Datum assoziiert ist zurück und zählt dabei die Anzahl der Monate ab dem 1. Januar 2001.
  • monthnum(date): gibt den anwendbaren Monat (1-12) für das Datum, das als Argument übergeben wird, zurück.
  • today(timezone): gibt das tatsächliche Datum zurück, wobei die Zeitzone als Argument übergeben und als Unterschied in Stunden zur Koordinierte Weltzeit (UTC) angegeben wird.
  • year(date): gibt das anwendbare Jahr für das Datum, das als Argument übergeben wurde zurück. Ähnlich zur JAHR-Funktion in Excel.
  • yearStart(date): gibt den ersten Tag des aktuellen Jahres zurück.
  • yearEnd(date): gibt den letzten Tag des aktuellen Jahres zurück.
  • weeknum(date): ähnlich zur KALENDERWOCHE-Funktion (System 2) in Excel.

Rangfunktionen

  • argfirst() by [Group] sort [Order]: gibt true für den ersten Wert der Gruppe nach den sortierten Werten (der Bestellung) zurück. Die Gruppe ist optional. Wenn die Gruppe vorhanden ist, gibt die Funktion einmal pro Gruppe true zurück. Praktischerweise gibt es auch eine Überladung argfirst() by [Group] sort [Order]where condition. Wenn die where-Option benutzt wird, kann es Gruppen geben, bei denen kein true-Wert vorkommt, weil die Bedingung für die gesamte Gruppe false war.
  • arglast() by [Group] sort [Order]: dasselbe wie argfirst(), aber es wird true für den letzten Wert zurückgegeben.
  • cumsum(N) by [Group] sort [Order]: gibt die kumulative Summe der Zahlen N zurück, gemäß der sich erhöhenden Ränge. Die Gruppe ist optional. Wenn die Gruppe angegeben wird, wird sie zur Erstellung lokaler kumulativer Summen für jede Gruppe genutzt.
  • fifo(V, T.D, T.Q): Hilfedienst für die FIFO-Bestandsanalyse. Gibt die nicht verkauften Bestandsmengen als Vektor von T zurück. Der Vektor V enthält den gesamten Bestand. Die Tabelle T enthält die Bestellungen. T.D enthält die Daten und T.Q die Bestellmengen. Die Funktion berechnet die Mengen, die nicht verkauft wurden, indem sie in den Bestellungen zeitlich rückwärts geht. Sehen Sie auch FIFO-Bestandsverfahren.
  • rank() by [Group] sort [Order]: gibt die Ränge der Zahlen ohne gleiche Ränge wieder. Ähnlich zur RANG.GLEICH-Funktion in Excel, außer dass alle Zahlen einen verschiedenen Rang erhalten (Tie-Breaks sind willkürlich). Die Gruppe ist optional. Wenn die Gruppe angegeben wird, wird sie zur Erstellung von lokalen Rängen für Gruppen genutzt.
  • rank(N, Group, S): eine etwas erweiterte Rangfunktion, die sich ziemlich von den anderen rank() Überladungen unterscheidet. Diese Überladung unterstützt die Generierung der priorisierte. Insbesondere kann rank(N, Group, S) nicht erneut als einfacher Sortier- und Gruppierungsausdruck ausgedrückt werden. Es handelt sich um einen imperativen zwei-Schritt-Algorithmus. Im ersten Schritt werden die Werte untereinander durch Group in Stapel gruppiert, wobei jeder Stapel nach aufsteigendem S sortiert wird. Im zweiten Schritt wählt der höchste N-Wert von unter den höchste Elementen aller Stapel vom Algorithmus gewählt, das Element wird aufgeklappt und es wird ihm ein Rang (bei 1 beginnend) zugeordnet. Dies wird wiederholt, bis die Stapel leer sind.
  • rankd() by [Group]: gibt die Ränge der Zahlen N wieder. Identische Zahlen erhalten identische Ränge. Ähnlich zur RANG.GLEICH-Funktion in Excel.

Graphen-Funktionen

  • canonical(A, B): gibt den kanonischen Repräsentanten für jeden A-Wert zurück. Praktisch wird diese Funktion beim Ersetzen von Code (z.B.: Ersetzen von SKU-Codes) angewandt. So würde beispielsweise canonical(OldSku, NewSku) die neuesten verfügbaren SKUs für jeden Artikel zurückgeben und rekursiv ersetzen. Siehe auch nonCanonical().
  • nonCanonical(A,B): gibt true immer dann zurück, wenn kein kanonischer Repräsentant für A berechnet werden kann. Dies ist der Fall, wenn zyklische Pfade oder Zweigpfade erkannt werden.
  • connected(A, B) by [Group]: berücksichtigt den ungerichteten von allen Kanten (A,B) beschriebenen Graphen und gibt dann für jeden Knoten A den Namen des kleinsten Knotens in den verbundenen Knoten wieder. Hierbei bezieht sich der „kleinste“ auf den mit dem kürzesten Namen, was den Vergleich von Strings betrifft. Die Gruppe ist optional. Wenn die Gruppe angegeben wird, wird das Dataset zuerst in verschiedene, unabhängige Graphen entsprechend der Gruppe geteilt.

Verteilungsfunktionen

Sehen Sie Algebra der Verteilungen.

Parametrische Verteilungen

Parametrische Verteilungen, also Funktionen, die eine Zahl als Argument betrachten, ein Parameter, können erstellt werden und Verteilungen zurückgeben.

  • dirac(n) gibt eine Funktion mit Wert Null überall außer bei n zurück, wo die Funktion den Wert 1 hat.
  • identity(n) gibt die Funktion $\text{id}: k \to k$ begrenzt auf das Segment [0;n] und 0 woanders zurück.
  • uniform(n) gibt die Funktion $\text{unif}: k \to 1$ begrenzt auf das Segment [0;n] und 0 woanders zurück.
  • uniform(m, n) gibt die Funktion $\text{unif}: k \to 1$ begrenzt auf das Segment [m;n] und 0 woanders zurück. Wenn $m - 1 = n$, gibt uniform() gibt es eine Nullverteilung zurück.
  • uniform(D) gibt die Funktion $\text{unif}: k \to 1$ begrenzt auf den positiven Träger der Verteilung D und 0 woanders zurück.
  • poisson(a) gibt die Poisson-Verteilung von Parameter a ($\lambda$ in literature) zurück.
  • exponential(a) gibt die Exponentialverteilung von Parameter a ($\lambda$ in literature) zurück.

Nicht-parametrische Verteilungen

  • distrib(Id, G.Probability, G.Min, G.Max): Funktion, die die von einer Liste von Bucket definierte Verteilung zurückgibt, wobei jeder Bucket rechts und links über inklusive Ränder und einen Wert für den Bucket verfügt.
  • ranvar(T.X): Aggregator, der die empirische Verteilung, die sich aus den vom Vektor T.X erhaltenen Beobachtungen zurückgibt.

Numerische Indikatoren auf Verteilungen

Numerische Indikatoren können auch aus Verteilungen erhalten werden.

  • crps(X, A) wo A ganze Zahlen sind, gibt den Continuous Ranked Probability Score (CRPS) zurück.
  • crps(X, Y) wo sowohl X als auch Y Verteilungen sind, gibt die Hälfte der energy distance (Energie-Distanz), die als eine Verallgemeinerung des CRPS für ein Verteilungspaar verstanden werden kann.
  • mean(X) gibt den statistischen Mittelwert zurück.
  • variance(X) gibt die statistische Varianz zurück.
  • mass(X) gibt die Masse der Verteilung an, also $\sum_{k=-\infty}^{\infty}f(k)$
  • isranvar(X) gibt einen Boolesch zurück, der true ist, wenn die Verteilung eine Zufallsvariable ist.
  • int(X, A, B) wo A und B ganze Zahlen sind, gibt das Integral von X über das inklusive Segment [A;B] zurück.
  • quantile(X, tau) gibt das Quantil der Verteilung zurück; das kleinste $x$, wie $\mathbf{P}[X \leq x] \geq \tau$.
  • spark(X) gibt einen Textwert zurück, der eine kompakte Ascii-Art Darstellung der Verteilung enthält.

Transformationen der Verteilungen

Eine Verteilung kann in eine andere Verteilung umgewandelt werden.

  • reflect(X) gibt die gespiegelte Verteilung $k \to f(-k)$ zurück.
  • transform(X,a) gibt eine Verteilung zurück, die sich durch Interpolation nähert $k \to f(k / a)$.
  • fillrate(X) gibt die Grenze der Auftragserfüllungsrate zurück. Erwartet eine Zufallsvariable als Eingabe und gibt eine Zufallsvariable wieder.
  • truncate(X, a, b) gibt die gestutzte Verteilung $k \to f(k) \text{ if } k \in [a; b] \text{ else } 0$ wieder. Die Grenzen A und B sind inklusiv.
  • maxr(X, a) gibt die Verteilung $k \to f(k) \text{ if } k \in ]-\infty; a - 1] \text{ or } \sum_{i=a}^\infty f(i) \text{ if } k = a \text{ else } 0$ zurück.
  • minr(X, a) gibt die Verteilung $k \to f(k) \text{ if } k \in [a + 1; \infty[ \text{ or } \sum_{i=-\infty}^a f(i) \text{ if } k = a \text{ else } 0$ zurück.
  • zoz(X) (zero on zero) gibt die Verteilung zurück, bei der $k \to f(k) \text{ if } k \neq 0 \text{ else } 0$.

Funktionen zur Tabellenerstellung

Für mehr Information, sehen Sie Tabellen erstellen.

  • extend.range(T.N): erstellt N Zeilen für jede Zeile der Tabelle T, wobei erwartet wird, dass N ein Integer ist.

    table T = extend.range(Orders.42)
    T.Quantity = Orders.Quantity // implizite Erweiterung
    show table "T" with T.N, T.Quantity
  • extend.distrib(distribution, gap, multiplier, reach): expandiert einen Verteilungs-Vektor in eine Tabelle. Siehe auch extend.distrib()
  • extend.billOfMaterials(...): macht aus der Bedarfshistorie von Artikeln einer Bedarfshistorie der eine Bedarfshistorie für Teile. Siehe auch extend.billOfMaterials().

Erweiterte Funktionen

cumsub(G.Item, G.Stock, G.Quantity, G.Rank)

Hat 4 Vektoren, die folgender Rastertabelle angehören:
  • G.Item der Artikelidentifikator, alle Zeilen, die denselben Wert teilen gehören zum selben Artikel;
  • G.Stock der anfängliche Bestand des Artikels, alle Zeilen, die zum selben Artikel gehören, müssen denselben G.Stock-Wert besitzen;
  • G.Quantity die Menge des Artikels, die für den Einkauf der Rasterzeile erforderlich ist;
  • G.Rank ein Paketidentifikator, alle Zeilen, die über denselben Paketidentifikator verfügen, gehören zum selben Paket – es ist nicht zulässig, zwei Zeilen mit demselben (G.Item, G.Rank) Paar zu haben und alle Pakete werden nach aufsteigendem Rang sortiert.

Die Funktion cumsub() durchsucht Pakete nach aufsteigendem Rang und beobachtet den verbleibenden Bestand für jeden Artikel. Anfänglich wird dieser Bestand vom G.Stock-Vektor definiert. Für jedes Paket bestimmt die Funktion, ob der verbleibende Bestand reicht, um alle Rasterzeilen in diesem Paket zu kaufen, je nachdem, ob der Bedarf über G.Quantity liegt. Ist dies der Fall, verringert die Funktion den Bestand für jeden Artikel und schreibt in jede Rasterzeile den verbleibenden Bestand für diesen Artikel. Wenn nicht genug Bestand vorhanden ist, um das gesamte Paket zu erstellen - gewöhnlich weil eines der Artikel fehlt - aktualisiert die Funktion den verbleibenden Bestand nicht und speichert für jede Rasterzeile den Wert -(S+1) (wobei S der verbleibende Bestand für diesen Artikel zu diesem Zeitpunkt ist), um einerseits darauf hinzuweisen, dass die Rasterzeile nicht gekauft wird (Test wenn G.S < 0) und andererseits, ob diese konkrete Zeile dafür verantwortlich ist, dass das Paket nicht gekauft werden kann (Test ist (test if G.Quantity + G.S + 1 > 0) und für wie viel (G.Missing = G.Quantity + G.S + 1).

forex(value, Origin, Destination, date)

Gibt die Menge, die in der Währung Origin ausgedrückt ist, in der entsprechenden Menge der Währung Destination, entsprechend des historischen Wechselkurses am angegebenen Datum zurück. Die Währungen sollte mit ihrem anerkannten Code aus drei Buchstaben kodiert werden. Lokad unterstützt etwa 30 Währungen und nutzt die Daten der Europäischen Zentralbank. Die Wechselkurse werden täglich aktualisiert. Sehen Sie auch isCurrency(), um die Gültigkeit Ihres Währungscodes zu testen.

hash(value)

Gibt einen pseudo-injektiven Hashwert zwischen 0 und 2^24-1 zurück. Diese Funktion wird normalerweise dazu genutzt, um ein Dataset zufällig zu mischen, indem der Inhalt einer Spalte mit einem Hash versehen und dann nach den Hashwerten geordnet wird.

isCurrency(currencyCode)

Gibt true zurück, wenn der eingegebene Text, der als Argument übergeben wird, ein von der forex() Funktion anerkannter Währungscode ist.

mkuid(X, offset)

Gibt eine eindeutige Nummer zurück, mit einer Eindeutigkeit, die über Envision Ausführungen erhalten bleibt. Diese Funktion ist zur eindeutigen Identifizierung der von Lokad berechneten Ergebnissen gedacht. So kann sie beispielsweise zur Erstellung einer eindeutigen Auftragsnummer genutzt werden, die bei jeder Ausführung des Envision-Skripts erhöht wird. Der Vektor X wird ignoriert, doch der UID (eindeutige Bezeichner) wird als Skalar in der zu X zugeordneten Tabelle erstellt. Das offset ist ein optionaler Skalar, der den Anfangssuffix des UID darstellt. Die erstellten Strings sind Nummern im Format PPPPPPPAAA, wobei P eine Seitenzahl ist (die nicht mit 0 beginnt), die strikt erhöht wird, und A ein sich erhöhender Zähler, der bei offset beginnt (oder bei 0, wenn kein Offset-Parameter bestimmt wird). P hat mindestens 7 Zeichen und A mindestens 3.

Die UIDs bieten drei Eigenschaften_
  1. Alle UIDs können als Zahlen geparst werden und diese Zahlen sind immer unterschiedlich. Beachten Sie dennoch, dass UIDs aus mindestens 10 Zeichen bestehen und wahrscheinlich mehr, wenn jeder Aufruf mehr als 1000 generieren muss.
  2. Ein zum Zeitpunkt T generierter UID ist immer kleiner als ein UID, das zum Zeitpunkt T' > T generiert wurde (in alphabetischer Reihenfolge).
  3. Wenn alle Aufrufe eine ähnliche Anzahl an UIDs erstellen (weniger als 999, oder zwischen 1000 und 9999, etc.) gelten die zuvor genannten Eigenschaften auch für die numerische Reihenfolge unter den UIDs.

solve.moq(...)

Ein fortgeschrittener numerischer Löser für das allgemeine MOQ-Problem (Mindestbestellmengen).

pricebrk(D, P, Prices.MinQ, Prices.P, Stock, StockP)

Gibt die Verteilung der Grenzkaufpreises pro Einheit wieder. Siehe Preisabschläge von Lieferanten.

priopack(V, MaxV, JT, B) by [Group] sort [Order]

Eine simple Variante des Algorithmus des Behälterproblems zur Nutzung bei priorisierten Einkaufslisten. Im Gegensatz zum Algorithmus des Behälterproblems, versuchen wir nicht nur die Kapazität des Behälters zu optimieren, sondern auch die Einheiten so gut, wie möglich, zu erhalten.
  • V stellt das Volumen jeder Zeile dar.
  • MaxV ist die maximale Volumenkapazität, dessen Wert zu V homogen ist und man geht davon, dass es ein konstanter Wert in der gesamten Äquivalenzklasse Group ist.
  • JT ist die Grenze, sein Wert entspricht dem von V und es ist gewöhnlich ein kleiner Vielfache vom Wert Group.
  • B ist ein optionales Argument, das als Schwelle interpretiert wird; Ist dieser Wert gegeben, darf der Prozess der Behälterbefüllung die Zeilen nicht zu derselben von B definierten Äquivalenzklasse umsortieren.
  • Order enthält die Ränge der Zeilen, die gepackt werden müssen.
  • Group ist die Äquivalenzklasse der Lieferanten, wobei das Packen in die Behälter pro Lieferant berechnet wird.

smudge(values, present) by [Group] sort [Order]

Nimmt einen unvollständigen Vektor values und einen booleschen Vektor an, der angibt, ob die gültigen Werte vorhanden sind. Es gibt einen ganzen Vektor mit gültigen Werten zurück, der durch die Überfüllung von gültigen Werten über ungültigen vervollständigt wurde. Genauer gesagt, wird der Ausgabevektor gebildet, indem jede Zeile Gruppe für Gruppe betrachtet wird in aufsteigen Reihenfolge Order (wenn es ein Group-Argument gibt) betrachtet wird, und jeder ungültige Wert durch den letzten beobachteten Wert oder einen vorgegebenen Standardwert, wenn noch kein gültiger Wert in der Gruppe betrachtet wurde, ersetzt wird.

stockrwd.m(D, AM), stockrwd.s(D), stockrwd.c(D, AC)

Die Bestands-Belohnungsfunktiones. Diese Funktionen werden zur Erstellung der priorisierten Bestellpolitik auf Grundlage Lokads probabilistischer Prognose benutzt.