И/ТОП.03 · ТЕМА 08CSV → формулы → новая выгрузка
01 / От заявок к CSVИСХОДНИК 264 · 1 / 100

Заявки из темы 7 уже лежат в таблице

На прошлом занятии собрана цепочка:

СХЕМА ТЕМЫ 7
UTM
↓
сайт на Vercel
↓
форма
├→ GA4 → generate_lead
└→ Apps Script → Google Sheets

В листе leads появились строки с полями request_id, created_at, name, email, direction, utm_source, utm_medium, utm_campaign и status.

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

01 / От заявок к CSVИСХОДНИК 265 · 2 / 100

Пять записей одного источника

В столбце источника встречаются значения:

ВАРИАНТЫ ЗАПИСИ
Telegram
 telegram
TELEGRAM
tg
 Telegram

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

Цель подготовки — привести все варианты к одному значению telegram.

01 / От заявок к CSVИСХОДНИК 266 · 3 / 100

Ручное исправление значений

Каждое значение можно исправить руками: удалить пробелы, поменять регистр, разделить столбец, заменить сокращения.

Для пяти строк это несколько минут. В выгрузке на 10 000 строк ручная правка занимает часы. Когда приходит новая выгрузка, все исправления повторяются заново, а пропущенную ячейку можно найти только повторным просмотром всей таблицы.

01 / От заявок к CSVИСХОДНИК 267 · 4 / 100

Правила обработки данных

  1. 01Источник
  2. 02Правила
  3. 03Результат
01 / От заявок к CSVИСХОДНИК 268 · 5 / 100

Формулы как правила подготовки данных

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

В этой теме таблица состоит из двух листов:

  • лист source хранит данные из CSV в том виде, в каком они пришли
  • лист leads_clean хранит формулы, которые берут значения из source и очищают их
  • Функция ARRAYFORMULA позволяет записать правило один раз для всего столбца: формула в ячейке второй строки заполняет все строки ниже
01 / От заявок к CSVИСХОДНИК 269 · 6 / 100

Лист source не редактируется

source

Копия CSV. Значения не исправляются вручную.

leads_clean

Формулы берут значения из source и очищают их.

Результат

Значения, которые формулы выводят на лист leads_clean.

01 / От заявок к CSVИСХОДНИК 270 · 7 / 100

Три этапа подготовки данных

Extract · получить

Импорт CSV на лист source.

Transform · преобразовать

Формулы листа leads_clean очищают значения.

Load · выдать

Лист leads_clean — готовая таблица для анализа.

01 / От заявок к CSVИСХОДНИК 271 · 8 / 100

Порядок работы в этой теме

  1. 01CSV
  2. 02Импорт на source
  3. 03Лист leads_clean
  4. 04Дата и #VALUE!
  5. 05СЖПРОБЕЛЫ / ПЕЧСИМВ
  6. 06SPLIT / СТРОЧН
  7. 07tg → telegram
  8. 08v2 → повторный импорт
01 / От заявок к CSVИСХОДНИК 272 · 9 / 100

Файл с намеренно испорченными значениями

Apps Script из темы 7 записывал в таблицу аккуратные строки. На них не видно, как работают правила очистки.

Поэтому для практики подготовлен файл leads_dirty.csv. В нём те же заявки, но с типичными ошибками ручного ввода и выгрузки.

01 / От заявок к CSVДОПОЛНЕНИЕ 272a · 10 / 100

Как выгрузить заявки из темы 7

Google SheetsЛист leadsФайлСкачатьCSV
  • Откройте учебную таблицу темы 7 и выберите лист leads.
  • Файл → Скачать → Формат CSV (.csv).
  • Файл сохранится в папку «Загрузки» с именем «GA4 Analytics Lab — Leads - leads.csv». Рабочую таблицу не меняйте.
272a-shot.png · Текущий лист и пункт CSV.
01 / От заявок к CSVДОПОЛНЕНИЕ 272b · 11 / 100

Учебная копия отличается от выгрузки

В теме 7

9 полей, отдельные utm_source и utm_medium, полный UUID.

В практике 8

8 входных полей: source_medium объединяет source и medium через |. ID сокращены для чтения.

01 / От заявок к CSVИСХОДНИК 273 · 12 / 100

Файлы для занятия

ПАПКА ПРАКТИКИ
lesson_data_cleaning/
├── data/
│   ├── leads_dirty.csv
│   ├── leads_dirty_v1_backup.csv
│   └── leads_dirty_v2.csv
├── result/
└── README.md

В папку result в конце занятия сохраняется очищенный результат в формате CSV.

01 / От заявок к CSVДОПОЛНЕНИЕ 273a · 13 / 100

Распакуйте папку практики

Скачать комплект практики ↓
  • Распакуйте архив целиком в постоянную папку.
  • В data лежат leads_dirty.csv, резервная копия v1 и вторая версия v2.
  • В result в конце занятия сохраняется очищенный CSV.
273a-shot.png
01 / От заявок к CSVИСХОДНИК 274 · 14 / 100

Содержимое leads_dirty.csv

CSV
request_id,created_at,name,email,direction,source_medium,utm_campaign,status
REQ-001,2026-09-23 12:40:00," Иван  Тестов ",student1@example.com,backend," Telegram | Social ","LESSON07","NEW"
REQ-002,2026-09-23 12:44:00,"Анна ",student2@example.com,data,"vk|social","lesson07","new"
REQ-003,wrong_date," Петр",student3@example.com,frontend," telegram|SOCIAL ","Lesson07","done"
REQ-004,2026-09-23 13:01:00,"Мария",student4@example.com,backend,"direct|none","not_set"," new "
REQ-005,2026-09-23 13:05:00,"Олег",student5@example.com,data,"TG|social","LESSON07","DONE"

Откройте файл в текстовом редакторе: правый щелчок по leads_dirty.csv → Открыть с помощью → TextEdit (в Windows — Блокнот). В Excel и Google Таблицах кавычки и часть пробелов при открытии не видны, поэтому для просмотра они не подходят.

Первая строка — заголовки восьми столбцов. Ниже пять заявок. Значения с пробелами по краям записаны в кавычках: так CSV сохраняет эти пробелы.

Файл только просматривается. Закройте его без сохранения.

274-shot.png
01 / От заявок к CSVИСХОДНИК 275 · 15 / 100

Какие ошибки видны до импорта

Перед импортом ошибки находят глазами:

  • лишние пробелы по краям и двойной пробел внутри имени
  • разный регистр: NEW, new, DONE
  • TG вместо telegram
  • source и medium записаны в одном поле через |
  • wrong_date вместо даты
  • LESSON07, Lesson07 и lesson07 в названии кампании
275-shot.png
01 / От заявок к CSVИСХОДНИК 276 · 16 / 100

Какая таблица нужна после очистки

После преобразования остаются девять столбцов:

9 СТОЛБЦОВ РЕЗУЛЬТАТА
request_id  created_at  name  email  direction
utm_source  utm_medium  utm_campaign  status

Первая заявка после очистки:

REQ-001
2026-09-23 12:40:00 · Иван Тестов · student1@example.com · backend
telegram · social · lesson07 · new

Вместо ошибочной даты в результате остаётся ошибка. Придуманную дату не подставляют.

01 / От заявок к CSVИСХОДНИК 277 · 17 / 100

Сначала описывается результат

До первой формулы нужно знать:

  • какие столбцы остаются в результате
  • как они называются
  • какой тип у каждого столбца
  • какие значения допустимы
  • Такое описание называется контрактом данных. По нему выбираются формулы для каждого столбца и проверяется готовый результат
01 / От заявок к CSVДОПОЛНЕНИЕ 277a · 18 / 100

Где создаётся таблица

  • Откройте Google Таблицы в браузере под своим аккаунтом Google.
  • Нажмите «Пустая таблица» или плитку с плюсом.
  • Работаем в новой таблице. Таблицу заявок из темы 7 не меняем.
277a-shot.png
02 / Импорт на лист sourceИСХОДНИК 278 · 19 / 100

Шаг 1. Создать таблицу leads_cleaning

В новой пустой таблице нажмите на название «Новая таблица» в левом верхнем углу и введите:

НАЗВАНИЕ ТАБЛИЦЫ
leads_cleaning

Таблица сохраняется на Google Диске автоматически.

278-shot.png
02 / Импорт на лист sourceИСХОДНИК 279 · 20 / 100

Шаг 2. Файл → Импортировать

Откройте меню Файл и выберите Импортировать.

Импорт кладёт данные CSV на лист этой же таблицы. Формулы, которые появятся на соседнем листе, смогут ссылаться на них по имени листа.

279-shot.png · Пункт Импортировать.
02 / Импорт на лист sourceИСХОДНИК 280 · 21 / 100

Шаг 3. Вкладка «Добавить»

Окно импорта открывается на вкладке «Мой диск». CSV лежит на компьютере, поэтому перейдите на вкладку Добавить и нажмите Обзор.

280-shot.png
02 / Импорт на лист sourceИСХОДНИК 281 · 22 / 100

Шаг 4. Выбрать leads_dirty.csv

В окне выбора файла откройте распакованную папку и выберите:

ФАЙЛ
lesson_data_cleaning/data/leads_dirty.csv

Окно выбора файла — системное: в macOS это окно Finder, в Windows — окно Проводника. Перейдите в папку data, выделите leads_dirty.csv и нажмите Открыть.

После загрузки открывается окно «Импорт файла». В строке «Файл» должно стоять имя leads_dirty.csv.

281-shot.png · Имя файла.
02 / Импорт на лист sourceИСХОДНИК 282 · 23 / 100

Шаг 5. Заменить текущий лист

В списке Выбрать цель для импорта выберите Заменить текущий лист.

Данные лягут на открытый сейчас лист, в новой таблице это «Лист1». Остальные пункты списка создают отдельную таблицу, добавляют новые листы, заменяют всю таблицу или дописывают строки к уже имеющимся.

282-shot.png · Заменить текущий лист.
02 / Импорт на лист sourceИСХОДНИК 283 · 24 / 100

Если вместо кириллицы нечитаемые символы

Google Таблицы читают CSV в кодировке UTF-8. Учебные файлы сохранены в UTF-8, и имена Иван, Мария, Петр читаются без искажений.

Если вместо букв видны нечитаемые символы, файл был сохранён в другой кодировке. Откройте его в текстовом редакторе, сохраните в UTF-8 и повторите импорт.

02 / Импорт на лист sourceИСХОДНИК 284 · 25 / 100

Шаг 6. Разделитель и преобразование текста

В списке Тип разделителя выберите Запятая.

Снимите флажок Преобразовывать текст в числа, даты и формулы. Тогда все значения лягут на лист как текст, в том виде, в каком они записаны в CSV. Тип даты позже задаётся формулой на листе leads_clean.

Нажмите Импортировать данные.

284-shot.png · Снятый флажок.
02 / Импорт на лист sourceИСХОДНИК 285 · 26 / 100

Шаг 7. Проверить импорт

На листе появились 8 заголовков и 5 заявок.

Пробелы сохранены: выделите ячейку C2, в строке формул видно « Иван Тестов » с пробелами по краям. Значения wrong_date, TG и NEW тоже на месте.

285-shot.png
02 / Импорт на лист sourceИСХОДНИК 286 · 27 / 100

Шаг 8. Переименовать лист в source

Дважды щёлкните по ярлыку «Лист1» внизу окна и введите:

ИМЯ ЛИСТА
source

Формулы будут ссылаться на этот лист по имени, например source!A2:A.

286-shot.png
02 / Импорт на лист sourceИСХОДНИК 287 · 28 / 100

Шаг 9. Добавить лист leads_clean

Нажмите + слева от ярлыков, чтобы добавить лист. Переименуйте его в leads_clean.

В строку 1 введите девять заголовков из контракта, по одному в ячейку от A1 до I1. К следующей ячейке переходите клавишей Tab:

ЗАГОЛОВКИ A1:I1
request_id  created_at  name  email  direction  utm_source  utm_medium  utm_campaign  status
287-shot.png
03 / Лист правилИСХОДНИК 288 · 29 / 100

Шаг 10. Формула для request_id

Выделите ячейку A2 листа leads_clean и введите:

ФОРМУЛА A2
=ARRAYFORMULA(ЕСЛИ(source!A2:A="";;СЖПРОБЕЛЫ(source!A2:A)))

source!A2:A — все ячейки столбца A листа source, начиная со второй строки.

СЖПРОБЕЛЫ убирает лишние пробелы.

ЕСЛИ(source!A2:A="";;…) оставляет ячейку пустой, если в source строка пустая. Между двумя точками с запятой ничего нет: это пустой результат.

ARRAYFORMULA применяет правило ко всем строкам сразу. Столбец A заполнился до пятой заявки, хотя формула записана только в A2.

288-shot.png
03 / Лист правилИСХОДНИК 289 · 30 / 100

Как устроен лист leads_clean

Во второй строке каждого столбца стоит одна формула. Она описывает правило для всего столбца:

ПРАВИЛА ПО СТОЛБЦАМ
A request_id    СЖПРОБЕЛЫ
B created_at    ЗНАЧЕН → дата и время
C name          СЖПРОБЕЛЫ + ПЕЧСИМВ
D email         СЖПРОБЕЛЫ + ПЕЧСИМВ
E direction     СЖПРОБЕЛЫ + ПЕЧСИМВ
F:G utm_…       SPLIT по | + СЖПРОБЕЛЫ + СТРОЧН + замена tg
H utm_campaign  СЖПРОБЕЛЫ + ПЕЧСИМВ + СТРОЧН
I status        СЖПРОБЕЛЫ + ПЕЧСИМВ + СТРОЧН

Строки ниже второй заполняются сами. Вручную в них ничего не вводится.

03 / Лист правилИСХОДНИК 290 · 31 / 100

Формула хранится только во второй строке

Выделите ячейку A4. В строке формул видно только значение REQ-003. Его рассчитала формула из A2.

Чтобы изменить правило для всего столбца, исправляют одну формулу в A2.

290-shot.png
03 / Лист правилИСХОДНИК 291 · 32 / 100

Что означает source!A2:A

Ссылка source!A2:A состоит из имени листа, восклицательного знака и диапазона.

Формулы находят данные по буквам столбцов. Если в source поменять порядок столбцов, формула возьмёт значения из другого поля. К этому свойству относится проверка структуры в конце темы.

03 / Лист правилИСХОДНИК 292 · 33 / 100

Разделитель аргументов

В таблицах с региональными настройками «Россия» аргументы функций разделяются точкой с запятой, а названия функций показываются по-русски: СЖПРОБЕЛЫ, ЕСЛИ, СТРОЧН.

Если таблица подчёркивает формулу как ошибочную, откройте Файл → Настройки и проверьте поле Региональные настройки. Для формул этой темы нужно значение «Россия».

Флажок Всегда использовать названия функций на английском языке оставьте снятым: тогда формулы на экране совпадут с формулами на слайдах.

292-shot.png
04 / Типы и ошибкиИСХОДНИК 293 · 34 / 100

Шаг 11. Что означает тип значения

Google Таблицы различают текст, числа, даты и время.

Текст прижимается к левому краю ячейки, числа и даты — к правому.

На листе source все значения лежат слева: при импорте мы отключили преобразование, и даже 2026-09-23 12:40:00 хранится как текст.

Откройте лист source и выделите ячейку B2. В строке формул перед значением стоит апостроф: '2026-09-23 12:40:00. Так таблица помечает текст, который похож на дату.

293-shot.png
04 / Типы и ошибкиИСХОДНИК 294 · 35 / 100

Строка 2026-09-23 ещё не дата

Пока created_at хранится как текст, значение состоит только из символов. Такие значения нельзя сравнить по времени, отсортировать по дате или вычесть одну дату из другой.

Когда значение становится датой и временем, таблица хранит его как число: целая часть — день, дробная — время суток.

04 / Типы и ошибкиИСХОДНИК 295 · 36 / 100

Тип назначается явным правилом

Автоматическое преобразование при импорте угадывает тип по виду значения. Оно может убрать ведущие нули в идентификаторе или прочитать дату в формате другой страны, например поменять местами день и месяц.

Поэтому тип created_at задаётся формулой на листе leads_clean. Правило видно в ячейке B2, и его можно проверить.

04 / Типы и ошибкиИСХОДНИК 296 · 37 / 100

Какой тип у каждого столбца

КОНТРАКТ ТИПОВ
request_id     текст
created_at     дата и время
name           текст
email          текст
direction      текст
utm_source     текст
utm_medium     текст
utm_campaign   текст
status         текст

request_id остаётся текстом: это метка заявки, считать с ней не нужно.

04 / Типы и ошибкиИСХОДНИК 297 · 38 / 100

Шаг 12. Текст → число

Вернитесь на лист leads_clean и в ячейку B2 введите:

ФОРМУЛА B2
=ARRAYFORMULA(ЕСЛИ(source!B2:B="";;ЗНАЧЕН(СЖПРОБЕЛЫ(source!B2:B))))

ЗНАЧЕН превращает текст 2026-09-23 12:40:00 в число. Пока у ячеек нет формата даты, видны числа вида 46288,52778: 46288 — день, 0,52778 — доля суток.

297-shot.png
04 / Типы и ошибкиИСХОДНИК 298 · 39 / 100

#VALUE! в строке REQ-003

Строку wrong_date нельзя превратить в число. В ячейке B4 появилась ошибка:

ОШИБКА
#VALUE!

Остальные четыре даты преобразованы. Ошибка в одной ячейке показывает, какая строка нарушает контракт.

298-shot.png
04 / Типы и ошибкиИСХОДНИК 299 · 40 / 100

Причина ошибки — значение в источнике

Правило требует, чтобы в created_at стояли дата и время. В источнике записано:

ЗНАЧЕНИЕ В SOURCE
wrong_date

Ошибка показывает, что значение не соответствует контракту. Исправлять нужно источник или правило приёма данных. Формула остаётся прежней.

04 / Типы и ошибкиИСХОДНИК 300 · 41 / 100

Шаг 13. Прочитать сообщение об ошибке

Наведите указатель на ячейку с #VALUE!. Красный треугольник в углу означает, что у ячейки есть сообщение.

В подсказке написано: «Параметр wrong_date в функции VALUE невозможно интерпретировать как число». VALUE — английское название функции ЗНАЧЕН. Сообщение называет функцию и значение, которое она не смогла преобразовать.

В строке формул та же ошибка показана по-русски: #ЗНАЧ!.

300-shot.png
04 / Типы и ошибкиИСХОДНИК 301 · 42 / 100

Строка REQ-003 остаётся в результате

Ошибку можно скрыть функцией ЕСЛИОШИБКА, подставив пустую ячейку. Тогда в отчёте окажется заявка без даты, и по отчёту нельзя будет определить, что в источнике было неверное значение.

В этой теме ошибка остаётся видимой: по ней находят строку, которую нужно исправить в источнике.

04 / Типы и ошибкиИСХОДНИК 302 · 43 / 100

Шаг 14. Формат → Числа → Дата и время

Выделите столбец B, щёлкнув по его букве. Откройте Формат → Числа → Дата и время.

Числа 46288,52778 превращаются в 23.09.2026 12:40:00. Значение в ячейке то же, меняется только способ показа.

302-shot.png · Дата и время.
05 / Очистка текстаИСХОДНИК 303 · 44 / 100

Шаг 15. СЖПРОБЕЛЫ для name

В ячейку C2 листа leads_clean введите:

ФОРМУЛА C2
=ARRAYFORMULA(ЕСЛИ(source!C2:C="";;СЖПРОБЕЛЫ(ПЕЧСИМВ(source!C2:C))))

СЖПРОБЕЛЫ в Google Таблицах удаляет пробелы по краям и заменяет несколько пробелов подряд внутри строки одним:

РЕЗУЛЬТАТ
« Иван  Тестов » → «Иван Тестов»

Пробел между именем и фамилией остаётся.

303-shot.png
05 / Очистка текстаИСХОДНИК 304 · 45 / 100

Удаление непечатаемых символов

ПЕЧСИМВ удаляет управляющие символы: перенос строки внутри значения, табуляцию и другие коды, которые не видны на экране. Они попадают в данные при копировании из писем, сайтов и других программ.

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

Для email и direction нужны те же функции. В ячейки D2 и E2 введите:

ФОРМУЛЫ D2 И E2
=ARRAYFORMULA(ЕСЛИ(source!D2:D="";;СЖПРОБЕЛЫ(ПЕЧСИМВ(source!D2:D))))
=ARRAYFORMULA(ЕСЛИ(source!E2:E="";;СЖПРОБЕЛЫ(ПЕЧСИМВ(source!E2:E))))
304-shot.png
05 / Очистка текстаИСХОДНИК 305 · 46 / 100

Разница между двумя функциями

СЖПРОБЕЛЫ работает с обычными пробелами: убирает их по краям и сжимает повторы внутри.

ПЕЧСИМВ удаляет невидимые управляющие символы, обычные пробелы остаются.

Поэтому в формулах используются обе функции: СЖПРОБЕЛЫ(ПЕЧСИМВ(…)). Сначала выполняется внутренняя функция, затем внешняя.

06 / Структура и категорииИСХОДНИК 306 · 47 / 100

Два значения в одном столбце

В файле источник и канал записаны в одном поле:

SOURCE_MEDIUM
Telegram | Social 
vk|social
 telegram|SOCIAL 
direct|none
TG|social

По контракту нужны два отдельных поля: utm_source и utm_medium.

06 / Структура и категорииИСХОДНИК 307 · 48 / 100

Шаг 16. Разделить по символу |

В ячейку F2 введите:

ФОРМУЛА F2
=ARRAYFORMULA(ЕСЛИ(source!F2:F="";;SPLIT(source!F2:F;"|")))

SPLIT делит текст по указанному символу. Из « Telegram | Social » получаются два значения: « Telegram » и « Social ».

307-shot.png
06 / Структура и категорииИСХОДНИК 308 · 49 / 100

Ячейка G2 должна оставаться пустой

SPLIT возвращает два значения, поэтому результат формулы из F2 занимает столбцы F и G.

Если в G2 или ниже что-то ввести, формула не сможет вывести результат и покажет ошибку #REF!. Столбец G заполняется формулой из F2, своей формулы у него нет.

06 / Структура и категорииИСХОДНИК 309 · 50 / 100

utm_source и utm_medium

В столбце F появился источник, в столбце G — канал. Заголовки из строки 1 уже подходят: utm_source и utm_medium.

Пробелы по краям и разный регистр пока остались: « Telegram », « Social », SOCIAL.

309-shot.png
06 / Структура и категорииИСХОДНИК 310 · 51 / 100

Шаг 17. СЖПРОБЕЛЫ для UTM

Измените формулу в F2, обернув SPLIT в СЖПРОБЕЛЫ:

ФОРМУЛА F2
=ARRAYFORMULA(ЕСЛИ(source!F2:F="";;СЖПРОБЕЛЫ(SPLIT(source!F2:F;"|"))))

Одна функция обрабатывает оба столбца, потому что SPLIT передаёт ей оба значения.

310-shot.png
06 / Структура и категорииИСХОДНИК 311 · 52 / 100

Шаг 18. Формулы для utm_campaign и status

В ячейки H2 и I2 введите:

ФОРМУЛЫ H2 И I2
=ARRAYFORMULA(ЕСЛИ(source!G2:G="";;СЖПРОБЕЛЫ(ПЕЧСИМВ(source!G2:G))))
=ARRAYFORMULA(ЕСЛИ(source!H2:H="";;СЖПРОБЕЛЫ(ПЕЧСИМВ(source!H2:H))))

Буквы сдвинулись: utm_campaign в source стоит в столбце G, а в leads_clean — в H, потому что source_medium превратился в два столбца.

311-shot.png
06 / Структура и категорииИСХОДНИК 312 · 53 / 100

Шаг 19. СТРОЧН

СТРОЧН переводит все буквы в нижний регистр. Добавьте её в формулы трёх ячеек:

ФОРМУЛЫ F2, H2, I2
=ARRAYFORMULA(ЕСЛИ(source!F2:F="";;СТРОЧН(СЖПРОБЕЛЫ(SPLIT(source!F2:F;"|")))))
=ARRAYFORMULA(ЕСЛИ(source!G2:G="";;СТРОЧН(СЖПРОБЕЛЫ(ПЕЧСИМВ(source!G2:G)))))
=ARRAYFORMULA(ЕСЛИ(source!H2:H="";;СТРОЧН(СЖПРОБЕЛЫ(ПЕЧСИМВ(source!H2:H)))))

Получаем: Telegram → telegram, SOCIAL → social, LESSON07 → lesson07, NEW → new.

Имя и email в нижний регистр не переводятся.

312-shot.png
06 / Структура и категорииИСХОДНИК 313 · 54 / 100

Telegram и telegram — две категории

При подсчёте заявок таблица сравнивает значения посимвольно. Telegram, telegram и TELEGRAM дают три строки в сводной таблице.

После СТРОЧН остаётся одна категория telegram.

06 / Структура и категорииИСХОДНИК 314 · 55 / 100

Функции выполняются изнутри наружу

В формуле СТРОЧН(СЖПРОБЕЛЫ(SPLIT(…))) порядок выполнения такой:

ПОРЯДОК
SPLIT      « Telegram | Social » → « Telegram », « Social »
СЖПРОБЕЛЫ  « Telegram » → «Telegram»
СТРОЧН     «Telegram» → «telegram»

Каждая внешняя функция получает результат внутренней.

06 / Структура и категорииИСХОДНИК 315 · 56 / 100

СТРОЧН не заменяет сокращения

После СТРОЧН значение TG стало tg. По контракту источник должен называться telegram.

СТРОЧН меняет только регистр букв, поэтому для tg нужно отдельное правило замены.

06 / Структура и категорииИСХОДНИК 316 · 57 / 100

Шаг 20. Точная замена значения

Измените формулу в F2:

ФОРМУЛА F2
=ARRAYFORMULA(ЕСЛИ(source!F2:F="";;LET(v;СТРОЧН(СЖПРОБЕЛЫ(SPLIT(source!F2:F;"|")));ЕСЛИ(v="tg";"telegram";v))))

LET(v; …) даёт промежуточному результату имя v, чтобы не писать длинное выражение дважды.

ЕСЛИ(v="tg";"telegram";v) заменяет значение, только когда ячейка целиком равна tg. Значения вроде tgbot или instagram не меняются.

316-shot.png · ЕСЛИ(v="tg";"telegram";v).
06 / Структура и категорииИСХОДНИК 317 · 58 / 100

В source по-прежнему записано TG

Формула не меняет лист source. В ячейке source!F6 так и осталось TG|social.

Правило tg → telegram хранится в формуле и применяется каждый раз, когда таблица пересчитывает leads_clean.

06 / Структура и категорииИСХОДНИК 318 · 59 / 100

Шаг 21. Данные → Создать фильтр

Выделите любую ячейку листа leads_clean и выберите Данные → Создать фильтр.

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

318-shot.png
06 / Структура и категорииИСХОДНИК 319 · 60 / 100

Шаг 22. Список значений статуса

Нажмите значок фильтра в заголовке status. В списке должны остаться только два значения:

STATUS
done
new

Вместо NEW, « new » и DONE получились два значения. Закройте список кнопкой Отмена, ничего не снимая.

319-shot.png
06 / Структура и категорииДОПОЛНЕНИЕ 319a · 61 / 100

Уберите фильтр

ДанныеУдалить фильтр
  • После проверки фильтр больше не нужен.
  • Откройте меню Данные и выберите Удалить фильтр.
  • Значки фильтра в заголовках пропадут, все строки останутся на месте.
319a-shot.png · Удалить фильтр.
06 / Структура и категорииИСХОДНИК 320 · 62 / 100

Замена только по бизнес-правилу

Если в status появится finished, unknown или ???, автоматически превращать их в done нельзя.

Замена добавляется только тогда, когда есть утверждённое правило: например, отдел продаж подтвердил, что finished означает done. Остальные неизвестные значения нужно показать и разобрать.

06 / Структура и категорииИСХОДНИК 321 · 63 / 100

Замена выполняется после очистки

Замена tg → telegram стоит после СЖПРОБЕЛЫ и СТРОЧН. К моменту замены все варианты TG, tg, « Tg » и tG уже превратились в tg.

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

06 / Структура и категорииИСХОДНИК 322 · 64 / 100

Формулы листа leads_clean

ВТОРАЯ СТРОКА LEADS_CLEAN
A2  СЖПРОБЕЛЫ(source!A2:A)
B2  ЗНАЧЕН(СЖПРОБЕЛЫ(source!B2:B))   формат: дата и время
C2  СЖПРОБЕЛЫ(ПЕЧСИМВ(source!C2:C))
D2  СЖПРОБЕЛЫ(ПЕЧСИМВ(source!D2:D))
E2  СЖПРОБЕЛЫ(ПЕЧСИМВ(source!E2:E))
F2  SPLIT → СЖПРОБЕЛЫ → СТРОЧН → tg = telegram   (заполняет F и G)
H2  СТРОЧН(СЖПРОБЕЛЫ(ПЕЧСИМВ(source!G2:G)))
I2  СТРОЧН(СЖПРОБЕЛЫ(ПЕЧСИМВ(source!H2:H)))

Каждая формула обёрнута в ARRAYFORMULA(ЕСЛИ(…="";;…)). Восемь формул описывают обработку любого количества строк.

07 / Проверка результатаИСХОДНИК 323 · 65 / 100

Режим показа формул

Обычно в ячейках видны результаты формул. Режим показа формул выводит в ячейках сами формулы.

Так удобно проверить набор правил целиком: вторая строка leads_clean показывает все восемь формул.

07 / Проверка результатаИСХОДНИК 324 · 66 / 100

Шаг 23. Включить показ формул

Откройте Вид → Показать → Формулы (сочетание клавиш Ctrl+`). Во второй строке вместо значений появятся формулы.

Режим включается и выключается одной и той же командой. Пока он включён, ничего не меняйте.

324-shot.png · Формулы.
07 / Проверка результатаДОПОЛНЕНИЕ 324a · 67 / 100

Как выглядит режим показа формул

  • Во второй строке вместо значений видны формулы.
  • Столбцы узкие, поэтому в ячейках видно только начало: =ARRAYFORMULA(… Полный текст показывает строка формул выбранной ячейки.
  • В G2 формулы нет, там значение social: столбец G заполняет формула из F2.
  • Выключите режим той же командой Вид → Показать → Формулы.
324a-shot.png
07 / Проверка результатаИСХОДНИК 325 · 68 / 100

Сравнение source и leads_clean

Откройте лист source. В нём по-прежнему TG, NEW, пробелы и source|medium в одном поле.

Вернитесь на лист leads_clean: в нём очищенные значения тех же заявок.

325-shot.png
07 / Проверка результатаИСХОДНИК 326 · 69 / 100

Отдельной загрузки не требуется

Формулы пересчитываются сразу после ввода. Лист leads_clean уже содержит результат, отдельной команды загрузки нет.

Проверьте результат по контракту: 9 столбцов, 5 заявок, ошибка #VALUE! у REQ-003.

07 / Проверка результатаИСХОДНИК 327 · 70 / 100

Лист leads_clean после всех правил

Проверьте каждую строку:

  • имена без лишних пробелов
  • utm_source и utm_medium в разных столбцах
  • только строчные буквы в UTM-полях и статусе
  • telegram вместо tg
  • дата и время в created_at, ошибка у REQ-003
327-shot.png
07 / Проверка результатаИСХОДНИК 328 · 71 / 100

Источник и результат различаются по имени

Имена листов показывают роль данных:

ЛИСТЫ
source        данные из CSV, не редактируются
leads_clean   результат правил, не редактируется

Оба листа заполняются без ручного ввода значений: source — импортом, leads_clean — формулами.

07 / Проверка результатаИСХОДНИК 329 · 72 / 100

Правила проверяются второй выгрузкой

Для пяти строк ручная очистка была бы быстрее. Преимущество формул видно, когда приходит новая выгрузка.

Сейчас данные будут заменены, и ни одна формула не будет введена повторно.

08 / Новая выгрузкаИСХОДНИК 330 · 73 / 100

Шаг 24. Файл leads_dirty_v2.csv

Откройте data/leads_dirty_v2.csv в текстовом редакторе так же, как leads_dirty.csv на шаге просмотра, и закройте без сохранения.

Во втором файле 8 заявок: к пяти прежним добавлены REQ-006, REQ-007 и REQ-008.

Ошибки в новых строках того же вида: пробелы, регистр, TG, source|medium и ещё одна ошибочная дата у REQ-008.

330-shot.png
08 / Новая выгрузкаДОПОЛНЕНИЕ 330a · 74 / 100

Файлы второй выгрузки

Скачать v2 отдельно ↓
  • V1 содержит 5 заявок, v2 — 8, включая новые REQ-006…REQ-008.
  • Резервная копия leads_dirty_v1_backup.csv нужна, чтобы повторить упражнение с начала.
  • Файлы в папке data не редактируются.
330a-shot.png
08 / Новая выгрузкаИСХОДНИК 331 · 75 / 100

Новые данные попадают на тот же лист

Формулы leads_clean ссылаются на лист source. Чтобы они обработали новые данные, v2 импортируется на этот же лист с заменой содержимого.

Новый лист или новая таблица для v2 не создаётся: формулы на них не ссылаются.

08 / Новая выгрузкаИСХОДНИК 332 · 76 / 100

Ручной ввод в leads_clean и ошибка #REF!

Строки v2 нельзя вставлять в leads_clean вручную. Если ввести значение в ячейку, которую заполняет формула, формула не сможет вывести результат, и в A2 появится #REF!. В подсказке написано: «Массив не выведен, поскольку это привело бы к перезаписи данных в диапазоне A7».

На снимке в ячейку A7 введён текст. После проверки ввод отменён сочетанием Ctrl+Z (на Mac — ⌘Z).

332-shot.png
08 / Новая выгрузкаИСХОДНИК 333 · 77 / 100

Шаг 25. Импорт v2 на лист source

Откройте лист source. Выберите Файл → Импортировать → Добавить и загрузите leads_dirty_v2.csv.

Настройки те же: Заменить текущий лист, Запятая, флажок преобразования снят. Нажмите Импортировать данные.

333-shot.png
08 / Новая выгрузкаИСХОДНИК 334 · 78 / 100

Формулы пересчитались сами

Откройте лист leads_clean. Его не редактировали: после импорта таблица пересчитала все восемь формул на новых данных.

СЖПРОБЕЛЫ, ПЕЧСИМВ, SPLIT, СТРОЧН, замена tg и преобразование даты выполнены для восьми строк.

334-shot.png
08 / Новая выгрузкаИСХОДНИК 335 · 79 / 100

Правила записаны один раз

ПОВТОРЕНИЕ
ПРАВИЛА      записаны один раз
ДАННЫЕ       заменяются при каждой выгрузке
ПЕРЕСЧЁТ     выполняется автоматически
08 / Новая выгрузкаИСХОДНИК 336 · 80 / 100

Шаг 26. Проверить REQ-006

В source строка REQ-006 записана так:

SOURCE
" Елена ", " TG | SOCIAL ", " LESSON08 ", " NEW "

В leads_clean она должна выглядеть так:

LEADS_CLEAN
Елена · telegram · social · lesson08 · new

У REQ-008 в created_at снова #VALUE!: вторая ошибочная дата тоже осталась видимой.

336-shot.png
08 / Новая выгрузкаИСХОДНИК 337 · 81 / 100

Правила остались прежними

Включите Вид → Показать → Формулы. Во второй строке те же восемь формул, что и до импорта.

После импорта изменились только данные на листе source. Выключите режим той же командой Вид → Показать → Формулы.

337-shot.png
08 / Новая выгрузкаДОПОЛНЕНИЕ 337a · 82 / 100

Сохраните результат в CSV

Лист leads_cleanФайлСкачатьCSV
  • Откройте лист leads_clean — скачивается только текущий лист.
  • Файл сохранится в папку «Загрузки» с именем «leads_cleaning - leads_clean.csv».
  • Таблица leads_cleaning остаётся на Google Диске вместе с формулами.
337a-shot.png
08 / Новая выгрузкаДОПОЛНЕНИЕ 337b · 83 / 100

Перенесите CSV в папку result

  • Откройте «Загрузки» и найдите leads_cleaning - leads_clean.csv.
  • Перетащите файл в папку result практики.
  • Переименуйте его в leads_clean.csv: выделите файл и нажмите Enter (в Windows — F2).
337b-shot.png
09 / Структура и качествоИСХОДНИК 338 · 84 / 100

Если в CSV изменится порядок столбцов

Формулы находят данные по буквам столбцов. source!F2:F означает «шестой столбец», какое бы имя ни стояло в его заголовке.

Если в новой выгрузке перед source_medium появится ещё один столбец, формула F2 начнёт делить на части кампанию. Ошибки не будет: в результате окажутся неверные значения.

09 / Структура и качествоИСХОДНИК 339 · 85 / 100

Шаг 27. Формула проверки заголовков

Проверка ставится на отдельный лист: если поставить её рядом с таблицей, она попадёт в скачанный CSV лишним столбцом.

Добавьте лист кнопкой +, переименуйте его в check и в ячейку A1 введите:

ФОРМУЛА check!A1
=ЕСЛИ(JOIN(",";source!A1:H1)="request_id,created_at,name,email,direction,source_medium,utm_campaign,status";"структура source: OK";"СТОП: изменились столбцы source")

JOIN склеивает заголовки source через запятую. Формула сравнивает их с контрактом и сообщает, совпадает ли структура.

339-shot.png
09 / Структура и качествоИСХОДНИК 340 · 86 / 100

Ошибка значения и ошибка структуры

Ошибка значения — #VALUE! в одной ячейке. Остальные строки обработаны, проблема видна сразу.

Ошибка структуры — изменился порядок или названия столбцов. Формулы продолжают работать, но берут не те данные. Такую ошибку показывает только лист check.

09 / Структура и качествоДОПОЛНЕНИЕ 340a · 87 / 100

Создайте копию для опыта

ФайлСоздать копию
  • Опыт с изменённым заголовком ставится на копии: рабочая таблица не меняется.
  • В поле «Название» введите leads_cleaning — копия для проверки структуры.
  • Нажмите Создать копию. Копия откроется в новой вкладке.
340a-shot.png
09 / Структура и качествоИСХОДНИК 341 · 88 / 100

Диагностика на копии таблицы

В копии таблицы откройте лист source и в ячейку F1 введите traffic вместо source_medium. Откройте лист leads_clean: данные выглядят как прежде. Откройте лист check: в A1 появилось сообщение «СТОП: изменились столбцы source».

После опыта закройте вкладку с копией. Рабочая таблица leads_cleaning не изменилась.

Порядок диагностики:

  1. прочитать сообщение проверки;
  2. сравнить заголовки source с контрактом;
  3. найти, что изменилось в выгрузке;
  4. исправить выгрузку или согласованно изменить формулы.
341-shot.png
09 / Структура и качествоИСХОДНИК 342 · 89 / 100

Три части подготовки данных

Source

Лист source — копия CSV.

Rules

Формулы второй строки leads_clean.

Result

Значения, которые формулы выводят на лист leads_clean.

09 / Структура и качествоИСХОДНИК 343 · 90 / 100

Для чего нужны формулы этой темы

Формулы этой темы приводят значения к контракту. Итоговые формулы — СУММ, СРЗНАЧ, СЧЁТ — считаются уже по подготовленным данным, и одинаковые значения попадают в одну группу.

09 / Структура и качествоИСХОДНИК 344 · 91 / 100

Таблица готовит копию данных

Лист leads из темы 7 остаётся местом, куда приходят заявки.

Таблица leads_cleaning получает выгрузку и готовит её к анализу. Новые заявки в неё не поступают: она работает только с загруженным CSV.

09 / Структура и качествоИСХОДНИК 345 · 92 / 100

Место подготовки данных в проекте

  1. 01UTM → сайт
  2. 02Форма
  3. 03Google Sheets · leads
  4. 04CSV
  5. 05Таблица leads_cleaning
  6. 06Данные для анализа
09 / Структура и качествоИСХОДНИК 346 · 93 / 100

Очистка формата и качество данных

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

Не проверены:

  • дубли request_id
  • пустые обязательные поля
  • неизвестные статусы
  • потерянные строки
09 / Структура и качествоИСХОДНИК 347 · 94 / 100

Дубль при правильном формате

Строка REQ-001 · new выглядит аккуратно. Если заявка REQ-001 уже есть в таблице, это дубль.

Проверка качества смотрит на набор строк целиком: повторы, пропуски, количество.

09 / Структура и качествоИСХОДНИК 348 · 95 / 100

Проверки качества данных

Проверка качества включает:

  • дубли
  • пустые значения
  • обязательные поля
  • неизвестные статусы
  • количество строк
  • отчёт о проблемных строках
10 / Практика и итогИСХОДНИК 349 · 96 / 100

Что должно быть выполнено

10 / Практика и итогИСХОДНИК 350 · 97 / 100

Что сохранить для сдачи

10 / Практика и итогИСХОДНИК 351 · 98 / 100

Что нужно уметь объяснить

10 / Практика и итогИСХОДНИК 352 · 99 / 100

Повторяемая обработка данных

Первая выгрузка

CSV v1 → source → формулы leads_clean → результат.

Следующая выгрузка

CSV v2 → source → те же формулы → новый результат.

Сохранён способ обработки данных: его можно применить к любой следующей выгрузке той же структуры.

10 / Практика и итогИСХОДНИК 353 · 100 / 100

Следующая тема: Instagram → ManyChat → заявка

Сейчас заявки приходят только от тех, кто сам нашёл сайт. В следующей теме разбирается, как привести пользователя из Instagram:

ЦЕПОЧКА ТЕМЫ 9
комментарий под публикацией
↓
личное сообщение от ManyChat
↓
материал на сайте по ссылке с UTM
↓
форма
↓
GA4 и Google Таблицы

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

Содержание

90 слайдов 264–353 + 10 поясняющих экранов. Буква в номере обозначает дополнение сразу после соответствующего слайда.

Источники и материалы

Импорт таблиц и наборов данных ↗

ARRAYFORMULA ↗

СЖПРОБЕЛЫ (TRIM) ↗

ПЕЧСИМВ (CLEAN) ↗

SPLIT ↗

СТРОЧН (LOWER) ↗

LET ↗

ЗНАЧЕН (VALUE) ↗

JOIN ↗

Практика выполняется в Google Таблицах. Примеры CSV вымышленные. Все учебные файлы и список кадров — в материалах.

Скриншот