Позднее Ctrl + ↑

Подтянуть client id к источнику трафика в Power Bi

Задача Требуется получить связанные данные из Яндекс метрики: источник трафика с client id.
Эта связка нужна для соединения таблиц выгрузки из CRM с Яндекс метрикок. Так мы поймем какие клиенты из какого источника пришли, а значит какой канал эффективный.

Для выгрузки из метрики используем коннектор Уварова PQYM

С метрики получаем данные:
— ym:s:TrafficSource — источниками трафика,
— ym:s:clientID — client id,
— ym:s:visits — количество визитов.

ym:s:clientID и ym:s:TrafficSource — это группировки и могут находится только в поле dimensions,согласно документации API Яндекс метрики

Делаем настройки коннектора, ym:s:visits — метрика, а ym:s:clientID и ym:s:TrafficSource — это группировки и могут находится только в поле dimensions, согласно документации API Яндекс метрики
Получили таблицу, которая соединяет client id и источник трафика

Объединение нескольких листов в гугл таблице

Достаточно часто на периоды или места разные листы в одной таблице.
При работе с такими таблицами, все листы нужно объединить.

Листы разделены по паркам: парк 1, 2, 3 и 4. Профи ру: помощь с выполнением тестового задания «помощник финансового менеджера»
Листы разделены по товарам: корс, мини, трансформер. Листы содержат агрегирующие строчки, которые нужно удалить перед анализом. Профи ру: помощь с анализом продаж

Алгоритм объединения

Добавляем столбец имя листа на листы которые объединяем

=ARRAYFORMULA(if(A2:A<>"";"Парк1";""))

На новом листе вставляем оглавление, или просто копируем оглавление

=QUERY('Парк 1'!A1:U1;"SELECT *")

Данные можно вставить через Query или Filter: иногда filter работает быстрее query

Вставляем данные через Query, вставляем все что есть, начиная со второй строчки. В первой строчке у нас наименование столбцов, оно нам не нужно

={query('Парк 1'!A2:U;"SELECT *");query('Парк 2'!A2:U;"SELECT *");query('Парк 3'!A2:U;"SELECT *");query('Парк 4'!A2:U;"SELECT *")}

Вставляем данные через Filter, дополнительно условие что в первой ячейке должны быть данные

={filter('Парк 1'!A2:U;'Парк 1'!A2:A<>"");filter('Парк 2'!A2:U;'Парк 2'!A2:A<>"");filter('Парк 3'!A2:U;'Парк 3'!A2:A<>"");filter('Парк 4'!A2:U;'Парк 4'!A2:A<>"")}

Курс «Датасаенс на коленке» — о работе в Google-таблицах

В 2022 году проходил курс Алексея Куличевского «Датасаенс на коленке» — о работе в Google-таблицах: учимся считать метрики, делать сквозную аналитику и когортный анализ, составлять интерактивные дешборды, моделировать юнит-экономику.

После прохождения курса, я написал Алексею:

Это было очень интересно и полезно.
В блоке про когорты, понимаешь что от того как посчитаешь зависит результат. Причём отклонение в небольшую сторону порой дает противоположный результат.
Блок про дешборды один из самых интересных, после него понимаешь как устроены связи в таблицах, что из чего можно получить.
Самый главный навык, который тренируешь на курсе — умение гуглить. Разбиваешь на маленькие части и гуглишь.

Алексей выложил видеокурс в свободный доступ на ютубе — 29 уроков.

Содержание курса

Урок 1. Google Sheets. Курс для маркетологов и продактов
Урок 2. Типы данных, работа с числами в Google Sheets
Урок 3. Адресация ячеек в Google Sheets
Урок 4. Работа с текстом в Google Sheets
Урок 5. Работа с логическими данными в Google Sheets
Урок 6. Работа с датами в Google Sheets
Урок 7. Сводные таблицы в Google Sheets
Урок 8. Сквозная аналитика в Google Sheets, принцип
Урок 9. Сквозная аналитика в Google Sheets, практика
Урок 10. Когортный анализ в Google Sheets, теория
Урок 11. Когортный анализ в Google Sheets, практика
Урок 12. Когортный анализ в Google Sheets, применение в маркетинге
Урок 14. Юнит-экономика в Google Sheets, теория
Урок 13. Когортный анализ в Google Sheets. Применение в других областях
Урок 15. Юнит-экономика в Google Sheets, практика
Урок 16. Моделирование юнит-экономики, часть 1
Урок 17. Моделирование юнит-экономики, часть 2
Урок 18. Создание дешбордов. Принцип и алгоритм
Урок 19. Дизайн дешбордов в Google Sheets
Урок 20. Архитектура дешборда в Google Sheets
Урок 21. Слой представления | Дешборды в Google Sheets
Урок 22. План-факт | Дешборды в Google Sheets
Урок 23. Макросы
Урок 24. Создаем собственные формулы с помощью Apps Script
Урок 25. Обрабатываем массивы данных с помощью Apps Script
Урок 26. Создаем собственные меню с помощью Apps Script
Урок 27. Бизнес-метрики
Урок 28. Путь пользователя, конверсии и воронки
Урок 29. Как понять, какие метрики измерять | Снижение уровня абстракции

У курса есть платная версия, в которой, помимо лекций еще есть десятки заданий и чат для их обсуждения.
Платная версия курса

Формат: год — номер недели

Номер недели можно считать не только с какого дня он начинается. Но и на какую неделю приходится первое января.

В Европе принят стандарт:

Система 2. Первой неделей года считается та, в которую попадает первый четверг в году. Ее порядковым номером будет 1. В основе этой системы лежит международный стандарт представления дат и времени (ISO 8601).

И тут начинается интересное: к какому году относить 1 января, когда нудно сделать формат: год-неделя.

Это видно в 23 году очень хорошо.

В гугл таблицах:

=ARRAYFORMULA(
  IF(
    (MONTH(A2:A) = 1) * (WEEKNUM(A2:A; 21) > 50);
    TEXT(YEAR(A2:A) - 1; "0000") & "-" & TEXT(WEEKNUM(A2:A; 21); "00");
    TEXT(YEAR(A2:A); "0000") & "-" & TEXT(WEEKNUM(A2:A; 21); "00")
  )
)

В PowerBI, DAX:

YEAR-WEEKNUM-2 =
VAR CurrentYear = YEAR('calendar'[date])
VAR IsSpecialDate =
    MONTH('calendar'[date]) = 1 &&
    WEEKNUM('calendar'[date], 21) > 50
RETURN
    FORMAT(
        IF(IsSpecialDate, CurrentYear - 1, CurrentYear),
        "0000"
    ) & "-" & FORMAT(WEEKNUM('calendar'[date], 21), "00")

Виртуальные машины стали inaccessible

После перезагрузки сервера VmWare ESxi некоторые виртуальные машины в статусе inaccessible или изолированные (virtual machine is inaccessible). Такие машины нельзя запустить и что-то с ними сделать.

Обычно это происходит, так как сетевое хранилище не успело загрузиться. Например, на iSCSI хранится файл виртуальной машины.

Проводим сканирование всех хранилищ, которые находятся на этом сервере.

Конфигурация сервера — Storage — Rescan All

Поиск пересечения столбца и строки через XLOOKUP

У нас есть большая двухмерная таблица расстояний между городами, раньше такие публиковались в картах.
Требуется составить формулу для поиска расстояния между городами, то есть пересечения столбца и стоки

Между Барнаулом и Владивостоком — 5945 км

Воспользуемся формулой XLOOKUP — возвращает значения из диапазона результатов, находящиеся в той же позиции, в которой было обнаружено совпадение в диапазоне поиска

Сначала одной функцией получаем массив значений для первого города, потом другой уже в этом массиве ищем значение, соответствующее второму городу.

Итоговая функция

=IFNA(XLOOKUP(C2;data!$A:$A;XLOOKUP(B2;data!$1:$1;data!$A$1:$GO));"")

Получившаяся таблица: Расстояние между городами России

Таблица расчета цены фулфилмента

Переделал таблицу для фулфилмента которой пользуются клиенты и сотрудники организации.

Фулфилмент — это организация которая занимается посредником между продавцом и маркетплейсом, оказывает услуги по хранению товара, сборке заказа и его доставке в маркетплейс.

Таблица — это дашборд с заказами и финансами

Задача. Сохранить текущую логику работы таблицы, автоматизировать расчеты.

Этапы работы:

  • Созвон для понимания задачи,
  • Работа над таблицей,
  • Созвод для презентации работы,
  • Получение замечаний,
  • Сдача работы.
Бесцветные ячейки заполняются автоматически мы их не трогаем и не заполняем. Оранжевые ячейки заполняет клиент. Голубые ячейки заполняет фулфилмент. Обязательно зафиксировали это в таблице.
Каждый заказ — отдельный лист в таблице
В товарах используют изображение, чтобы корректно работал vlookup, напоминаем, что для вставки изображения в ячейку: курсор ставим на ячейку, Меню — вставка — Изображение — Вставить изображение в ячейку
Лист «Товары» — база данных товаров данного клиента. Здесь много оранжевых ячеек, значит заполняются они клиентом вручную. Материал упаковки выбирается из рубрикатора, в который можно добавлять новые значения.
Лист «справочник» позволяет поменять основные значения, которые влияют на стоимость
Собираем готовую таблицу, используя ArrayFormula, VLOOKUP, IFS. Часть ячеек скрыта, так как содержит дополнительную информацию, которая для оперативной работы не нужна.
Формулы не перегружены, чтобы сотрудники фулфилмента могли сами поправить часть данных.
Если поставить галочку «считаем приемку наборами» итоговая стоимость поменяется из-за изменения подсчета
В первой строке выводится основная информация о заказе: вес, объем, допы, стоимость предварительная и фактическая

Если вам нужна помощь с гугл таблицами — @fossko.

Макрос автоматического сохранения csv из экселя

Есть файл состоящий из одного листа ID, нужно автоматически разделить количество строк по 10 и сохранить каждый диапазон в csv файл

Cтолбец с ID, которые нужно сохранить в отдельные файлы
Делаем через макросы Разработчик — Visual basic.
Если вкладки «Разработчик» нет, ее нужно включить через настройки: Параметры — Настроить ленту — Разработчик.
Sub SplitAndSave()
    Dim SourceSheet As Worksheet
    Dim NewSheet As Worksheet
    Dim LastRow As Long
    Dim Group As Long
    Dim CurrentRow As Long
    Dim Path As String
    Dim DateTimeStr As String

    ' Укажите имя вашего исходного листа
    Set SourceSheet = ThisWorkbook.Sheets("Лист1")

    ' Укажите путь для сохранения файлов
    Path = "E:\work\csv\"

    ' Определите последнюю строку в столбце A
    LastRow = SourceSheet.Cells(SourceSheet.Rows.Count, "A").End(xlUp).Row

    ' Инциализируем переменные
    CurrentRow = 2 ' Начинаем с 2, так как, вероятно, у вас есть заголовок
    Group = 1

    Do While CurrentRow <= LastRow
        ' Создаем новый лист для текущей группы
        Set NewSheet = Sheets.Add(After:=Sheets(Sheets.Count))
        NewSheet.Name = "Group" & Group

      ' Копируем данные текущей группы на новый лист
        SourceSheet.Rows(CurrentRow & ":" & IIf(CurrentRow + 9 <= LastRow, CurrentRow + 9, LastRow)).Copy Destination:=NewSheet.Rows(1)
        
        ' Создаем переменную с текущей датой в формате год-месяц-день-часы-минуты
        DateTimeStr = Format(Now, "yyyy-mm-dd-hh-nn")
        
    ' Сохраняем новый лист в виде CSV файла с меткой времени
        NewSheet.SaveAs Path & DateTimeStr & "_" & "Group" & Group & ".csv", xlCSV

     ' Удаляем новый лист, если необходимо
        Application.DisplayAlerts = False
        NewSheet.Delete
        Application.DisplayAlerts = True

        ' Переходим к следующей группе
        CurrentRow = CurrentRow + 10
        Group = Group + 1
    Loop
End Sub
В папку csv загрузились разделенные файлы

Добавим разбиение с сохранением заголовка из ячейки A1.
Разбивать будем по RowsPerGroup равном 1400 значений

Sub SplitAndSaveWithHeaderVariable()
    Dim SourceSheet As Worksheet
    Dim NewSheet As Worksheet
    Dim LastRow As Long
    Dim Group As Long
    Dim CurrentRow As Long
    Dim Path As String
    Dim DateTimeStr As String
    Dim HeaderVariable As String
    Dim RowsPerGroup As Long

    ' Укажите имя вашего исходного листа
    Set SourceSheet = ThisWorkbook.Sheets("Лист1")

    ' Укажите путь для сохранения файлов
    Path = "E:\work\csv\"

   ' Определите последнюю строку в столбце A
    LastRow = SourceSheet.Cells(SourceSheet.Rows.Count, "A").End(xlUp).Row

    ' Инициализируйте переменные
    CurrentRow = 2 ' Начинаем с 2, предполагая, что у вас есть заголовок
    Group = 1

    ' Установите значение переменной заголовка из ячейки A1
    HeaderVariable = SourceSheet.Cells(1, 1).Value

    ' Установите количество строк в группе
    RowsPerGroup = 1400

    Do While CurrentRow <= LastRow
       ' Создаем новый лист для текущей группы
        Set NewSheet = Sheets.Add(After:=Sheets(Sheets.Count))
        NewSheet.Name = "Group" & Group

       ' Вставляем переменную заголовка в первую ячейку нового листа
        NewSheet.Cells(1, 1).Value = HeaderVariable

        ' Копируем данные текущей группы на новый лист
        SourceSheet.Rows(CurrentRow & ":" & IIf(CurrentRow + RowsPerGroup - 1 <= LastRow, CurrentRow + RowsPerGroup - 1, LastRow)).Copy Destination:=NewSheet.Rows(2)

       ' Получаем текущую дату и время в указанном формате
        DateTimeStr = Format(Now, "yyyy-mm-dd-hh-nn")

       ' Сохраняем новый лист в виде файла CSV с датой и временем в имени файла
        NewSheet.SaveAs Path & DateTimeStr & "_" & "Group" & Group & ".csv", xlCSV

        ' Удаляем новый лист, если необходимо
        Application.DisplayAlerts = False
        NewSheet.Delete
        Application.DisplayAlerts = True

       ' Переходим к следующей группе
        CurrentRow = CurrentRow + RowsPerGroup
        Group = Group + 1
    Loop
End Sub

Парсим телеграм каналы агентств интернет-маркетинга

В гугл таблицах автоматически получим ссылки на телеграм каналы интернет-агентств.

Предыстория .У Павела Злобина вышла статья «Топ телеграм каналов про маркетинг» в которой описывает как можно получить телеграм каналы агентств.

В рейтинге рунета есть список топ-100 агентств, из списка мы можем получить название и ссылку на страницу о агентстве

Наименование агенства

=IMPORTXML(A1;"//table[@id='rating_table_id']/tbody/tr/td/div/a")

Ссылка на страницу

=IMPORTXML(A1;"//table[@id='rating_table_id']/tbody/tr/td/div/a/@href")
На подробной странице агентства может быть ссылка на телеграм и ВК, получим их

Ссылка на телеграм

=IFNA(IMPORTXML("https://ratingruneta.ru"&B4;"//a[@class='_1OOlgax2iF telegram']//@href");"")

Ссылка на ВК

=IFNA(IMPORTXML("https://ratingruneta.ru"&B4;"//a[@class='_1OOlgax2iF vkontakte']//@href");"")
Протягиваем формулы, и получаем готовую страницу

Таким же образом можно получить информацию о других рейтингах.

Ссылка на таблицу

Ранее Ctrl + ↓