Изменения

Перейти к: навигация, поиск

Общий вид статистики

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

Навигация