В современном мире анализа данных и разработки бизнес-приложений работа с датами и временем — одна из самых частых и важных задач. Независимо от того, анализируете ли вы продажи, логи серверов или действия пользователей в CRM, вам регулярно нужно отвечать на вопрос: «Что произошло за последние N дней?».
В этой статье мы подробно разберем, как использовать DATE_FILTER (фильтрацию по дате) для выбора записей за N дней в различных популярных инструментах и языках программирования. Мы рассмотрим примеры в SQL, Excel, Power BI, Python (Pandas) и 1С-Битрикс, чтобы у вас было полное понимание механики этого процесса.
Почему фильтрация по дате — это важно?
Фильтры по датам помогают не просто отсечь лишние данные, но и провести глубокий аналитический разрез. С их помощью можно:
- Анализировать тренды: сравнивать показатели текущего периода с аналогичными периодами прошлого.
- Создавать скользящие окна (Rolling Windows): автоматически рассчитывать ключевые показатели (например, скользящее среднее) за последние 7, 14 или 30 дней.
- Оптимизировать производительность: отбрасывая старые записи, вы ускоряете работу дашбордов и отчетов.
SQL: Выборка записей за последние N дней
В базах данных фильтрация по дате — базовая операция. Несмотря на то, что некоторые версии SQL (например, SQL Server 2005) могут понимать формат ММ/ДД/ГГГГ, настоятельно рекомендуется использовать международный стандарт ISO 8601 (ГГГГ-ММ-ДДTЧЧ:ММ:СС) для предотвращения ошибок, связанных с региональными настройками.
Если вам нужно выбрать записи за определенный промежуток времени, вы можете использовать оператор BETWEEN или математические функции работы с датами.
Пример с использованием CURRENT_DATE (стандартный SQL)
Чтобы получить записи за последние 7 дней, запрос может выглядеть так:
SELECT * FROM table_name WHERE date_column >= CURRENT_DATE ― INTERVAL ‘7’ DAY;
Пример для SQL Server
В SQL Server для вычитания дней часто используется функция DATEADD:
SELECT * FROM table_name WHERE date_column >= DATEADD(day, -7, GETDATE);
Если вы используете оконные функции для выборки последних записей по каждому продукту, помните о возможной загвоздке: если по продукту есть только одна запись, фильтрация через row_number over (partition by id order by d desc) все равно корректно вернет этот единственный элемент.
Excel: Автоматический фильтр и скользящий анализ
В Excel фильтрация по дате может быть как ручной, так и автоматизированной с помощью формул и макросов.
Ручная фильтрация (AutoFilter)
При использовании VBA (макросов) для фильтрации по нескольким датам или периодам важно понимать структуру массива критериев. Первое измерение массива обозначает группу периода времени:
- 0 — Годы
- 1 — Месяцы
- 2 — Дни
- 3 — Часы
- 4 — Минуты
- 5, Секунды
Например, если вы хотите отфильтровать данные по нескольким годам (2014 и 2016), Excel использует последний день времени периода для каждого элемента массива:
.AutoFilter Field:=iCol, Operator:=xlFilterValues, Criteria2:=Array(0, «», 0, «»)
Скользящий анализ за N дней
Для автоматического расчета показателей за последние N дней без изменения фильтра каждый день, используйте формулу ТЕКДАТА-N (или TODAY-N в английской версии). Это позволяет создать динамический диапазон, который всегда будет показывать данные за последние N дней от текущей даты.
Power BI: Срезы относительной даты
В Power BI работа с последними N днями реализована максимально удобно для конечного пользователя через функцию Срез относительной даты (Relative Date Slicer).
Вы можете настроить фильтр так, чтобы он отображал данные только за последние 30 дней или за прошлый календарный месяц. Логика работы следующая: если 30 сентября 2024 года вы сохраните отчет с относительным диапазоном «Последние 7 дней», а откроете его 21 октября 2024 года, отчет автоматически обновится и покажет данные с 15 по 21 октября.
Python (Pandas): Гибкая работа с датами
В Data Science библиотека Pandas — стандарт де-факто. Если у вас есть DataFrame с колонкой дат или таймстампов, отфильтровать строки за последние N дней можно несколькими способами.
Один из самых простых подходов — вычислить дату N дней назад от сегодняшнего дня и отфильтровать DataFrame по условию:
import pandas as pd
from datetime import datetime, timedelta
# Предположим, df ⎻ наш DataFrame, а ‘date_column’ ⎻ колонка с датами
n_days_ago = datetime.now ― timedelta(days=N)
filtered_df = df[df[‘date_column’] >= n_days_ago]
1С-Битрикс: Использование Unix-времени
В 1С-Битрикс фильтрация по дате часто строится на использовании Unix-времени (таймстампов). Для выборки элементов, созданных за последние N дней, необходимо перевести дни в секунды.
В одних сутках 86 400 секунд. Умножая это значение на количество дней, мы получаем элементы за последние N дней. Пример логики фильтра:
$n_days = 7; // Количество дней
$timestamp = time ― (86400 * $n_days);
$arFilter = Array(«>=DATE_CREATE» => ConvertTimeStamp($timestamp, «FULL»));
ArcGIS Dashboards и DataLens
В современных BI-системах, таких как ArcGIS Dashboards или Yandex DataLens, настройка фильтра за последние N дней обычно интуитивно понятна.
- ArcGIS Dashboards: При настройке фильтра по дате вы можете задать множитель единиц (например, 7) и выбрать единицу измерения — «день». Диапазон автоматически начнется в 00:00:00 за 7 дней до текущей даты.
- DataLens: Здесь функции даты, агрегации и оконные функции часто используются в связке. Вы можете округлить дату до нужного периода (например, до месяца), найти последний период и посчитать сумму по условию, выведя результат в индикатор.
Использование DATE_FILTER для выбора записей за N дней — это фундаментальный навык для любого специалиста, работающего с данными. Независимо от того, пишете ли вы SQL-запросы, строите дашборды в Power BI или анализируете таблицы в Excel, принцип остается неизменным: вычисляется точка во времени «N дней назад» (будь то через вычитание интервала, использование Unix-времени или встроенных срезов), и данные фильтруются таким образом, чтобы показать только те записи, которые попадают в этот динамический временной диапазон.
Использование относительных дат делает ваши отчеты живыми и самодостаточными — они всегда будут показывать актуальную картину на момент их открытия.