Fonctions disponibles dans Envision

Les fonctions dans Envision










Accueil » Ressources » Ici

Le présent article liste les fonctions utilisables avec Envision. L'objectif principal des fonctions est d'étendre les capacités d'Envision lorsque la syntaxe de base n'est pas suffisante.


Syntaxe des fonctions

La syntaxe générale des fonctions est la suivante :
x = fun(arg1, arg2, arg3) by [Group] sort [Order]
fun est remplacé par le nom de la fonction et la liste séparée par des virgules argN constitue les arguments passés à la fonction. Toutes les fonctions manipulent des vecteurs.

Seules certaines fonctions prennent en charge les options supplémentaires by et sort. Même si leur syntaxe est similaire à celle des « agrégateurs » mais ces options ne sont pas des agrégateurs. L'option by est facultative et son absence équivaut à by 1. Group et Order prennent en charge des « tuples » de vecteurs, c’est-à-dire des vecteurs multiples séparés par des virgules. Par exemple :
R = rank() by [A, B] sort [1]

Fonctions mathématiques

  • abs(number) : similaire à la fonction ABS dans Excel.
  • ceiling(number) : similaire à la fonction PLAFOND dans Excel.
  • exp(number) : similaire à la fonction EXP dans Excel.
  • floor(number) : similaire à la fonction PLANCHER dans Excel.
  • log(number, base) : similaire à la fonction LOG dans Excel. L'argument base est facultatif. Lorsqu'il est absent, la valeur utilisée est 10.
  • max(num1, num2, num3, ..., numN) : similaire à la fonction MAX dans Excel.
  • min(num1, num2, num3, ..., numN) : similaire à la fonction MIN dans Excel.
  • percent(N) by [Group] : renvoie la valeur N divisée par la somme de toutes les valeurs contenues dans Group.
  • norminv(number) : similaire à la fonction LOI.NORMALE.INVERSE dans Excel avec une moyenne de 0 et un écart-type de 1.
  • pow(number, exponent) : similaire à la fonction PUISSANCE dans Excel. Il est également possible d'utiliser l'opérateur de puissance number ^ exponent, qui effectue le même calcul.
  • round(number, digits) : similaire à la fonction ARRONDI dans Excel. Le deuxième argument est optionel et représente le nombre de chiffres à garder.
  • sqrt(number) : similaire à la fonction RACINE dans Excel.

Fonctions texte

  • concat(text1, text2, ..., textN) : concatène les valeurs texte de text1 à textN.
  • contains(text, pattern) : renvoie true (vrai) si text contient une occurrence de pattern.
  • endswith(text, pattern) : renvoie true (vrai) si text se termine par une occurrence de pattern.
  • indexof(text, pattern): renvoie l'index de la première occurrence de pattern au sein de text, ou -1, si aucune occurrence n'est trouvée.
  • lowercase(text) : renvoie le texte en minuscules.
  • parsedate(text, format) : convertit le texte en date à l'aide du format spécifié. Ce dernier est facultatif. Lorsque le format n'est pas indiqué, le format de la date est détecté automatiquement par Envision. S'il est fourni, la date est générée dans le format attendu. Voir la page chaîne de format de date personnalisé pour le détail de la syntaxe du format. Si une date ne peut être générée, la date 2001-01-01 est renvoyée.
  • parsenumber(text) : convertit le texte en nombre. La détection automatique du format d'Envision est utilisée. Si le nombre ne peut être identifié, la fonction renvoie zéro.
  • parsetime(text, format) : convertit une heure en fraction entre 0 et 1, qui représente une fraction de jour. Le format est facultatif. Lorsqu'il n'est pas spécifié, la valeur par défaut aaa-MM-jj HH:mm:ss est utilisée. Envision utilise le format .NET Custom Time.
  • replace(text, pattern, replacement) : renvoie le texte après y avoir remplacé toutes les occurrences de pattern par replacement. Cette fonction est similaire à la fonction SUBSTITUE d'Excel, sans l'argument no_position.
  • startswith(text, pattern) : renvoie true (vrai) si le texte commence par une occurrence de pattern.
  • strlen(text) : renvoie la longueur du texte en argument.
  • substr(text, start, count) : la position de départ est définie par start. Si sa valeur est négative, il s'agit d'un décalage à partir de la « fin » de la chaîne, sinon, à partir du « début » de la chaîne. La longueur de la sous-chaîne renvoyée est définie par count, considérée comme nulle si count < 0. Si le début ou la longueur du segment le place partiellement ou entièrement en dehors de la chaîne, substr("A", 2, 1) par exemple, le segment est tronqué. La fonction substr(text, start) est définie comme substr(ext, start, <infinity>).
  • uppercase(text): renvoie le texte en majuscules.

Fonctions liées au calendrier

  • "\{myDate:yyyy-MM-dd}": formatage personnalisé d'une date grâce à l'interpolation de chaîne. Le format de la date est indiqué après le point-virgule. Plus de détails sur les chaînes de format de date (en anglais).
  • chineseYear(date) : renvoie l'année en cours du calendrier chinois.
  • chineseYearEnd(date) : renvoie le dernier jour de l'année en cours du calendrier chinois.
  • chineseYearStart(date) : renvoie le premier jour de l'année en cours du calendrier chinois.
  • date(y, m, d) : renvoie une date construite à partir de l'année (y), du mois (m) et du jour (d) passés en argument. Ces arguments doivent être des nombres.
  • monday(date) : renvoie le premier lundi qui a précédé la date (incluse).
  • month(date) : renvoie le numéro du mois associé à la date, en comptant le nombre de mois depuis le 1er janvier 2001.
  • monthnum(date) : renvoie le mois (1-12) de la date passée en argument.
  • today(timezone) : renvoie la date du jour dans le fuseau horaire passé en argument, exprimée en nombre d'heures de différence avec l'UTC.
  • year(date) : Renvoie l'année de la date passée en argument. Similaire à la fonction ANNEE d' Excel.
  • yearStart(date) : renvoie le premier jour de l'année en cours.
  • yearEnd(date) : renvoie le dernier jour de l'année en cours.
  • weeknum(date) : similaire à la fonction NO.SEMAINE dans Excel.

Fonctions de classement

  • argfirst() by [Group] sort [Order] : renvoie true pour une première valeur du groupe en fonction des valeurs classées (ordering). Le regroupement est facultatif. Lorsqu'il est fourni, la fonction renvoie true une seule fois par groupe. La surcharge argfirst() by [Group] sort [Order]where condition est également disponible. Lorsque l'option where est utilisée, il se peut qu'aucune valeur true ne soit associée à un groupe si la condition n'est pas remplie pour l'ensemble du groupe.
  • arglast() by [Group] sort [Order] : identique à argfirst() mais renvoie true pour la dernière valeur.
  • cumsum(N) by [Group] sort [Order] : renvoie la somme cumulée des N selon un rang croissant spécifié par rank. L'argument facultatif group est utilisé pour effectuer des sommes cumulées locales pour chaque groupe.
  • fifo(V, T.D, T.Q) : aide à l'analyse FIFO des stocks. Renvoie les quantités invendues en stock dans le vecteur T. Le vecteur V contient le stock total. La table T contient les commandes d'achat, T.D les dates et T.Q les quantités achetées. La fonction calcule les quantités invendues déroulant les commandes d'achat à l'envers. Voir également Méthode de gestion des stocks FIFO.
  • rank() by [Group] sort [Order] : renvoie le rang des nombres number sans égalité, comme à la fonction EQUATION.RANG dans Excel, sauf que chaque nombre a un rang diffèrent (lorsqu'il y a égalité, ils sont départagés de façon arbitraire). L'argument facultatif group est utilisé pour obtenir un rang local pour chaque groupe.
  • rank(N, Group, S) : fonction de classement plus avancée, relativement différente des autres surcharges rank(). Son objectif est de permettre la génération d'une liste d'achat avec priorités. rank(N, Group, S) ne peut notamment pas être exprimé par une expression simple de tri et de regroupement. Il s'agit d'un algorithme en deux étapes. À la première étape, les valeurs sont regroupées par Group en « piles » classées par ordre croissant de S. À la deuxième étape, l'algorithme sélectionne la valeur de N la plus élevée parmi les premiers éléments de toutes les piles, extrait l'élément associé et lui affecte un rang (en commençant par 1), puis continue jusqu'à ce que les piles soient vides.
  • rankd() by [Group] : renvoie le rang des nombres N, les nombres identiques ont un rang identique. similaire à la fonction EQUATION.RANG dans Excel.


Fonctions de graphes

  • canonical(A, B) : renvoie le représentant canonique de chaque valeur A. D'un point de vue pratique, cette fonction est utilisée pour gérer des remplacements de code (de SKU par exemple). Par exemple, canonical(OldSku, NewSku) renvoie les derniers SKU disponibles pour chaque article, en effectuant les remplacements de façon récursive. Voir également nonCanonical().
  • nonCanonical(A, B) : renvoie true lorsqu'un représentant canonique ne peut être calculé pour A. C'est le cas lorsque des boucles ou des embranchements sont détectés.
  • connected(A, B)) by [Group] : prend en compte le graphe non dirigé décrit par (A,B) puis renvoie pour chaque nœud A le nom du plus petit nœud du composant connecté à A. Le « plus petit » signifie celui dont le nom est le plus court par comparaison des chaînes. L'argument group est facultatif. Lorsqu'il est spécifié, l'ensemble de données est d'abord partitionné selon les groupes indiqués.

Algèbre des distributions

Voir également l'algèbre des distributions.

Distributions paramétriques

Envision propose également plusieurs distributions paramétriques. C’est à dire des fonctions qui reçoivent un nombre en entrée, le paramètre, et renvoient une distribution.

  • dirac(n) renvoie une fonction nulle sur tout son domaine de définition sauf en n où celle-ci vaut 1.
  • identity(n) renvoie la fonction $\text{id}: k \to k$ limitée au segment [0;n] et 0 ailleurs.
  • uniform(n) renvoie la fonction $\text{unif}: k \to 1$ limitée au segment [0;n] et 0 ailleurs.
  • uniform(m, n) renvoie la fonction $\text{unif}: k \to 1$ limitée au segment [m;n] et 0 ailleurs.
  • uniform(D) renvoie la fonction $\text{unif}: k \to 1$ limitée au support positif de la distribution D et 0 sinon.
  • poisson(a) renvoie la distribution de Poisson du paramètre a ($\lambda$ dans la littérature).
  • exponential(a) renvoie la distribution exponentielle du parametère a ($\lambda$ dans la littérature).

Distributions non paramétriques

  • distrib(Id, G.Probability, G.Min, G.Max) renvoie une distribution définie par une liste de paquets associés à des bornes inclusives et une valeur.
  • ranvar(T.X) est un agrégateur qui renvoie la distribution empirique résultant des observations obtenues du vecteur T.X.

Indicateurs sur les distributions

Des indicateurs numériques peuvent également être obtenus à partir de distributions.

  • crps(X, A) avec A des nombres entiers, renvoie l'indice continu de probabilité (CRPS).
  • crps(X, Y) avec X et Y des distributions, renvoie la moitié de la distance d'énergie, qui peut être interprétée comme une généralisation du CRPS à une paire de distributions.
  • mean(X) renvoie la moyenne statistique.
  • variance(X) renvoie la variance statistique.
  • mass(X) renvoie la masse de la distribution, c’est à dire $\int_{-\infty}^{\infty}f(k) dk$.
  • isranvar(X) renvoie un booléen qui est vrai si la distribution est une variable aléatoire.
  • int(X, A, B)A et B sont des nombres entiers renvoie l’intégrale de X sur le segment inclusif [A;B].
  • quantile(X,tau) renvoie la distribution quantile, le plus petit $x$ tel que $\mathbf{P}[X \leq x] \geq \tau$.
  • spark(X) renvoie un texte qui contient une représentation en art ascii de la distribution.

Transformations de distributions

Une distribution peut être transformée en une autre.

  • reflect(X) renvoie la réflexion de la distribution$k \to f(-k)$.
  • transform(X,a) renvoie une distribution qui correspond à une interpolation de $k \to f(ka)$.
  • fillrate(X) renvoie le taux de couverture marginal. Attend en entrée une variable aléatoire et renvoie une en sortie.
  • truncate(X, a, b) renvoie la distribution tronquée $k \to f(k) \text{ if } k \in [a;b] \text{ else } 0$. Les limites a et b sont comprises dans l'intervalle.
  • maxr(X, a) renvoie la distribution $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$.
  • minr(X, a) renvoie la distribution $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$.
  • zoz(X) (« zero on zero ») renvoie la distribution dans laquelle $k \to f(k) \text{ if } k \neq 0 \text{ else } 0$

Fonctions de création de tables

Voir Créer des tables pour plus de détails.

  • extend.range(N) : crée N lignes pour chaque ligne de la table passée en argument.
  • extend.distrib(D[, S, M]) : étend le vecteur de distributions D en une table. S est la taille du premier segment et M est du segment à la fin.
  • extend.billOfMaterials(...) : transforme un historique de demande d'un article en historique de demande des pièces.

Fonctions avancées

  • cumsub(G.Item, G.Stock, G.Quantity, G.Rank) : reçoit 4 vecteurs qui appartiennent à une table, avec : G.Item l'identifiant d'article, toutes les lignes avec la même valeur correspondent au même article, G.Stock le stock initial de l'article, toutes les lignes associées au même article doivent avoir la même valeur G.Stock, G.Quantity la quantité de l'article requise pour l'achat de la ligne, G.Rank un identifiant de lot, toutes les lignes qui ont le même identifiant de lot appartiennent au même lot. Deux lignes ne peuvent pas avoir la même paire (G.Item, G.Rank) et tous les lots sont classés par rang croissant. La fonction cumsub() parcourt tous les lots dans l'ordre croissant de leur rang et garde en mémoire le stock restant pour chaque article. Ce stock est initialement défini par le vecteur G.Stock. Pour chaque lot, la fonction détermine s'il reste assez de stock pour acheter "toutes" les lignes du lot (stock supérieur ou non à G.Quantity). Si c'est le cas, la fonction décrémente le stock de chaque article et indique le stock restant de l'article dans chaque ligne. S'il n'y a pas assez de stock pour constituer le lot en entier, généralement parce qu'un des articles est en rupture de stock, alors la fonction ne met pas à jour les stocks restants et indique dans chaque ligne la valeur -(S+1) (S étant le stock restant pour cet article à cet instant) pour signaler que la ligne n'est pas achetée (test if G.S < 0) et la ligne ayant causé l'incomplétude du lot (test is G.Quantity + G.S + 1 gt; 0( et de combien (G.Missing = G.Quantity + G.S + 1).
  • forex(value, Origin, Destination, date) : renvoie le montant exprimé dans la monnaie Orig converti dans la monnaie Destination selon le taux à la date indiquée. Les monnaies doivent être spécifiées avec leur code canonique de trois lettres. Lokad prend en charge près de 30 monnaies en exploitant les données fournies par la Banque centrale européenne. Les taux sont mis à jour quotidiennement. Voir également isCurrency() pour tester la validité de votre code de monnaie.
  • hash(value) : renvoie une empreinte pseudo-injective entre 0 et 2^24-1. Cette fonction est généralement utilisée pour mélanger de façon aléatoire un ensemble de données en hachant le contenu d'une colonne puis en classant les données à partir des valeurs des empreintes calculées.
  • isCurrency(currencyCode) : renvoie true si le texte passé en argument est un code de monnaie reconnu par la fonction forex().
  • moqsolv(...) : résoud numériquement de façon avancée le problème des quantités minimales de commande.
  • priopack(V, MaxV, JT, B) by [Group] sort [Order] : une variante simple de l'algorithme de bin packing destiné à établir les priorités d'une liste d'achats. À la différence de la version classique de cet algorithme, nous cherchons à utiliser de façon optimisée la capacité des boîtes de rangement mais également à préserver autant que possible l'ordre des articles. Order contient les rangs des lignes à ranger et V représente leur volume. Group est la classe d'équivalence des fournisseurs, le rangement étant calculé « par fournisseur ». MaxV est la capacité maximale en volume, sa valeur est homogène avec V et l'on fait l'hypothèse qu'elle est constante pour toute la classe Group. JT est le palier de saut, ses valeurs sont homogènes avec V et doivent être de petits multiples de la valeur Group. B est un argument facultatif qui représente la « barrière », lorsque cette valeur est fournie, le processus de rangement dans les boîtes ne peut modifier l'ordre des lignes qui sont en-dessous de la classe d'équivalence définie par B.
  • stockrwd.m(Demand, AM), stockrwd.s(Demand), stockrwd.c(Demand, AC) : les fonctions de récompense associée au stock sont utilisées pour établir une liste de priorités d'achat à partir des prévisions probabilistes fournies par Lokad.