了解第一段 envision 脚本

了解第一段 envision 脚本


首页 » 资源 » 此处

供应链定量优化需要大量的数据处理和数据可视化。Envision两者兼而有之,下文将介绍一段简单脚本来作为一种了解 Envision 的实用方式。该脚本生成的仪表板将收集一些关于数据的简单描述性统计信息。通过本例,您将更熟悉与 Envision 相关的重要概念。

编辑您的第一段脚本

如果您还没有 Lokad 帐户,需要开设 Lokad 帐户,该帐户提供 30 天免费试用。有了 Lokad 帐户后,需要加载 Envision 样本数据集。该数据集表示某个小型虚拟零售商的历史数据,在下文中,我们将使用该数据。要将这些文件添加到 Lokad 帐户,最快的方法就是点击 Connect data source 按钮,然后选择列表顶部的示例数据。运行数据源会自动将文件复制到您的帐户中,而无需执行下载/上载过程。

在您的帐户中成功导入样本文件后,点击" Projects" 选项卡。进入项目页面后,点击页面底部的 Create Envision script 链接并选择一个名称。随即会出现一个近乎空白的新页面。这个视图被称为“代码编辑器”,从中可编辑 Envision 脚本。复制下面的代码,然后点击右侧的 Start Run 绿色按钮。
/// This is my first sample script!
read "/sample/Lokad_Items.tsv"
read "/sample/Lokad_Orders.tsv" as O
read "/sample/Lokad_PurchaseOrders.tsv" as PO

oend := max(O.Date)

// Top indicators about the dataset
show label "This is a sample script" a1f1 tomato
show table "Product Lines" a2b2 with
sum(1)
show table "Order Lines" c2d2 with
sum(O.1)
show table "Purchase Order Lines" e2f2 with
sum(PO.1)

// Two linecharts
Week.sold := sum(O.NetAmount)
Week.purchased := sum(PO.NetAmount)
lastDay := monday(oend)
firstDay := lastDay - 52 * 7
when date >= firstDay & date < lastDay
show linechart "Purchased & sold" a3f4 tomato with
Week.sold as "Sold"
Week.purchased as "Purchased"

// Worst rotating inventory
lastYear := oend - 365
UnitSold = sum(O.Quantity) when date > lastYear
UnitStock = max(1, StockOnHand + StockOnOrder)
Turns = UnitSold / UnitStock
show table "Slowest inventory turns" a5f8 with
Id
Name
Turns
UnitSold
order by Turns
完成脚本执行后,Start Run 按钮 下方 会显示一个绿色的新行。绿色 表示操作成功完成。点击此行,将带您进入新生成的仪表板。点击仪表板上方的顶部按钮 Edit Script,将返回代码编辑器。现在您应当了解了如何在仪表板视图和代码编辑器视图之间来回导航。

Image

了解脚本含义

此时,根据您对编程原理的熟悉程度,您可能还是不明白上面的脚本。我们来逐行查看这段脚本,了解脚本的含义。

第 1 行以 // 开头,所有此类的行皆为备注 。这些行在脚本逻辑中不发挥任何作用,其目的仅在于提供可读性。第一行也可以有三条划线 /// 。有了这三条划线,这一行便成为项目副标题,会显示在项目列表视图中的项目标题下面。

第 2 至 4 行有三个 read 语句,这些语句用于加载创建仪表板所需的数据。其中每个语句上载一个文件。

第 6 行定义了一个变量,用于存储最新订购日期。定义此变量很有用,因为会在这段脚本中的其他地方多次用到此日期。

在第 8 至 15 行,前两行为仪表板,总共包含 4 个磁贴。最上面的磁贴仅为一个标签,下面的三个磁贴为简单的 1x1 表,这些表只包含一个指标。从下文可以看到,这些表也可用于显示实际的列表数据,而不仅仅一次只显示一个值。

在第 17 至 25 行,我们定义了线形图,它显示在三个小磁贴的正下方。第 18 行和第 19 行是计算每周销售和采购总计。在第 20 行和第 21 行定义我们要考虑的最近和最早的日期:分别是最后一个星期一和整整 52 周前的星期一。在第22行过滤数据,只保留过去整整 52 周的数据。这个逻辑稍显复杂,但可以归结为一个开始条件和一个结束条件。第 23 行的开头为 2 个空格。这些空格非常重要:when 定义了一个块,所有内容皆在此块的 里面,也即所有包含 2 个多余空格的行都会相应进行过滤。最后,在第 23 至 25 行定义了线形图。 在第 23 行,我们设置了此图的标题、颜色和位置。在第 24 和 25 行,定义了显示的两条曲线。请注意,这两行的前面都有 4 个空格:when 块需要 2个空格,show 块需要 2 个额外的空格。

第 27 至 37 行是关于线形图下面的表。此表显示在库存中轮转最少的产品。第 28 和 29行是计算每款产品在过去 365 天中的销售件数。第 30 行则是计算每个单位的库存。max() 函数仅用于在第 31 行中碰巧库存为零时避免与零相除。在第 31 行,我们计算库存周转率,即库存在一年内的周转次数。在第 32 至 37 行,表显示语句本身。第 35 行设置了标题和标题位置。从第 33 到 36 行,定义了表的所有列:从左至右,一列一行。第 37 行使用了 order by 选项来将周转较少的产品置于表的顶部。

展望

除非您已熟悉编程,否则第一段脚本中的信息量可能会让你感到有点吃力。但你可以看到,在短短 37 行的代码中,就包罗了一个涵盖 KPI 的有效仪表板、部分数据可视化,以及需要予以注意以避免其扰乱库存,因而需要优先采取措施的产品列表。通过这不到 40 行的脚本,我们便已收获良多。

一般说来,构成计算表达式所采用的语法与 Excel 中的极为相似。例如,总库存值应考量现有库存和订单库存,其表达式可以是 sum(PurchasePrice * (StockOnHand + StockOnOrder))。你可以用该样本进行试验,修改其中的部分脚本,马上就可以看到它对新生成的仪表板的相应影响。