Общий вид статистики — различия между версиями
м |
м |
||
Строка 12: | Строка 12: | ||
* Показатели продаж: кто купил, что купил, за сколько купил. | * Показатели продаж: кто купил, что купил, за сколько купил. | ||
− | + | Вычисляется Агрегат(Функция(Показатель)). Агрегат и Функция необязательны, то есть может быть просто Функция(Показатель) или Агрегат(Показатель) или просто Показатель. Функции — любые преобразования показателей, те же даты и т. п. А агрегаты — это агрегатные функции: | |
− | + | * Минимум, максимум | |
− | + | * Сумма, количество, среднее | |
− | + | * Количество уникальных значений | |
− | + | * Дисперсия (среднеквадратичное отклонение) | |
− | == | + | == Построение отчёта == |
Во-первых, задаются условия выборки данных — потенциально, любые (просто WHERE в SQL-запросе). В простейшем виде — выбор одного значения или диапазона для каждого поля. | Во-первых, задаются условия выборки данных — потенциально, любые (просто WHERE в SQL-запросе). В простейшем виде — выбор одного значения или диапазона для каждого поля. | ||
Строка 25: | Строка 25: | ||
И самое интересное — произвольный набор полей для группировки. Для каждого поля выбирается: | И самое интересное — произвольный набор полей для группировки. Для каждого поля выбирается: | ||
− | # Тип группировки | + | # Тип группировки. Доступные типы, по порядку убывания приоритета (то есть сначала всегда группируется по тем типам, которые выше в списке): |
#* Несколько таблиц — для каждого значения данного поля будет построена отдельная таблица. | #* Несколько таблиц — для каждого значения данного поля будет построена отдельная таблица. | ||
#* По вертикали — значения данного поля будут отложены по вертикальной оси (в таблице — слева тела таблицы). | #* По вертикали — значения данного поля будут отложены по вертикальной оси (в таблице — слева тела таблицы). | ||
Строка 34: | Строка 34: | ||
# Тип сортировки — либо по значениям самого поля, либо по А(Ф(П)) любого другого поля, группируемого не по всем выбранным полям, а только по полям с типом группировки «несколько таблиц» и полям с группировкой того же типа, что и данное поле, но предшествующим данному полю. | # Тип сортировки — либо по значениям самого поля, либо по А(Ф(П)) любого другого поля, группируемого не по всем выбранным полям, а только по полям с типом группировки «несколько таблиц» и полям с группировкой того же типа, что и данное поле, но предшествующим данному полю. | ||
− | {{note}} | + | Важная фишка в том, что на каждый тип группировки можно выбрать несколько полей, и всё отобразится корректно. |
+ | |||
+ | {{note}} Последний пункт звучит страшно, но на самом деле, отражает довольно интуитивное поведение. Примеры: | ||
+ | * Для единственного поля по вертикали это будет А(Ф(П)) за соответствующую строку таблицы (например, общая сумма прибыли за строку). | ||
+ | * Для единственного поля по горизонтали — аналогично, за соответствующий столбец таблицы. | ||
+ | * Для поля в ячейках — за все ячейки, но только за их части, соответствующие данному значению. | ||
+ | * Если по вертикали не одно, а два поля, то для первого («внешнего») это будет А(Ф(П)) за все строки, соответствующие его значению, а для второго («внутреннего») — А(Ф(П)) за все строки, соответствующие значениям ''обоих'' полей. То есть «внутреннее» поле и будет сортироваться как бы «внутри» каждого значения внешнего. |
Версия 01:31, 15 августа 2010
Маленький настраиваемый OLAP’ик на PHP+MySQL. Брать здесь. Общий вид любой, по сути дела, статистики. Есть, условно говоря, «события» (в OLAP — «факты»), у каждого есть показатели. То есть, обычный OLAP-куб, который берётся из SQL-БД. По этим событиям интересно получать какие-то отчёты.
Типы показателей:
- Численный тип
- Время (timestamp)
- Строковой тип
Примеры показателей:
- Любые части даты/времени, типа: год, месяц, неделя, дата, время суток, час, минута и т. п. Каждый следующий такой показатель содержит все предыдущие.
- Стандартные параметры из веб-статистики: IP, User-Agent, Referer, поисковой запрос и т. п.
- Параметры смс-биллинга: стоимость смс, доход от смс, отправитель, надёжность отправителя.
- Показатели продаж: кто купил, что купил, за сколько купил.
Вычисляется Агрегат(Функция(Показатель)). Агрегат и Функция необязательны, то есть может быть просто Функция(Показатель) или Агрегат(Показатель) или просто Показатель. Функции — любые преобразования показателей, те же даты и т. п. А агрегаты — это агрегатные функции:
- Минимум, максимум
- Сумма, количество, среднее
- Количество уникальных значений
- Дисперсия (среднеквадратичное отклонение)
Построение отчёта
Во-первых, задаются условия выборки данных — потенциально, любые (просто WHERE в SQL-запросе). В простейшем виде — выбор одного значения или диапазона для каждого поля.
Далее выбирается требуемый показатель: А(Ф(П)) или А(П).
И самое интересное — произвольный набор полей для группировки. Для каждого поля выбирается:
- Тип группировки. Доступные типы, по порядку убывания приоритета (то есть сначала всегда группируется по тем типам, которые выше в списке):
- Несколько таблиц — для каждого значения данного поля будет построена отдельная таблица.
- По вертикали — значения данного поля будут отложены по вертикальной оси (в таблице — слева тела таблицы).
- По горизонтали — аналогично, но по горизонтальной оси.
- В ячейке — список значений данного поля будет выведен внутри ячейки таблицы вместе с соответствующими значениями показателя.
- Само поле: любой П или Ф(П).
- Порядок сортировки — по убыванию или по возрастанию.
- Тип сортировки — либо по значениям самого поля, либо по А(Ф(П)) любого другого поля, группируемого не по всем выбранным полям, а только по полям с типом группировки «несколько таблиц» и полям с группировкой того же типа, что и данное поле, но предшествующим данному полю.
Важная фишка в том, что на каждый тип группировки можно выбрать несколько полей, и всё отобразится корректно.
Последний пункт звучит страшно, но на самом деле, отражает довольно интуитивное поведение. Примеры:
- Для единственного поля по вертикали это будет А(Ф(П)) за соответствующую строку таблицы (например, общая сумма прибыли за строку).
- Для единственного поля по горизонтали — аналогично, за соответствующий столбец таблицы.
- Для поля в ячейках — за все ячейки, но только за их части, соответствующие данному значению.
- Если по вертикали не одно, а два поля, то для первого («внешнего») это будет А(Ф(П)) за все строки, соответствующие его значению, а для второго («внутреннего») — А(Ф(П)) за все строки, соответствующие значениям обоих полей. То есть «внутреннее» поле и будет сортироваться как бы «внутри» каждого значения внешнего.