Envision 中的函数列表


首页 » 资源 » 此处

本页列出了 Envision 支持的函数。这些函数的主要用途是在基本语法不够用时扩展 Envision 的功能。


函数语法

函数的一般语法是:
x = fun(arg1, arg2, arg3)
其中 fun 替换为函数名称,argN 是传递给此函数的参数列表(用逗号分隔)。所有函数对向量进行运算。

数学函数

  • abs(number):类似于 Excel 中的 ABS 函数。
  • ceiling(number):类似于 Excel 中的 CEILING 函数。
  • exp(number):类似于 Excel 中的 EXP 函数。
  • floor(number):类似于 Excel 中的 FLOOR 函数。
  • log(number, base):类似于 Excel 中的 LOG 函数。base 为可选参数,在忽略此参数的情况下,此参数假定为 10。
  • * max(num1, num2, num3, .., numN):类似于 Excel 中的 MAX 函数。
  • * min(num1, num2, num3, .., numN)::类似于 Excel 中的 MIN 函数。
  • norminv(number):类似于 Excel 中的 NORMINV 函数,其平均值为 0,标准偏差为 1。
  • pow(number, exponent):类似于 Excel 中的 POWER 函数。Envision 还支持幂运算符 number ^ exponent,它可以执行相同的运算。
  • round(number, digits):类似于 Excel 中的 ROUND 函数。第二个参数为可选参数,表示要保留的位数。
  • sqrt(number):类似于 Excel 中的 SQRT 函数。

文本函数

  • concat(text1, text2, ..., textN)):串联从 text1textN 的文本值。
  • contains(text, pattern):如果文本中出现这种模式,则返回 true
  • endswith(text, pattern):如果文本以这种模式结尾,则返回 true
  • indexof(text, pattern):返回文本中第一次出现的这种模式的索引;如果未出现此索引,则返回 -1。
  • lowercase(text):返回文本的小写字母变量。
  • parsedate(text, format):将文本转换为指定格式的日期。格式可选。在忽略格式时,日期根据 Envision 的日期格式自动检测行为进行解析。在提供格式时,日期根据格式预期进行解析。有关格式语法的详细信息,请参阅自定义日期格式字符串。如果日期无法解析,则返回日期 2001-01-01。
  • parsenumber(text):将文本转换为数值。解析程序运用了 Envision 的数字格式自动检测行为。如果数字无法解析,则返回 0。
  • parsetime(text, format):将一天当中的时间转换为介于 0 和 1 之间的分数,以此表示一天当中的部分时间。格式可选。如未指定格式,则使用默认值 yyyy-MM-dd HH:mm:ss。Envision 使用 .NET 自定义事件格式
  • replace(text, pattern, replacement):返回文本,其中出现的所有模式替换为替代形式。此函数与 Excel 的 SUBSTITUTE 函数相似,但略去了 instance_num 参数。
  • startswith(text, pattern):如果文本的起始处出现这种模式,则返回 true
  • strlen(text):返回文本参数的长度。
  • substr(text, start, count):由 start 定义起始位置。如果为负,表明是从字符串的结束位置偏移,否则是从字符串的起始未知偏移。count 定义返回的子字符串长度,如果 count < 0,则视为 0 处理。如果句段的起始位置或长度有部分或全部在字符串以外,例如 substr("A", 2, 1),则会进行截断以便相契合 。函数 substr(text, start) 定义为 substr(text, start, <infinity>)
  • uppercase(text):返回文本的大写字母变量。

日历函数

  • "\{myDate:yyyy-MM-dd}":通过字符串内插自定义日期格式。日期格式由分号后面的令牌指定。
  • chineseYear(date):返回以农历计算的当前年份。
  • chineseYearStart(date):返回当前年份(农历)的第一天。
  • chineseYearEnd(date):返回当前年份(农历)的最后一天。
  • date(y, m, d):返回年、月、日作为参数传递构建而成的日期。参数 ymd 应为数字。
  • monday(date):返回日期(包含在内)之前的第一个星期一。
  • month(date):返回与日期相关月份的索引,月份数自 2001 年 1 月 1 日算起。
  • monthnum(date):返回作为参数传递的日期的相应月份 (1-12)。
  • today(timezone):返回作为参数传递的时区当前的真实日期,按照与 UTC 时间差的形式表示。
  • year(date):返回作为参数传递的日期所在的相应年份。类似于 Excel 中的 YEAR 函数。
  • yearStart(date):返回当前年份的第一天。
  • yearEnd(date):返回当前年份的最后一天。
  • weeknum(date):类似于 Excel 中的 WEEKNUM(系统 2)函数。

排位函数

  • argfirst(ordering, group):根据排好序的值(排序),为组中的第一个值返回 true。组可选。在提供组的情况下,函数为每组返回一次 true。为方便起见,还会提供过载 argfirst(ordering, group) where condition。在使用 where 选项时,可能会导致其中不含 true 值的组存在,原因是整个组的条件为 false
  • arglast(ordering, group):与 argfirst() 相同,但最后一个值会返回 true
  • cumsum(number, rank, group):根据递增排序返回数值的累加和。组可选。在指定组时,用于对每个组进行局部累加。
  • fifo(V, T.D, T.Q):FIFO 库存分析助手。未售出的库存数量作为向量 T 返回。向量 V 包含总库存。表 T 包含采购订单。T.D 包含日期,T.Q 包含采购数量。此函数通过回溯采购订单,来计算未售出的数量。另请参阅 FIFO 库存方法
  • rank(number, group):返回数字排序(无限制)。类似于 Excel 中的 RANK.EQ 函数,唯一不同的是所有数字有不同的排名(采用任意名次计算规则)。组可选,在提供组的情况下,用于对每个组执行局部排序。
  • * rankd(number):返回数字排序;数字相同,排名相同。类似于 Excel 中的 RANK.EQ 函数。

图形函数

  • canonical(A, B):返回每个 A 值的正则表示。从实用角度说,该函数用于处理代码替换(例如替换 SKU 代码)。举个例子,canonical(OldSku, NewSku) 将返回递归替换后各个项目的最新 SKU。另请参阅 nonCanonical()
  • nonCanonical(A,B):只要无法计算 A 的正则表示,则返回 true。当检测到环形路径或分支路径时,便会发生这种情况。
  • connected(A, B, group):考量所有棱边 (A,B) 所描述的无向图,然后为每个节点 A 返回 A 的相连分量中最小节点的名称。此处的"最小"是指名称最短(通过字符串比较)。组可选。在提供组的情况下,数据集最先针对指定的组进行拆分。

分布代数

另请参阅 分布代数

参数分布

可以生成参数分布,即将数字作为参量(参数)的函数,并返回分布。

  • dirac(n) 返回除 n 处的值为 1,其他任意位置的值均为 0 的函数。
  • identity(n) 返回函数 $\text{id}: k \to k$,但仅限于段 [0;n],其他位置为 0。
  • uniform(n) 返回函数 $\text{unif}: k \to 1$,但仅限于段 [0;n],其他位置为 0。
  • uniform(m, n) 返回函数 $\text{unif}: k \to 1$,但仅限于段 [m;n],其他位置为 0。如果 $m - 1 = n$,则 uniform() 返回零分布。
  • uniform(D) 返回函数 $\text{unif}: k \to 1$,但仅限于函数 D 的正向支撑,其他位置则为 0。
  • poisson(a) 返回参数 a泊松分布(文献中的 $\lambda$)。
  • exponential(a) 返回参数 a指数分布(文献中的 $\lambda$)。

非参数分布

  • distrib(Id, G.Probability, G.Min, G.Max) 是一个函数,返回由一列桶定义的分布;每个桶具有左右边界(包含在内)和桶的值。

  • ranvar(T.X) 是一个聚合器,返回从矢量 T.X 获取的观察值得到的经验分布。

分布指标

从分布也可获取数值指标。

  • crps(X, A),其中 A 为整数,返回 连续概率排位分数 (CRPS)。
  • crps(X, Y),其中 XY 为分布,返回能量距离的一半,这可以理解为将 CRPS 泛化到成对的分布。
  • mean(X) 返回统计平均值。
  • variance(X) 返回统计方差。
  • mass(X) 返回分布质量,即 $\sum_{k=-\infty}^{\infty}f(k)$
  • isranvar(X) 返回布尔值,分布为随机变量时则返回 true
  • int(X, A, B),其中 AB 为整数,返回 X 在段 [A;B](包含在内)内的整数。
  • quantile(X, tau) 返回分布的分位数;例如最小的 $x$ $\mathbf{P}[X \leq x] \geq \tau$。
  • spark(X)返回一个文本值,其中包含分布的紧凑型 ascii-art 表示。

分布变换

一种分布可以变换成另一种分布。

  • reflect(X) 返回反射的分布 $k \to f(-k)$。
  • transform(X,a) 返回通过内插 $k \to f(k / a)$ 逼近的分布。
  • fillrate(X) 返回边际供货率。随机变量作为输入,并返回一个随机变量。
  • truncate(X, a, b) 返回截断分布 $k \to f(k) \text{ if } k \in [a; b] \text{ else } 0$。边界 AB 包含在内。
  • maxr(X, a) 返回分布 $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) 返回分布 $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) 返回分布,其中 $k \to f(k) \text{ if } k \neq 0 \text{ else } 0$。

建表函数

有关详细信息,请参阅创建表

  • extend.range(N):为作为参数传递的表中的每一行创建 N 行,其中 N应为整数。例如:

    table T = extend.range(Orders.42)
    T.Quantity = Orders.Quantity // implicit extension
    show table "T" with T.N, T.Quantity
  • extend.distrib(distribution, gap, multiplier, reach):将分布延展到表中。
    {extend.billOfMaterials(...)}}:将项目的需求历史记录转换为部件的需求历史记录。

高级函数

  • forex(value, Origin, Destination, date):返回根据指定日期当日的历史汇率将货币 Origin 兑换为等额货币 Destination 后的金额。货币应采用标准的三字母代码进行编码。Lokad 运用欧洲中央银行提供的数据支持大约 30 种货币。汇率每天都会更新。另请参阅 isCurrency(),以检查货币代码是否正确。
  • hash(value):返回介于 0 至2^24-1 之间的伪内射哈希值。此函数通常用于打乱列的内容,然后根据哈希值进行排序,来对数据集随机洗牌。
  • isCurrency(currencyCode):如果作为参数传递的文本条目是 forex() 函数能够识别的货币代码,则返回 true
  • mkuid(X, offset):返回一个唯一数值,并且在Envision运行中保持唯一性。此函数用于对 Lokad 计算得出的结果进行唯一标识。例如,可以使用它来生成唯一的“采购订单号”,每当重新执行 Envision 脚本时订单号便会递增。向量 X 被忽略,但会生成 UID(唯一标识符)作为与表中 X 相关联的标量。 offset 是可选标量,表示 UID 的起始后缀。生成的字符串是格式为 PPPPPPPAAA 的数值,其中 P 为始终严格递增的页码(不是从 0 开始),A 是一个递增的计数器,以偏移量开始(如果没有提供偏移参数,则从 0 开始)。P 至少有 7 位数,A 至少有 3 位数。UID 提供三项属性。(1) 所有 UID 可以被解析为数值,并且这些数值不同。但请记住,UID 至少有 10 位数,如果每次调用需要生成超过 1000 个数值,则可能更多位。(2) 在时间 T 生成的 UID 严格低于(按字母顺序)在时间 T' > T 生成的 UID。(3) 如果所有调用都生成数值相似的 UID(小于 999,或在 1000 和 9999 之间等等),则 UID 之间的数字顺序也具有之前的属性。
  • solve.moq(...):一种针对一般 MOQ 问题(最小订单量)的高级数值求解器。
  • pricebrk(Demand, Price, Prices.MinQuantity, Prices.Price, Stock, StockPrice):返回边际采购单价的分布。请参阅 供应商价格间断
  • priopack(R, V, S, C, J[, B]):它是装箱算法的一种简单变体,这种算法拟用于采购优先级列表。与传统装箱算法不同,我们这种算法不仅要优化箱的容量,也要尽可能保留单元顺序。R 包含所要装箱的行的排名。V 表示每行的体积。S 是供应商的等价类,装箱根据供应商进行计算。C 是最大体积容量,其值与 V 相似,在等价类 C 中假定其为常量值。J 为不断跳动的阈值,其值与 V 相似,通常为 C 值的小几倍。B 为可选参数,可解译为“屏障”;在提供此值的情况下,不允许装箱过程对低于 B 定义的相同等价类的行重新排序。
  • stockrwd.m(Demand, AM), stockrwd.s(Demand), stockrwd.c(Demand, AC)库存效益函数。该函数用于根据 Lokad 生成的概率预测结果构建优先订货策略。