Страница 1 из 2

Агрегация данных

Добавлено: 23 сен 2019, 17:44
КонстантинН
Добрый день!

Друзья, подскажите, может кто-то делал подобное:
Нужно агрегировать данные по времени, вычисляя и сохраняя минимальное значение, максимальное значение, среднее значение, сумму значений, количество записей отдельной записью в этой или другой сущности. Агрегация идет за определенный период.
Пример: есть сущность "продажи менеджеров", в которой сохраняем суммы договоров по каждому менеджеру. Эти значения нужно хранить 1 месяц, затем посчитать сумму договоров за каждый день и сохранить 30-31 запись "Продажи за день" (можно каждый день считать и сохранять по 1 записи за 1 день). Такие данные храним 3 месяца (квартал) и агрегируем в "Продажи за месяц". Естественно такой подсчет ведется для каждого менеджера отдельно. Все "устаревшие" данные нужно удалять.

Очень похоже на функции + повторяющиеся задачи. Но как это настроить не соображу никак. И как записи удалять не знаю.

У кого какие мысли?

Re: Агрегация данных

Добавлено: 24 сен 2019, 08:03
Oleg
Мы писали отдельный обработчик, но нам нужно было считать время каждый день, т.к. пользователей просто так нельзя использовать
учет времени.png

Re: Агрегация данных

Добавлено: 24 сен 2019, 09:48
remchik
Тут писали про хранимки, я думаю надо туда копать

Re: Агрегация данных

Добавлено: 24 сен 2019, 11:07
remchik
Все оказалось проще :))
Создаете сущность.
Создаете поля :)
-
Далее делаете вьюху, с тем же именем, предварительно переименовав.
и выводите нужные поля, подставляя имена полей.
Используя PIVOT

Re: Агрегация данных

Добавлено: 24 сен 2019, 11:34
КонстантинН
remchik писал(а): 24 сен 2019, 11:07 Далее делаете вьюху, с тем же именем, предварительно переименовав.
и выводите нужные поля, подставляя имена полей.
Используя PIVOT
С этого момента поподробнее, пожалйста... :shock:

Кто такой Вьюха?
Кто такой PIVOT?
Как это работает?

Re: Агрегация данных

Добавлено: 24 сен 2019, 13:09
remchik
Вьюха - https://habr.com/ru/post/47031/
PIVOT - оператор (Не факт что Вам это нужно)

Предположим есть сущность - Заказы (В приложении ID сущности 25)
Значит в БД это выглядит как app_entity_25
Далее, помимо стандартных полей (id,создал итд), есть поля Например ФИО, Номер заказа, Сумма
ID у них соответственно 180,181,182
А в БД это столбцы field_181,field_182,field_183

Теперь добавляем нашу сводную сущность (думаю что права только на просмотр надо)
Сводная создастся как app_entity_26 в БД
и 2 поля фио, и сумма
field_184,field_185

Идем в БД, и таблицу app_entity_26 переименовываем
Создаем View и называем app_entity_26
В Ней пишем
Select
field_181 as field_184
,SUM(field_183) as field_185
From app_entity_25
Group BY field_181
Получаете агрегированную функцию, можете добавить дату итд, вычисления.
Но знания по SQL нужны.
Я вот php не знаю, мне сложно, но sql знаю хорошо, поэтому и путь такой.
***
т.е. Сущность у Вас всегда будет динамическая, без всяких "пересохранений" и "переливок"
PIVOT Вам нужен, что бы развернуть дату в столбцы (День месяца)
Но в сущности Вам надо создать все столбцы, что бы они gопали в app_fields, ну или туда внести напрямую :)

Re: Агрегация данных

Добавлено: 24 сен 2019, 13:14
КонстантинН
спасибо будем тестировать

Re: Агрегация данных

Добавлено: 24 сен 2019, 13:20
remchik
PIVOT - https://info-comp.ru/obucheniest/435-pi ... t-sql.html
там T-SQL, но очень все похоже
и пример как раз Ваш :)

Re: Агрегация данных

Добавлено: 25 сен 2019, 04:22
Евгений
Я делал такое. Работает вообще без проблем, можно выбрать совершенно любую информацию, даже не обязательно из самой базы Руководителя. Естественно, будет работать только на чтение.

Сначала создал новую сущность app_entity_123, со всеми полями которые потребуются для вывода. Потом залез в БД, переименовал таблицу этой сущности из app_entity_123 в app_entity_123_bk, и создал вьюшку с именем app_entity_123. Все поля в новой вьюшке должны точно соответствовать полям в исходной таблице сущности.

Единственное неудобство - если понадобится изменить список выводимых полей, переименовать поле, добавить новое и т.д., приходится сначала вернуть все таблицы в исходное состояние, а после редактирования опять повторять все шаги с вьюшкой.

Хотелось бы иметь такой инструмент в штатном режиме Руководителя.

Re: Агрегация данных

Добавлено: 25 сен 2019, 07:09
remchik
Вчера попробывал закостылить плагин, точнее начал разбираться с php
Все оказывается не так сложно, как кажется...
может лучше и плагин написать