Примеры запросов универсальной статистики¶
Переходы по ссылкам¶
Суммарное количество переходов по ссылкам¶
- по каждому выпуску название выпуска, название группы, дата выпуска, число кликов, число писем; сортировка по дате выпуска
{
"select" : ["issue.name" ,"issue.group.name" ,"issue.dt" ,"issue.clicked" ,"issue.members"]
,"order" : ["issue.dt"]
}
- с фильтром по коду группы
{
"select" : ["issue.name" ,"issue.group.name" ,"issue.dt" ,"issue.clicked" ,"issue.members"]
,"filter" : [{ "a" : "issue.group.gid", "op" : "==" , "v" : "gdfhdfh" }]
,"order" : ["issue.dt"]
}
- с фильтром по коду группы и дате выпуска с 2011-03-17 11:30:27
{
"select" : ["issue.name" ,"issue.group.name" ,"issue.dt" ,"issue.clicked" ,"issue.members"]
,"filter" : [ {"a" : "issue.group.gid", "op" : "==", "v" : "gdfhdfh" }
, {"a" : "issue.dt", "op" : ">=", "v" : "2011-03-17 11:30:27"}]
}
- с фильтром по id выпуска
{
"select" : ["issue.name" ,"issue.group.name" ,"issue.dt" ,"issue.clicked" ,"issue.members"]
,"filter" : [{"a" : "issue.id", "op" : "==", "v" : 15 }]
,"order" : ["issue.dt"]
}
- с фильтром по коду группы и дате выпуска
{
"select" : ["issue.name" ,"issue.group.name" ,"issue.dt" ,"issue.clicked" ,"issue.members"]
,"filter" : [ {"a" : "issue.group.gid", "op" : "==", "v" : "gdfhdfh" }
, {"a" : "issue.dt", "op" : "==", "v" : "2011-03-17 11:30:27" }]
,"order" : ["issue.dt"]
}
Переходы по ссылкам за период с разбивкой по времени¶
- по дням
- по месяцам
- по годам
- по месяцам с фильтром по дате клика
{
"select" : ["click.dt:YD" ,"count(*)"]
,"filter" : [ { "a" : "click.dt:YM", "op" : ">=", "v" : "2011-05" }
, { "a" : "click.dt:YM", "op" : "<=", "v" : "2012-05" } ]
,"order" : ["click.dt:YD"]
}
- по месяцам с фильтром по дате клика
{
"select" : ["click.dt:YM" ,"count(*)"]
,"filter" : [ { "a" : "click.dt:YY", "v" : "2011", "op" : ">=" }
, { "a" : "click.dt:YY", "op" : "<=", "v" : "2010" } ]
,"order" : ["click.dt:YM"]
}
- по дням с фильтром по id выпуска и по дате клика
{
"select" : ["click.dt:YD" ,"count(*)"]
,"filter" : [ { "a" : "issue.id", "op":"==", "v" : 15}
, { "a" : "click.dt:YM", "op" : "<=", "v" : "2011-05" }]
,"order" : ["click.dt:YD"]
}
- по дням с фильтром по дате выпуска
{
"select" : ["click.dt:YD" ,"count(*)"]
,"filter" : [{"a" : "issue.dt:YY", "op":">", "v" : "2011"} ]
,"order" : ["click.dt:YD"]
}
- по дням с фильтром по коду группы и дате выпуска
{
"select" : ["click.dt:YD" ,"count(*)"]
,"filter" : [ { "a" : "issue.dt:YY", "op":">", "v" : "2011"}
, { "a" : "issue.group.gid", "op" : "==", "v" : "gdfhdfh" }]
,"order" : ["click.dt:YD"]
}
Переходы по каждой ссылке в выпуске¶
- все
- с фильтром по дате клика
{
"select" : ["click.link.url" ,"count(*)"]
,"order" : ["click.link.url"]
,"filter" : [ { "a" : "click.dt:YY", "op" : "==", "v" : "2010" } ]
}
- с фильтром по дате клика и id выпуска
{
"select" : ["click.link.url" ,"count(*)"]
,"filter" : [ { "a" : "click.dt:YY", "op" : "==", "v" : "2011" }
, { "a" : "issue.id", "op" : "==", "v" : "16" } ]
,"order" : ["click.link.url"]
}
- с фильтром по дате клика, коду группы и дате выпуска
{
"select" : ["click.link.url" ,"count(*)"]
,"order" : ["click.link.url"]
,"filter" : [ { "a" : "click.dt:YY", "op" : ">=", "v" : "2011" }
, { "a":"issue.group.gid", "op":"==", "v":"all"}
, { "a" : "issue.dt", "op" : "==", "v" : "2010-01-26 16:51:26" } ]
}
Переходы по определенной ссылке¶
- с группировкой по дням
{
"select" : ["click.dt:YD" ,"count(*)"]
,"filter" : [ {"a" : "click.link.url", "op" : "==", "v" : "http://www.disney.com/" }]
}
- с группировкой по дням c фильтром и по дате клика
{
"select" : ["click.dt:YD" ,"count(*)"]
,"filter" : [ {"a" : "click.link.url", "op" : "==", "v" : "http://www.disney.com/" }
, { "a" : "click.dt", "op" : ">=", "v" : "2011-05-11 14:25:54" }]
}
- с группировкой по дням с фильтром по id группы ссылок и дате клика
{
"select" : ["click.dt:YD" ,"count(*)"]
,"filter" : [ {"a" : "click.linkgroup.id", "op" : "==", "v" : "16" }
, { "a" : "click.dt", "op" : ">=", "v" : "2011-05-11 14:25:54" }]
}
- с группировкой по дням с фильтром по названию группы ссылок и дате клика
{
"select" : ["click.dt:YD" ,"count(*)"]
,"filter" : [ {"a" : "click.linkgroup.name", "op" : "==", "v" : "Профиль all" }
, {"a" : "click.dt", "op" : ">=", "v" : "2011-05-11 14:25:54" }]
}
Переходы определенного подписчика по ссылкам¶
- с группировкой по дням и по ссылкам
{
"select" : ["click.dt:YD" ,"click.link.url" ,"count(*)"]
,"filter" : [{"a" : "member.email", "op" : "==", "v" : "vadim\@iprojects.ru" }]
}
- с фильтром по дате клика
{
"select" : ["click.dt:YD","click.link.url ","count(*)"]
,"filter" : [ {"a" : "member.email", "op" : "==", "v" : "ask\@subscribe.ru" }
, { "a" : "click.dt:Ym", "op" : ">=", "v" : "2011-08-10 13:30" } ]
}
Чтения¶
Все чтения выпуска¶
- по каждому выпуску название выпуска, название группы, дата выпуска, число чтений, число писем
- с фильтром по коду группы и дате выпуска
{
"select" : ["issue.name", "issue.group.name" ,"issue.dt" ,"issue.readed" ,"issue.members"]
,"filter" : [ {"a" : "issue.group.gid", "op" : "==", "v" : "import20110627175254" }
, { "a" : "issue.dt", "op" : "==", "v" : "2011-06-28 13:54:48" } ]
}
Чтения выпуска за период с разбивкой по времени (по дням, месяцам, годам)¶
- по годам
- по месяцам
- по дням
- по дням с фильтром по коду группы и дате выпуска
{
"select" : ["read.dt:YD" ,"count(*)"]
,"filter" : [ {"a" : "issue.group.gid", "op" : "==", "v" : "import20100720185533" }
, { "a" : "issue.dt", "op" : "==", "v" : "2010-10-18 17:17:17" }]
}
- по дням с фильтром по дате выпуска
{
"select" : ["read.dt:YD" ,"count(*)"]
,"filter" : [{"a" : "issue.dt:Ym", "op" : ">", "v" : "2010-10-18 17:30" }]
}
Зафиксированные чтения выпусков подписчиками¶
- дата чтения, email
- c фильтром по дате чтения и сортировкой по дате чтения
{
"select" : ["read.dt" ,"member.email"]
,"filter" : [ {"a":"read.dt:YD", "op" : "<=", "v" : "2010-10-20" }]
,"order" : [ "read.dt"]
}
- c фильтром по дате чтения, коду группы и дате выпуска, сортировкой по дате чтения
{
"select" : ["read.dt" ,"member.email"]
,"filter" : [ { "a" : "read.dt:YD", "op" : "<=", "v" : "2010-10-20" }
, { "a" : "issue.group.gid", "op" : "==", "v" : "import20100720185533" }
, { "a" : "issue.dt", "op" : "==", "v" : "2010-10-18 17:17:17" }
]
,"order" : [ "read.dt"]
}
Доставка выпусков¶
Успешная доставка¶
- название выпуска, группа, дата выпуска, количество доставлено, количество отосланных писем
{
"select" : ["issue.name" ,"issue.group.name" ,"issue.dt" ,"issue.deliv_ok" ,"issue.members"]
,"filter" : [ { "a" : "deliv.status", "op" : ">", "v" : "0" } ]
}
- с фильтром по коду группы
{
"select" : ["issue.name","issue.group.name","issue.dt","issue.deliv_ok","issue.members"]
,"filter" : [ { "a" : "deliv.status", "op" : ">", "v" : "0" }
, { "a" : "issue.group.gid", "op" : "==", "v" : "masssending" } ]
}
- с фильтром по коду группы и дате выпуска
{
"select" : ["issue.name","issue.group.name","issue.dt","issue.deliv_ok","issue.members"]
,"filter" : [ { "a" : "deliv.status", "op" : ">", "v" : "0" }
, { "a" : "issue.group.gid", "op" : "==", "v" : "masssending" }
, { "a" : "issue.dt", "op" : "==", "v" : "2010-05-31 16:23:47" } ]
}
Ошибки при доставке выпусков¶
- название выпуска, дата выпуска, емайл, код ошибки
{
"select" : ["issue.name","issue.group.name","issue.dt","member.email","deliv.status"]
,"filter" : [ { "a" : "deliv.status", "op" : "<", "v" : "0" } ]
}
- с фильтром по коду группы и дате выпуска
{
"select" : ["member.email","deliv.status"]
,"filter" : [ { "a" : "deliv.status", "op" : "<", "v" : "0" }
, { "a" : "issue.group.gid", "op" : "==", "v" : "p212" }
, { "a" : "issue.dt", "op" : "==", "v" : "2010-12-31 23:02:29" } ]
}
Доставка выпусков определенному подписчику¶
- название выпуска, дата выпуска, статус доставки
{
"select" : ["issue.name","issue.group.name","issue.dt","deliv.status"]
,"filter" : [ { "a" : "member.email", "op" : "==", "v" : "test@test.ru" } ]
}
- с фильтром по дате выпуска
{
"select" : ["issue.name","issue.group.name","issue.dt","deliv.status"]
,"filter" : [ { "a" : "member.email", "op" : "==", "v" : "test@test.ru"}
, { "a" : "issue.dt:YM", "op" : ">=", "v" : "2010-12" } ]
}
Замена вызова stat.issue¶
{
"select" : ["issue.id","issue.group.gid","issue.dt","member.email","deliv.status"]
,"filter" : [ {"a" : "issue.dt:YM", "op" : ">=", "v" : "2011-08" }
, {"a":"deliv.status", "op":"<","v":"0"} ]
,"order" : ["issue.id","issue.dt","member.email"]
}
{
"select" : ["member.email","count(deliv.*)"]
,"filter" : [ {"a" : "issue.dt:YM", "op" : ">=", "v" : "2011-08" }
, { "a":"deliv.status", "op":"<","v":"0"} ]
,"order" : ["member.email"]
}
{
"select" : ["member.email","count(deliv.*)"]
,"filter" : [{"a" : "issue.dt:YM", "op" : ">=", "v" : "2011-08" }]
,"order" : ["member.email"]
}
Сводные отчеты¶
Суммарное число чтений, кликов по дням¶
- сортировка по убыванию даты
Суммарное число чтений, кликов по месяцам с 2021 года¶
- сортировка по убыванию даты
{
"select" : ["*.dt:YM", "count(click)", "count(read)" ]
,"filter" : [{"a":"*.dt:YY", "op" : ">=", "v" : "2021" }]
,"order" : ["-*.dt:YM"]
}
Суммарное число много чего по дате события¶
- Суммарное число отправленных писем, успешно доставленных писем, чтений, уникальных читавших, кликов, уникальных кликавших по месяцам, сортировка по убыванию даты
Указание*.dt:YMограничиваетдату события- т.е. дату клика, чтения, выпуска. Даты событий не взаимосвязаны и клики и чтения берутся все случившиеся
в указанный интервал. Сравните со следующим отчётом.
{
"select" : ["*.dt:YM","sum(issue.members)","count(deliv)","count(read)","count(unique read.member.id)","count(click)", "count(unique click.member.id)"]
,"filter" : [ {"a" : "*.dt:YM", "op" : ">=", "v" : "2021-06" }
, {"a" : "deliv.status", "op" : ">", "v" : "0" }]
,"order" : ["-*.dt:YM"]
}
Суммарное число много чего для даты выпуска¶
- Отправленных писем, доставленных успешно писем, чтений, кликов по выпускам по месяцам, сортировка по убыванию даты_
Указание*.issue.dt:YMограничиваетдату выпуска- т.е. клики и чтения считаются только от выпусков указанного интервала
{
"select" : ["issue.dt:YM","sum(issue.members)","sum(issue.deliv_ok)","sum(issue.clicked)","sum(issue.readed)"]
,"filter" : [ {"a" : "issue.dt:YM", "op" : ">=", "v" : "2021-06" } ]
,"order" : ["issue.dt:YM"]
}
Статистика активности по выпускам¶
- название выпуска, дата выпуска, название группы, отправленных писем, доставленных успешно писем, доставленных не успешно писем, чтений всего, чтений уникальных, кликов всего, кликов уникальных сортировка по возрастанию даты выпуска_
Быстрый вызов по заранее подготовленным данным с небольшим (5-10 минут) отставанием от реального времени
{
"select" : [ "issue.name", "issue.dt", "issue.group.name", "issue.members",
, "issue.deliv_ok", "issue.deliv_bad", "issue.clicked", "issue.u_clicked",
, "issue.readed", "issue.u_readed", "issue.unsubed"
]
,"filter" : [ {"a" : "issue.dt", "op" : ">=", "v" : "2021-06-01 00:00:00" } ]
,"order" : [ "issue.dt" ]
}
Аналогичный, но заметно более медленный на больших списках, вызов по данным в реальном времени
{
"select" : [ "*.issue.name", "*.issue.dt", "*.issue.group.name", "*.issue.members"
, "count(deliv_ok)", "count(deliv_bad)", "count(click)", "count(unique click.member.id)"
, "count(read)", "count(unique read.member.id)"
]
,"filter" : [ {"a" : "*.issue.dt", "op" : ">=", "v" : "2021-06-01 00:00:00" } ]
,"order" : ["*.issue.dt"]
}
Запрос с объединением двух единичных запросов¶
Для каждого участника выпуска номер 50 выбирается его адрес, дата внесения в базу, дата выпуска рассылки, статус доставки, дата первого клика в письме рассылки, общее число кликов в письме
Уникальный ключ составлен из номера получателя и номера выпуска. В данном случае это избыточно (номер выпуска у всех один), но если запрос подразумевает охват нескольких выпусков, то это необходимо. Вместо номера получателя можно было бы использовать его адрес (он так есть в выборке), но тогда будет выполняться дольше, так как числовое поле (номер) в уникальном ключе работает быстрее чем строчное (адрес).
{
"action":"stat.uni"
,"joinby" : 2 -- размер ключа
,"join" : [
{ -- Первый запрос. На основе списков доставки выбираются участники выпуска 50 и их данные
"select":[
-- уникальный ключ
"deliv.member.id"
,"deliv.issue.id"
-- данные об адресе и доставке
,"deliv.member.email"
,"deliv.member.anketa.member.create.time"
,"deliv.issue.dt"
,"deliv.status"
]
,"filter":[
{"a":"deliv.issue.id","op":"==","v":"50"}
]
}
,
{ -- Второй вопрос. Данные о кликах выпуска 50
"select":[
-- уникальный ключ
"click.member.id"
,"click.issue.id"
-- данные о первом клике и их количество
,"min(click.dt)"
,"count(*)"
]
,"filter":[
{"a":"click.issue.id","op":"==","v":"50"}
]
}
]
,"caption":[
-- Один раз колонки уникального ключа
"Номер получателя"
,"Номер рассылки"
-- Колонки первого запроса
,"Адрес получателя"
,"Дата регистрации"
,"Дата рассылки"
,"Статус доставки"
-- Колонки второго запроса
,"Дата первого клика"
,"Число кликов"
]
}
В результате получится примерно следующее.
Пользователь второй из строки не кликал, что отражается как null в соответствующий колонках.
| Номер получателя | Номер рассылки | Адрес получателя | Дата регистрации | Дата рассылки | Статус доставки | Дата первого клика | Число кликов |
|---|---|---|---|---|---|---|---|
| 34 | 50 | xxx@kovalyuk.ru | 2013-08-27 13:49:14 | 2013-10-04 16:26:03 | 1 | 2013-10-04 16:45:28 | 1 |
| 21 | 50 | yyy@avon.com | 2013-08-27 10:07:17 | 2013-10-04 16:26:03 | 1 | null | null |
| 78 | 50 | zzz@gmail.com | 2013-08-27 10:36:32 | 2013-10-04 16:26:03 | 1 | 2013-10-04 16:45:28 | 3 |