Google Data Studio это, конечно, хорошо, но у нас есть свой чудесный аналог - похожий инструмент от одной из передовых ИТ-компаний РФ Yandex Datalens. Сегодня в паре абзацев попробуем быстро собрать отчет, аналогичный материалу про Data Studio. Спойлер: это не так просто, как кажется на первый взгляд. Но давайте разбираться.

Первые шаги

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

Настройка источника

Выбор тут несколько скромнее, чем в Data Studio, но в то же время более, чем достаточен для большинства проектов. 

В нашем случае БД всё та же MySQL, настройки всё такие же, только работать мы будем только в нормированными данными - никаких гипотез об их чистоте строить уже нет необходимости. 

После настройки подключения у меня возник когнитивный диссонанс: попасть в главное меню оказалось не так уж просто. При том, что интерфейс не кажется таким уж перегруженным кнопками, столкнуться с подобной проблемой я никак не рассчитывал. Забегая вперед - мне пришлось ещё и импортировать мускульное представление в CSV и добавить ещё и его как источник. Зачем - дальше по тексту. 

Но на этом сложности в моей картине мира не закончились. Допустим, я хочу собрать какой-то новый лист с информацией. В Data Studio фигурировало максимально понятное для меня понятие “отчета”. Здесь вроде как тоже есть дашборд, но тогда за что отвечают чарты и датасеты? 

Датасеты

Раздел “Датасеты” - это слой трансформации (пусть и весьма упрощенной) в нашем ETL-механизме. Я не нашел именно этого механизма в Дата студии. То есть, какие-то манипуляции с полями-то вы можете произвести, но уже внутри отчета, что не совсем ложится в ETL. Яндекс пошел по значительно более логичному (лично для меня) пути, в то время как Google заставляет вас качественно готовить витрины для BI-решений. Окей, это тоже подход, но за гибкость решения Даталенс однозначно получает плюс в карму. 

Какие типы данных

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

  1. “Геополигон”. Внутренняя история про карты, подробностей пока рассказать не могу.

  2. “Геоточка”. То же самое, что и выше, только конкретная координата в пространстве. 

  3. “Дата” и “Дата и время”. Отличия очевидны, только вот автоматически парсер не смог понять, что 17.06.2015 - это дата. Странно и не очевидно, но допустим. Вручную поменять можно, но как централизованно объяснить Ленсу, что дата лежит в таком-то формате мне не удалось. 

  4. “Дробное число”. Вот тут надо быть аккуратным, поскольку в дробное может попасть и id, и год, и даже ИНН. 

  5. “Целое число”. Тут, думаю, всё понятно и все-таки стоило бы именно его сделать числовым параметром по умолчанию. Вижу цифры - думаю, что целое. 

  6. “Логический”, то есть булево true/false. 

  7. “Строка”. Второй по популярности после дроби тип данных по мнению Даталенса. Что ж, примерно так оно и есть, и лучше бы ИНН (который, кстати, вполне себе стандартизирован) тоже определялся сразу как строка. 

Что можно сделать

В случае со строкой можно посчитать общее значение для поля или количество уникальных значений, короче count и count distinct. В случае с числами всё то же самое плюс максимум, минимум, среднее и сумма. Дата аналогично, но, разумеется, нет суммы. Ну а у булевых данных мы можем только количество посчитать, что тоже вполне логично. 

А вот если вы захотите создать новое поле, вам на выбор будет доступно большое количество функций. Названия их специфичны, одновременно и похожи на что-то, и не похожи ни на что. Возможно, где-то в Кликхаусе есть подобный синтаксис или в одной из разновидностей SQL. Функций не так много, справочник небольшой и мне чем-то болезненно напоминает справочник по QlikView/Sense.

Без использования этих функций нам не построить ничего, поскольку формирование нового поля - единственный способ объяснить парсеру, в каком формате у нас лежит дата (если он сам с ходу этого не понял). Причем используемая для этого функция DATETIME_PARSE спокойненько определит формат даты без вашего участия, главное её в-принципе использовать. Что мешает по умолчанию применять её для всех полей формата “дата” для меня остается загадкой. 

Хотя я поторопился с тем, что эта функция решит все наши проблемы. Дело в том, что не все функции могут работать со всеми источниками в настройке датасета. Как это работает? Если данные лежат в КликХаусе - у вас всё в порядке, вы можете особо ни за что не переживать. Если данные лежат в какой-либо ещё СУБД - вам необходимо смотреть документацию и проверять, работает ли та или иная функция с вашим источником. Сначала я не понял в чем дело, а потом понял: ДатаЛенс применяет все преобразования буквально на лету. Правда, чем одно и то же значение поля отличается в разных СУБД, а главное почему с CSV всё работает прекрасно я так и не понял. Более того, у полей, где дата указана в более-менее традиционном виде ГГГГ-ММ-ДД тип поля вполне себе подтянулся автоматически. Но собрать в тип даты указание просто года не выйдет никак.

Построение чартов

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

Но не всё так просто и однозначно, ведь помимо классического понимания чартов есть т.н. QL-чарты. Это объекты, которые строятся напрямую из источника (в данном случае речь о БД). Поработать с ними планирую в другой раз. 

Чарт “Столбчатая диаграмма”

Для того, чтобы корректно работать с чартами, необходимо создать вычисляемые поля - показатели. Делается это в левой части экрана щелчком по пиктограмме “+”:

Показатели также работают с формулами, примерно с теми же, что и поля в построении датасета. Мне удалось использовать расчеты в формировании чарта и без создания отдельных показателей, но это костыли, которые работают только через drag-n-drop. 

Интересный момент касается отображения ТОП-n позиций. Для этого необходимо создать показатель с формулой “rank(Поле)”, которое будет ранжировать поле, потом поставить его в фильтры и выбрать меньше либо равно (или просто меньше) требуемого числа. Не слишком прозрачная схема, не так ли?

Чарт “Таблица”

В случае с таблицей всё довольно просто: в качестве столбцов указываем все интересующие нас поля (в нашем случае их 4), фильтры и прочие радости на свой вкус и цвет. 

Настройки таблицы при этом довольно скудные:

Чарт “Индикатор”

Здесь тоже все довольно просто, поскольку имеет какой-то минимум настроек. Мне не совсем понятно, что помешало ребятам прикрутить выбор кегля шрифта, а не размерную сетку футболок (XL, L, M - ну вы поняли). 

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

Построение Дашборда

Честно говоря, как только я зашел в этот раздел, я немного оторопел. Несколько странно и непривычно видеть абсолютно пустой белый лист даже без кнопочек управления. С другой стороны, кому-то вид белого листа может наоборот показаться притягательным. 

 

Ладно, понятно, что там есть кнопка “добавить”, но UI все-таки выглядит недоработанным по сравнению с мэтрами или тем же Data Studio. Ладно, попробуем добавить элемент, может быть что-то станет понятнее… Нет. На выбор есть аж 4 варианта: чарт, селектор, текст и заголовок. Не то, чтобы я сходу мог придумать что-то чего мне не хватает… А, нет, смог - изображения например. 

Пробуем добавить заголовок и выясняем несколько особенностей: менять размер блока можно только потянув за правый нижний угол, скорректировать размер текста можно только по 4 градациям large -> xsmall, управлять отступами текста нельзя вообще. Есть некоторые вопросы к подобному юзабилити. А как же пиксель перфект?

Настройки добавления чартов чартов довольно просты и не требуют пояснений:

Почему именно “автовысота” не до конца понятно, почему тогда вообще не автомасштабирование, но допустим. 

Добавление фильтров, которые вовсе не фильтры, а “селекторы”, тоже простое и логичное:

А вот с расположением объектов какая-то оказия. Объекты липнут только к определенным областям, и, к примеру, расположить фильтры левее показателя “тотала” по записям у меня не вышло. Возможно чуть позже стоит поковырять сетку, чтобы хотя бы для себя понять причины такого поведения объектов. 

Собрав всё воедино, получаем следующую картину:

Резюме

Из этого лонгрида может сложиться впечатление, что меня не устроил DataLens или что я в нем не слишком-то разобрался. Это не так. Ребята из Яндекса даже сделали хорошую болталку в TG, посвященную этому продукту, и эксперты в ней довольно быстро решают тот или иной вопрос. Кроме тех, конечно, которые на данном этапе решить просто нельзя. 

Продукт хорошо подойдет для базовой аналитики. В нем можно создавать довольно сложные формулы, интересные визуализации - но не всегда это получается сделать логично, то есть так, как это годами делалось в аналогичных решениях. В то же время некоторая обрезанность ресурсов-источников вызывает просто недоумение: зачем мне мигрироваться в Яндекс.Облако только для того, чтобы даты стали датами? 

Возможности кастомизации визуала я пока также до конца не раскусил: их либо толком и нет, либо так мало, что и говорить об этом бессмысленно. Хотя так ли их много у Google Data Studio?!

Я надеюсь, что проект будет развиваться семимильными шагами, о нем будет узнавать все больше людей, а сам Яндекс будет прислушиваться к пользователям и внедрять всё то, чего так не хватает сейчас. Мне же удалось выполнить то, что я задумал - я получил результат, аналогичный сервису от Google. И местами это было даже проще - но только местами. 

Спасибо, если дочитали до этого момента. Следующая веха - ещё какой-нибудь импортозаместительный BI или нечто самописное на Python. В конце концов, мы всего лишь делаем инструменты для аналитиков. 

Комментарии (3)


  1. YAKOROLEVAZAMKA
    29.06.2022 14:06

    Спасибо за краткий разбор.

    Главным считаю перевод ДатаЛенс в бесплатный формат (год назад когда искал варианты BI-решений он был платным).

    Было бы интересно почитать про Apache Superset (установленный из докера) или другой бесплатный BI (но не про Metabase - в ней я разбираюсь :))

    PS. самописное на python это dash?


    1. expdxx Автор
      29.06.2022 15:57

      Спасибо!

      Даталенс и бесплатным стал и, насколько я понимаю, хорошо продвинулся в части функций. Если бы не откровенная продажа Клауда в качестве источника (я только часть вопросов рассмотрел) - было бы совсем хорошо для быстрых self-service отчетов.
      Про Суперсет на самом деле были мысли, да. Но надо хорошо изучить вопрос - имеет ли это вообще смысл в сегодняшних реалиях. Думаю, поработаю над этим!


      1. YAKOROLEVAZAMKA
        29.06.2022 16:08
        +1

        Суперсет хорош как self-hosted решение, для крупных компаний он, разумеется, не подойдет, но для стартапов и малых-средних компаний - почему бы и нет? К тому же он open source (при наличии навыков можно дорабатывать под свои нужды).

        Metabase тоже self-hosted, так же умеет из коробки в ssh (косо смотрим на Power BI где тикет висит уже 10+ лет), а кроме того она предоставляет возможность строить чарты на основе SQL-запросов что весьма удобно.

        Был ещё какой-то третий подобный бесплатный BI, но я забыл его название :(

        Имхо подобные продукты (open source + self-host) в нынешних реалиях как раз именно то, что нужно :) да и СБ никто не отменял - товарищи сильно не любят когда данные из внутреннего контура попадают в облако :)