Ваша технология может быть в облаке, но ваш бизнес по-прежнему работает на электронных таблицах

Автор Натан Акафф

Нам всем нравится думать, что мы используем лучшие технологические инструменты для ведения нашего бизнеса, но в глубине практически каждого бизнеса есть несущая электронная таблица — или дюжина несущих электронных таблиц. Иногда они даже не закапываются так глубоко.

Современные бизнес-инструменты прошли долгий-долгий путь, и лучшие инструменты делают упор на интеграцию и агрегирование как на первоклассные функции. Это здорово, если вы потратили время на настройку и наличие отделов продаж, маркетинга и C-команд, которым удобно пользоваться вашими инструментами бизнес-аналитики. Этот пост не о том счастливом пути. Речь идет о том, что происходит, когда менеджеру по работе с клиентами просто нужно какое-то историческое использование, и он действительно не хочет подписываться на еще один инструмент.

Бизнес-данные в APM?

Мы используем Instrumental для APM, а также для некоторых бизнес-фактов. Инструментарий концепций более высокого уровня, таких как использование и взаимодействие функций, в том же инструменте, что и наша хрустящая статистика сервера, стал для нас большой победой. В результате у нас есть некоторые данные, которые мы могли бы извлечь из нашей базы данных или инструмента BI, имея время для создания и выполнения соответствующих запросов, но они быстро становятся беспорядочными, когда вам нужно поделиться ими и повторить их с менее техническими членами команды. Итак, какой инструмент любят менее технические члены команды? Таблицы.

Давай уже пример!

Вернемся к нашему менеджеру по работе с клиентами, который хочет узнать об использовании некоторых клиентов. Я собираюсь использовать другую нашу компанию, DocRaptor, в качестве примера, потому что у нее очень четкая тестовая/платная линия и очень четкая модель использования 1 документ = 1 единица, но это применимо везде. Я знаю, что у нас есть данные об использовании в Instrumental, так что давайте их выложим.

Мы собираемся использовать Отличное средство создания пользовательских скриптов Google Таблиц и API инструментальных показателей. Давайте напишем код.

Во-первых, мы настроим несколько вещей, которые нам понадобятся для запроса:

var ONE_DAY_IN_SECONDS = 60 * 60 * 24;
var ONE_MONTH_IN_SECONDS = ONE_DAY_IN_SECONDS * 30;
  
// the instrumental metrics api endpoint
var url = 'https://instrumentalapp.com/api/2/metrics/';
// any instrumental metric expression, including wildcards and such
var expression = 'ts_sum(document_enqueued.user_188.test)';
  
//your project API key, which I’ve hidden on another sheet to make life easy
var api_key = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Keys").getRange(1, 1).getValue();
// the parameters Instrumental needs to know what data you want
// Note that javascript thinks in millis while Instrumental thinks in seconds!
var now = new Date();
var start_time = (now.getTime() / 1000) - ONE_MONTH_IN_SECONDS;
var resolution = ONE_DAY_IN_SECONDS;
var duration = ONE_MONTH_IN_SECONDS;

Ладно, пока все хорошо. Мы могли бы превратить многое из этого в аргументы, и мы это сделаем, но давайте продолжим и создадим наш запрос:

var query = "?start=" + start_time + "&resolution=" + resolution + "&duration=" + duration;
var request =  url + encodeURIComponent(expression) + query;
var headers = { 'X-Instrumental-Token': api_key };
var response = UrlFetchApp.fetch(request, { headers: headers });var response_data = JSON.parse(response.getContentText());
var metric_data = response_data.response.metrics[0].values;

Очень просто. Теперь мы просто преобразуем JSON-ответ Instrumental в таблицу:

var start = metric_data.start * 1000;  
var step = metric_data.resolution * 1000;
var results = metric_data.data.map(function(data_point, index) {
  // data_point.s is the sum - this is usually, but not always, the value you’re looking for
  return [new Date(start + (step * index)), data_point.s];
});
return results;

Хорошо, на что это похоже? Я кинул туда схему для развлечения.

Это казалось слишком простым. Как те же данные выглядят в Instrumental?

Неплохо. Хорошо, теперь наши AE счастливы, но можем ли мы сделать их жизнь еще проще?

Переменные?

Что, если бы мы могли просто предоставить функцию электронной таблицы, чтобы пользователи могли указать, что они хотят найти? Добавить некоторые параметры в созданную нами пользовательскую функцию несложно:

function INSTRUMENTAL_USAGE(user_id, input_start, input_days, input_type) {
  
  var ONE_DAY_IN_SECONDS = 60 * 60 * 24;
  
  var url = 'https://instrumentalapp.com/api/2/metrics/';
  var expression = 'ts_sum(document_enqueued.user_' + user_id + '.' + input_type + ')';
  var api_key = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Keys").getRange(1, 1).getValue();
  var start_time = (input_start.getTime() / 1000);
  var resolution = ONE_DAY_IN_SECONDS;
  var duration = input_days * ONE_DAY_IN_SECONDS;
  
  var query = "?start=" + start_time + "&resolution=" + resolution + "&duration=" + duration;
  var request =  url + encodeURIComponent(expression) + query;
  var headers = { 'X-Instrumental-Token': api_key };
  var response = UrlFetchApp.fetch(request, { headers: headers });
  var response_data = JSON.parse(response.getContentText());
  var metric_data = response_data.response.metrics[0].values;
var start = metric_data.start * 1000;  
  var step = metric_data.resolution * 1000;
  
  var results = metric_data.data.map(function(data_point, index) {
    return [new Date(start + (step * index)), data_point.s];
  });
  return results;
}

Теперь я вставляю =INSTRUMENTAL_USAGE(B1, B2, B3, B4) в ячейку на этой странице и, по волшебству:

Теперь любой, кто умеет работать с электронными таблицами, может перенести любые данные об использовании в знакомую и любимую среду.

Вывод

С помощью функции пользовательского скрипта Google вы можете извлекать данные непосредственно из любого используемого вами инструмента, который имеет разумный API, а затем взаимодействовать с ними так же, как и с любыми другими данными. Я оставил инструментальные запросы в своем примере с одним результатом, но эту функцию можно легко расширить, чтобы получить несколько временных рядов за один вызов. На самом деле я не хочу использовать электронные таблицы в качестве альтернативы инструментальному интерфейсу, но приятно знать, что при необходимости я могу это сделать.