首页 »
资源 » 此处
本页列出了 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))
:串联从 text1
到 textN
的文本值。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)
:返回年、月、日作为参数传递构建而成的日期。参数 y
、m
和 d
应为数字。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)
,其中 X
和 Y
为分布,返回能量距离的一半,这可以理解为将 CRPS 泛化到成对的分布。mean(X)
返回统计平均值。variance(X)
返回统计方差。mass(X)
返回分布质量,即 $\sum_{k=-\infty}^{\infty}f(k)$isranvar(X)
返回布尔值,分布为随机变量时则返回 true
。int(X, A, B)
,其中 A
和 B
为整数,返回 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$。边界 A
和 B
包含在内。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$。
建表函数
有关详细信息,请参阅
创建表。
高级函数
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 生成的概率预测结果构建优先订货策略。