Главная »
Ресурсы » Здесь
Для количественной оптимизации цепей поставок может потребоваться глубокая обработка и визуализация данных. Система Envision имеет все необходимые функции, и сценарий ниже призван помочь вам на практике ознакомиться с ее работой. Данный сценарий используется для создания панели управления, содержащей простые статистические данные о загруженной информации. Благодаря настоящему примеру вы ознакомитесь с ключевыми концепциями Envision.
Редактирование первого сценария
Если у вас еще нет
учетной записи Lokad, заведите ее. Ею можно пользоваться бесплатно в течение 30 дней. Если учетная запись Lokad у вас уже есть, загрузите
образец набора данных Envision. Этот набор данных представляет собой пакет исторических данных маленькой воображаемой компании, занимающейся розничной торговлей. Мы будем использовать эти данные ниже. Быстрее всего добавить файлы в вашу учетную запись Lokad можно, нажав кнопку
Connect data source
и выбрав набор данных вверху списка. При подключении источника данных файлы автоматически будут копироваться в вашу учетную запись, вам не потребуются заниматься этим вручную.
Если вы успешно импортировали образцы файлов в свою учетную запись, нажмите вкладку «Проекты». На странице проекта щелкните по ссылке
Create Envision script
внизу и выберите заголовок. Должна будет появиться новая страница, которая будет практически пустой. Это окно называется
редактор кода, и в нем можно редактировать сценарии Envision. Скопируйте код, указанный ниже, а затем нажмите на зеленую кнопку
Start Run
справа.
/// Это мой первый сценарий!
read "/sample/Lokad_Items.tsv"
read "/sample/Lokad_Orders.tsv" as O
read "/sample/Lokad_PurchaseOrders.tsv" as PO
oend := max(O.Date)
// Наивысшие показатели набора данных
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)
// Два линейных графика
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"
// Самые неликвидные запасы
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
над панелью управления, чтобы вернуться в редактор кода. Теперь вы знаете как переключаться между панелью управления и редактором кода.
Разберемся, что происходит
На текущий момент в зависимости от ваших знаний о программировании сценарий, приведенный выше, может показаться достаточно запутанным. Давайте разберем этот сценарий построчно, чтобы понять, что там происходит.
1-я строка начинается с
//
. Все подобные строки являются комментариями . Они не играют никакой роли в алгоритме сценария, они нужны только для того, чтобы пользователю было проще разобраться. В первой строке может быть даже три наклонных штриха
///
. Если в строке три наклонных штриха, она становится подзаголовком проекта и отображается под заголовком проекта в окне списка проектов.
В строках 2–4 находится три оператора
read
, которые позволяют загрузить данные, необходимые для создания панели управления. Все эти операторы позволяют загрузить по одному файлу.
В строке 6 задается переменная, в которой хранится дата последнего размещенного заказа. Она необходима, потому что эта дата будет использоваться в сценарии еще несколько раз.
В строках с 8 по 15 мы описываем первые две строки панели управления, состоящие всего из 4 ячеек. Верхняя ячейка — это просто метка, тогда как три нижние одиночные ячейки содержат по одному индикатору. Как мы увидим ниже, отображать можно непосредственно таблицы с данными, а не только отдельные значения.
В строках с 17 по 25 задается линейный график, который отображается сразу под тремя маленькими ячейками. Сначала расчитывается еженедельные объемы продаж и закупок в строках 18 и 19. Затем в строках 20 и 21 мы задаем самую позднюю и самую раннюю даты, которые будем рассматривать, то есть, прошлый понедельник и понедельник, который был 52 недели назад. Затем в строке 22 мы фильтруем данные, чтобы использовать только последние 52 полные недели. Алгоритм несколько сложен, однако он сводится к начальному условию и конечному условию. 23-я строка начинается с 2 пробелов в самом начале. Эти пробелы очень важны: оператор
when
задает блок, и все, что находится
внутри этого блока, то есть все строки с 2 дополнительными пробелами, фильтруются соответствующим образом. Наконец, в строках 23–25 задается линейный график.
В строке 23 мы задаем заголовок, цвет и расположение графика. В строках 24 и 25 задаются две кривые, которые выводятся на экран. Обратите внимание, что обе строки начинаются с 4 пробелов: 2 пробела нужны для блока
when
, и еще 2 — для блока
show
.
В строках с 27 по 37 мы задаем таблицу, которая отображается под линейным графиком. В данной таблице приводится список товаров компании, которые хуже всего обращаются В 28-й и 29-й строках мы рассчитываем число проданных единиц каждого товара за последние 365 дней. В строке 30 мы рассчитываем уровень запасов для каждого товара. Функция
max()
используется только во избежание деления на ноль в строке 31, если запас товара будет равен нулю. В 31-й строке мы рассчитываем оборачиваемость запасов, то есть количество операций с запасами в течение года. В строках 32–37 прописано непосредственно отображение таблицы. В строке 32 задается заголовок и его положение. В строках 33–36 прописываются все столбцы таблицы: по одной строке на столбец, справа налево. Наконец, в строке 37 мы используем параметр
order by
, чтобы отобразить товары с наименьшей оборачиваемостью в таблице сверху.
Движение вперед
Если вы не были знакомы с программированием до прочтения этого первого сценария, то объем информации, приведенный в нем, может показаться довольно внушительным. Тем не менее с помощью всего лишь 37 строк кода мы смогли создать уникальную панель управления, которая включает в себя ключевые показатели деятельности, визуализацию данных и приоритетный список товаров, по которым, возможно, необходимо принять определенные меры, чтобы избежать путаницы в запасах. Используя сценарий из менее чем 40 строк, мы смогли достичь довольно многого.
В целом, синтаксис, используемый для вычислений, очень похож на тот, который используется в Excel. Например, расчет полного запаса, включая как наличный запас, так и заказанные товары, можно рассчитать с помощью следующего кода
sum(PurchasePrice * (StockOnHand + StockOnOrder))
. Не бойтесь экспериментировать этим образцом, внося изменения в отдельные сегменты сценария и отслеживая соответствующие изменения на панелях управления.