Общий вид статистики — различия между версиями

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

Версия 23:15, 14 августа 2010

Маленький настраиваемый OLAP’ик на PHP+MySQL. Брать здесь. Общий вид любой, по сути дела, статистики. Есть, условно говоря, «события» (в OLAP — «факты»), у каждого есть показатели. То есть, обычный OLAP-куб, который берётся из SQL-БД. По этим событиям интересно получать какие-то отчёты.

Типы показателей:

  • Численный тип
  • Время (timestamp)
  • Строковой тип

Примеры показателей:

  • Любые части даты/времени, типа: год, месяц, неделя, дата, время суток, час, минута и т. п. Каждый следующий такой показатель содержит все предыдущие.
  • Стандартные параметры из веб-статистики: IP, User-Agent, Referer, поисковой запрос и т. п.
  • Параметры смс-биллинга: стоимость смс, доход от смс, отправитель, надёжность отправителя.
  • Показатели продаж: кто купил, что купил, за сколько купил.

Общая фишка: Агрегат(Функция(Показатель)). Агрегат и Функция необязательны, то есть может быть просто Функция(Показатель) или Агрегат(Показатель) или просто Показатель. Функции — любые преобразования показателей, те же даты и т. п. А агрегаты — это агрегатные функции:

    • Минимум, максимум
    • Сумма, количество, среднее
    • Количество уникальных значений
    • Дисперсия (среднеквадратичное отклонение)

Построения отчёта

Во-первых, задаются условия выборки данных — потенциально, любые (просто WHERE в SQL-запросе). В простейшем виде — выбор одного значения или диапазона для каждого поля.

Далее выбирается требуемый показатель: А(Ф(П)) или А(П).

И самое интересное — произвольный набор полей для группировки. Для каждого поля выбирается:

  1. Тип группировки. На каждый тип можно выбрать несколько полей. Доступные типы, по порядку убывания приоритета (то есть сначала всегда группируется по тем типам, которые выше в списке):
    • Несколько таблиц — для каждого значения данного поля будет построена отдельная таблица.
    • По вертикали — значения данного поля будут отложены по вертикальной оси (в таблице — слева тела таблицы).
    • По горизонтали — аналогично, но по горизонтальной оси.
    • В ячейке — список значений данного поля будет выведен внутри ячейки таблицы вместе с соответствующими значениями показателя.
  2. Само поле: любой П или Ф(П).
  3. Порядок сортировки — по убыванию или по возрастанию.
  4. Тип сортировки — либо по значениям самого поля, либо по А(Ф(П)) любого другого поля, группируемого не по всем выбранным полям, а только по полям с типом группировки «несколько таблиц» и полям с группировкой того же типа, что и данное поле, но предшествующим данному полю.

Note.svg Звучит страшно, но выглядит, на самом деле, довольно интуитивно. Примеры: для единственного поля по вертикали это будет А(Ф(П)) за соответствующую строку таблицы (например, общая сумма прибыли за строку). Для единственного поля по горизонтали — аналогично, за соответствующий столбец таблицы. Для поля в ячейках — за все ячейки, но только за их части, соответствующие данному значению. Если же по вертикали два поля, то для первого («внешнего») это будет А(Ф(П)) за все строки, соответствующие его значению, а для второго («внутреннего») — А(Ф(П)) за все строки, соответствующие значениям обоих полей. То есть «внутреннее» поле и будет сортироваться как бы «внутри» каждого значения внешнего.