MiddleData Analyst > SQL и данные > Визуализация и BI
Короткий ответ Чаще всего проблема в контексте фильтра: функция вроде SAMEPERIODLASTYEAR некорректно работает внутри матрицы, если дата не берётся из выделенной, помеченной непрерывной Date-таблицы, либо иерархия дат в матрице не связана с этой же таблицей. Как это работает подробнее DAX-мера вычисляется в контексте фильтра; внутри матрицы у каждой ячейки свой неявный контекст по заголовкам строк/столбцов, и функции временной аналитики корректно работают только при наличии выделенной, непрерывной, помеченной как Date table таблицы дат с правильной связью. Пример кода Что использовать на практике Применение. Создайте отдельную таблицу-измерение дат, пометьте её как Date table, используйте DATEADD/SAMEPERIODLASTYEAR/PARALLELPERIOD со ссылкой на колонку даты именно этой таблицы, убедитесь, что иерархия в матрице построена на той же таблице дат (а не на несвязанном текстовом поле), протестируйте меру сначала в простой таблице, а потом добавляйте в сложную матрицу. Проверка. вручную отфильтровать матрицу на один к
calculatedax
MiddleData Analyst > SQL и данные > Визуализация и BI
Короткий ответ LOD-выражения (например, FIXED) позволяют считать агрегат на заданном уровне детализации независимо от текущих фильтров и измерений представления, поэтому показатель вроде «доля от собственного общего значения клиента» остаётся корректным даже при фильтрации вида. Как это работает подробнее Обычные агрегации и table calculations в Tableau подчиняются фильтрам и гранулярности текущего представления; {FIXED [Customer] : SUM([Amount])} считает сумму по клиенту на фиксированном уровне независимо от остальных измерений в виде, с учётом порядка применения context-фильтров. Пример кода Что использовать на практике Применение. Используйте FIXED LOD для стабильных показателей по сущности (например, LTV клиента, отображаемый вместе с отфильтрованным видом); используйте INCLUDE/EXCLUDE, когда нужно добавить или убрать детализацию относительно уровня вида; учитывайте порядок вычислений между LOD, context-фильтрами и обычными фильтрами — он влияет на то, какие фильтры применяются до, а какие после агрегации
data-visualizationfilters
MiddleData Analyst > SQL и данные > SQL
Короткий ответ Нужно пронумеровать строки по order_id с сортировкой по updated_at DESC через ROW_NUMBER(), оставить только строки с номером 1 (последнюю версию каждого заказа) в CTE, и уже на этом «чистом» наборе строить все дальнейшие агрегаты. Как это работает подробнее этот паттерн — частный случай дедупликации (аналогичный вопросу про удаление дублей), но применяется систематически как обязательный первый шаг перед любой агрегацией таких данных, а не разово; логика та же: PARTITION BY order_id ORDER BY updated_at DESC даёт rn = 1 для самой свежей версии. Пример кода Что использовать на практике Практика. важно убедиться, что updated_at действительно монотонно отражает «более новую» версию записи, а не время технической вставки строки в хранилище — если источник присылает исторические правки с запаздыванием, именно бизнес-метка времени обновления должна использоваться для сортировки, а не момент загрузки в хранилище. Проверка. Проверка: COUNT(DISTINCT order_id) на latest WHERE rn = 1 должен равняться COUNT
deduplicationlate-arriving-data
MiddleData Analyst > SQL и данные > SQL
Короткий ответ Нужно сравнить определения метрики и границы фильтров в обоих местах (период, статусы заказов, включены ли возвраты/отмены, часовой пояс), а затем по шагам сузить расхождение через разбивку по дням/статусам/источникам, а не сразу искать ошибку в коде дашборда. Как это работает подробнее Как это работает: расхождение в 8% редко означает «дашборд врёт» — чаще это разные правила агрегации: например, дашборд может фильтровать status != 'cancelled', а отчёт источника считает все заказы; или дашборд использует order_date, а отчёт — payment_date; или часовой пояс границы месяца отличается (см. вопрос про UTC). Пример кода Что использовать на практике На практике: эффективный порядок проверки: (1) сравнить фильтры WHERE/статусы в обоих запросах построчно; (2) разбить расхождение по дням — если оно сосредоточено у границ месяца, это сигнал про часовой пояс или про дату отсечки; (3) разбить по статусу заказа и источнику — если расхождение сосредоточено в одной категории, искать там; (4) сверить итоговую
aggregationdata-quality
MiddleDevOps Engineer > Контейнеры и доставка > Infrastructure as Code и управление конфигурацией
Короткий ответ State locking — это механизм, которым Terraform блокирует state в remote backend на время plan/apply, чтобы два процесса не писали в него параллельно и не повредили данные; если лок «подвис» из-за аварийного завершения процесса, нужно убедиться, что никакой apply реально не выполняется, и снять именно этот лок командой terraform force-unlock , а не трогать state вручную. Как это работает подробнее backend с поддержкой locking (например, S3 backend с таблицей DynamoDB для блокировок, или Terraform Cloud/Consul) перед изменением state создаёт отдельную запись-лок с идентификатором операции, временем и информацией о том, кто её запустил; любой другой процесс, пытающийся получить тот же лок, получает отказ и сообщение с LOCK ID, пока запись не удалена. Пример кода Что использовать на практике Практика. перед force-unlock нужно проверить в самой системе хранения лока (например, в таблице DynamoDB или в логах CI) статус первого джоба и убедиться, что его процесс действительно завершён, а не
ci-cdconfiguration-management
JuniorDevOps Engineer > Контейнеры и доставка > Скриптинг и автоматизация
Короткий ответ set -e останавливает скрипт при первой команде с ненулевым кодом возврата, -u превращает обращение к неопределённой переменной в ошибку, а -o pipefail делает так, чтобы пайплайн из нескольких команд считался упавшим, если упала любая команда в цепочке, а не только последняя. Как это работает подробнее по умолчанию bash продолжает выполнение после неудачной команды и использует неопределённые переменные как пустые строки, а код возврата пайплайна cmd1 | cmd2 равен коду возврата только cmd2. Эти три флага меняют поведение на более строгое и предсказуемое. Пример кода Что использовать на практике Рекомендация. флаги стоит добавлять почти в каждый продакшен-скрипт, но помнить про исключения — например, set -e не срабатывает внутри условий (if cmd; then) и внутри &&/||, поэтому проверку кода возврата важных шагов иногда нужно делать явно через if ! deploy; then handle_error; fi. Подводные камни Ошибка. добавлять флаги "для галочки", не проверяя, что скрипт действительно останавливается там, где нужн
basherror-handling
JuniorSMM Manager > Общее > SMM-аналитика и метрики
Короткий ответ UTM-метки — это параметры, добавляемые к ссылке, которые позволяют в веб-аналитике (например, Google Analytics/Яндекс.Метрике) точно определить, из какого источника, канала и конкретной публикации пришёл трафик. Как это работает подробнее UTM-параметры (source, medium, campaign и другие) передаются в URL и считываются системой веб-аналитики при переходе пользователя на сайт, формируя отдельный срез данных по каждой уникальной комбинации меток. Ссылка https://site.ru/promo?utm_source=instagram&utm_medium=social&utm_campaign=autumn_sale позволяет в GA увидеть отдельную строку трафика именно с этого поста. Проверка: в отчёте по источникам трафика должна появиться отдельная строка с этой комбинацией параметров, а не общий «instagram.com / referral». Что использовать на практике Практический подход. UTM-метки ставят на все ссылки в платных и органических публикациях, где нужно отличить трафик именно от конкретного поста/канала от остального трафика сайта; без них переходы из соцсетей могут попадать
metricsreporting
JuniorPython Developer > Основы Python > Коллекции и структуры данных
Короткий ответ set — это неупорядоченная коллекция уникальных хешируемых элементов, автоматически отбрасывающая дубликаты, в отличие от list, который допускает повторяющиеся элементы и сохраняет порядок их добавления. Как это работает подробнее При добавлении элемента в set Python вычисляет его хеш и проверяет, есть ли уже элемент с таким же значением — если да, новый элемент не добавляется. Это делает set удобным для быстрой проверки принадлежности и удаления дублей, но порядок перечисления элементов не гарантирован и не связан с порядком добавления. Пример кода Что использовать на практике Практика. set применяют для дедупликации коллекции (set(lst)), для операций пересечения/объединения/разности множеств (a & b, a | b, a - b), и когда часто нужно проверять "есть ли элемент в коллекции", а порядок не важен. Элементы множества должны быть хешируемыми, поэтому list и dict нельзя положить в set напрямую, а tuple — можно. Подводные камни Риски. Ожидают от set сохранения порядка вставки, как у list, и получают н
collectionshashing
JuniorPython Developer > Основы Python > Функции и области видимости
Короткий ответ *args собирает произвольное количество позиционных аргументов в tuple, а kwargs собирает произвольные именованные аргументы в dict — это позволяет писать функции с гибким числом параметров и универсальные обёртки, прозрачно передающие аргументы дальше. Как это работает подробнее При определении функции *args должен идти после обычных позиционных параметров, kwargs — последним. При вызове все "лишние" позиционные аргументы попадают в args как кортеж, все лишние именованные — в kwargs как словарь. При вызове другой функции func(*args, kwargs) происходит обратная операция — распаковка. Пример кода Что использовать на практике Практика. Типичное применение — декораторы и обёртки (logging_wrapper(*args, kwargs)), которые не знают заранее сигнатуру оборачиваемой функции, но должны передать в неё все аргументы как есть. Также используется для функций с опциональными параметрами конфигурации, где явный список был бы слишком длинным. Подводные камни Риски. Злоупотребляют kwargs там, где нужны явные, зад
function-argumentsfunctions-scope
JuniorSMM Manager > Общее > Рекламные платформы и медиазакупка
Короткий ответ Пиксель отслеживает действия пользователей на сайте (визиты, добавления в корзину, покупки) и передаёт эти данные в рекламный кабинет для оценки конверсий, оптимизации показов и построения аудиторий ретаргетинга. Как это работает подробнее код пикселя фиксирует события на странице и привязывает их к рекламному клику или показу, формируя статистику конверсий по кампаниям. Что использовать на практике Подход. без корректно установленного и настроенного по событиям пикселя алгоритм не может оптимизироваться на конверсии, а менеджер не видит реальную эффективность. Пример. Перед запуском кампании на покупки менеджер проверяет в Яндекс Метрике и Events Manager Meta, что событие «Покупка» фиксируется тестовой транзакцией. Статус «Активен» в разделе проверки пикселя подтверждает готовность к запуску. Подводные камни Ошибка. устанавливать пиксель только на главную страницу без событий на корзине и покупке, из-за чего система оптимизирует показы, но не видит реальных продаж.
ad-metricscampaign-optimization