Как сделать аналитику по периодам (таблица с интервалами дат)
Создаем такой отчет по периодам:
Для этого указываем столбцы таблицы date, p1 ... p5 (выводимые метрики), hide_invervalType (фильтр Выбор радио) с процедурой dict:
select 'day' Value, 'Дни' Text, '' Color, 1 ord
union
select 'week' Value, 'Недели' Text, '' Color, 2 ord
union
select 'month' Value, 'Месяцы' Text, '' Color, 3 ord
union
select 'quarter' Value, 'Кварталы' Text, '' Color, 4 ord
union
select 'year' Value, 'Года' Text, '' Color, 5 ord
Процедура getitems таблицы:
CREATE PROCEDURE [dbo].[crud_qa-stat_getItems]
@filters CRUDFilterParameter READONLY,
@sort sql_variant,
@direction nvarchar(8),
@page int,
@pageSize int,
@username nvarchar(32)
AS
BEGIN
declare @isAdmin bit = dbo.sec_isUserInRole(@username, 'admin')
declare @filterIntervalType nvarchar(128) = (select Value from @filters where [Key] = 'hide_intervalType')
set datefirst 1;
declare @periods int = 30
if(@filterIntervalType='week') begin
set @periods=12
end
if(@filterIntervalType='month') begin
set @periods=15
end
if(@filterIntervalType='quarter') begin
set @periods=6
end
if(@filterIntervalType='year') begin
set @periods=4
end
declare @result table(num int, name nvarchar(max), date1 datetime, date2 datetime, p1 int, p2 int, p3 int, p4 int, p5 int)
insert into @result(num, name, date1, date2, p1, p2,p3,p4,p5)
select num, name , date1, date2,
1 p1, 2 p2, 3 p3, 4 p4, 5 p5
from [dbo].[as_periods] (@filterIntervalType, @periods, '', '')
-- SELECT 3
select *, name date, @filterIntervalType hide_intervalType,
'x1' colTitle_p1, 'x2' colTitle_p2, 'x3' colTitle_p3, 'x4' colTitle_p4, 'x5' colTitle_p5
from @result order by num
-- 2 SELECT - кол-во в таблице
select 1
-- 3 SELECT Дополнительные настройки таблицы
select 1 Compact, '16px' FontSize, 1 InstantFilter, 1 HideTitleCount, 'h2' headerTag, '' Subtitle,
'{
"colorMinMaxCols": [
{ "code": "p1", "minClass": "text-danger font-weight-bold", "maxClass": "text-success font-weight-bold" },
{ "code": "p2", "minClass": "text-danger font-weight-bold", "maxClass": "text-success font-weight-bold" },
{ "code": "p3", "minClass": "text-danger font-weight-bold", "maxClass": "text-success font-weight-bold" },
{ "code": "p4", "minClass": "text-danger font-weight-bold", "maxClass": "text-success font-weight-bold" },
{ "code": "p5", "minClass": "text-danger font-weight-bold", "maxClass": "text-success font-weight-bold" },
{ "code": "p6", "minClass": "text-danger font-weight-bold", "maxClass": "text-success font-weight-bold" },
{ "code": "p7", "minClass": "text-danger font-weight-bold", "maxClass": "text-success font-weight-bold" },
{ "code": "p8", "minClass": "text-danger font-weight-bold", "maxClass": "text-success font-weight-bold" },
{ "code": "p9", "minClass": "text-danger font-weight-bold", "maxClass": "text-success font-weight-bold" }
]
}' ProcessOptions
-- SELECT 4
select 'ИТОГО' name,
(select sum(p1) from @result) p1,
(select sum(p2) from @result) p2,
(select sum(p3) from @result) p3,
(select sum(p4) from @result) p4,
(select sum(p5) from @result) p5,
1 isHead
END
Ключевая особенность - использование функции as_periods, которая выдает таблицу периодов.
Остается лишь правильно написать подзапросы при заполнении @result (там где стоят параметры p1..p5), а также поменять названия столбцов в SELECT 1.
В SELECT 4 выводятся агрегированные значения по таблице @result.
Примечание. Если в базе нет функции as_periods, то ее можно добавить вручную:
ALTER FUNCTION [dbo].[as_periods]
(
@type varchar(128),
@cnt int,
@format
nvarchar(128) = '',
@langCode nvarchar(10) = ''
)
RETURNS
@res TABLE (num int, date1 date, date2 date, name nvarchar(128))
AS
BEGIN
if(@langCode='') set @langCode = 'ru-ru'
declare @startDate date = getdate()
declare @wwekStart date = DATEADD(dd, -(DATEPART(dw, @startDate)-1), @startDate)
declare @monthStart date = DATEADD(month, DATEDIFF(month, 0,@startDate), 0)
declare @quarterStart date = DATEADD(quarter, DATEDIFF(quarter, 0,@startDate), 0)
declare @yearStart date = DATEADD(year, DATEDIFF(year, 0,@startDate), 0)
--set datefirst 1
;WITH nums(num) AS
(
SELECT 1
UNION ALL
SELECT num+1
FROM nums
WHERE num < @cnt
)
insert into @res
SELECT num,
case @type
when 'day' then dateadd(day, -num+1, @startDate)
when 'week' then dateadd(week, -num+1, @wwekStart)
when 'month' then dateadd(month, -num+1, @monthStart)
when 'quarter' then dateadd(quarter, -num+1, @quarterStart)
when 'year' then dateadd(year, -num+1, @yearStart)
else getdate()
end date1,
case @type
when 'day' then dateadd(day, -num+2, @startDate)
when 'week' then dateadd(week, -num+2, @wwekStart)
when 'month' then dateadd(month, -num+2, @monthStart)
when 'quarter' then dateadd(quarter, -num+2, @quarterStart)
when 'year' then dateadd(year, -num+2, @yearStart)
else getdate()
end date2,
case @type
when 'day' then format(dateadd(day, -num+1, @startDate), iif(@format<>'', @format, 'dd.MM.yyyy'), @langCode)
when 'week' then replace(
format(dateadd(week, -num+1, @wwekStart), iif(@format<>'', @format,'ww неделя yyyy'), @langCode),
'ww', datepart(week, dateadd(week, -num+1, @wwekStart)) )
when 'month' then format(dateadd(month, -num+1, @monthStart), iif(@format<>'', @format,'MMMM yyyy'), @langCode)
when 'quarter' then replace(
format(dateadd(quarter, -num+1, @quarterStart), iif(@format<>'', @format,'qq квартал yyyy'), @langCode),
'qq', datepart(quarter, dateadd(quarter, -num+1, @quarterStart)) )
when 'year' then format(dateadd(year, -num+1, @yearStart), iif(@format<>'', @format,'yyyy'), @langCode)
else ''
end name
FROM nums
RETURN
END
Falcon Space - функциональная веб-платформа разработки на узком стеке MS SQL/Bootstrap. Вводная по Falcon Space
Google поиск по нашей документации
- Руководства
- Основа Falcon Space
- Основные компоненты
- Возможности
- Коммуникация с пользователем
- Дизайн, стилизация, юзабилити
- Лендинги
- Универсальный API
- Примеры интеграций
- Каталоги
- Навигация
- Документы
- Дополнительные компоненты
- Продвижение, SEO
- Системные моменты
- Системное администрирование
- HOWTO
- Таблицы Таблицы. Как сделать сортировку в AS CRUD Таблицы. Как сделать Editable для галочки (Да/Нет) в AS CRUD Таблицы. Как редактировать колонку с датой Таблицы. Как связать 2 таблицы Таблицы. Как сделать таблицу в модальном окне (открывается в диалоговом окне) Таблицы. Как убрать показ количества строк результата в заголовке таблицы? Таблицы. Как связать таблицу и редактирование сущности (зависимая страница) Таблицы. Как использовать комментарии в таблицах Таблицы. Как добавить в фильтре значение Не выбрано со значением Таблицы. Как установить ширину колонки в таблице Таблицы. Как добавить диапазон даты или чисел (слайдер) в фильтр Таблицы. Как сделать операции только для некоторых строк Таблицы. Как делать различный набор столбцов одной таблицы для разных ролей Таблицы. Как реализовать подтаблицу (вложенная таблица), подформу в таблице Таблицы. Как скрыть строчные операции в таблице для определенных строк Таблицы. Как добавить коллбек после загрузки таблицы Таблицы. Отображение таблиц на смартфоне Таблицы. Как работать с галочками в таблице Таблицы. Частые ошибки при настройке таблицы (почему не работает таблица) Таблицы. Как обновить подтаблицу после выполнения некой операции Таблицы. Как обрабатывать групповые операции через модальную форму Таблицы. Как создать предустановленные фильтры для таблицы Как сделать сворачивание таблицы (collapse table) Таблицы. Загрузка таблицы по ссылке Как убрать старые dict процедуры в формах и таблицах Таблица. Как сделать фильтр с деревом галочек Таблицы. Как отключить сохранение состояния таблицы (фильтры) Таблицы. Как сделать ссылку на всю строку таблицы Таблицы. Как передать через URL значение фильтра Таблицы. Как сделать обрезание ячеек таблицы Таблица. Создание сущности с учетом значений фильтров Сортировка строк в таблице Оптимизация запроса SQL - извлечение данных для таблицы Кастомная разметка в таблице Таблицы. Как настроить дополнительные шапку и подвал у таблицы Таблица. Режим кастом вывода через JS (custom) Таблица. Как сделать зависимые фильтры в таблице Импорт данных в формате файлов txt, csv через таблицу Как гибко управлять видимостью столбцов таблицы Таблица. Как сделать раскрытие подстроки через любую ссылку Таблица. Режим быстрой фильтрации строк без обращения на сервер Выпадающая панель рядом с названием таблицы dropdownPanel Таблицы. Как убрать при загрузке установку фокуса ввода на фильтр (data-nofocus)? Как сделать аналитику по периодам (таблица с интервалами дат)
- Формы
- Загрузка файлов, картинок
- Работа с SQL
- HOWTO JS
- HOWTO Верстка
- Решение проблем
Выгода от использования Falcon Space
В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Нужна бесплатная консультация?
Планируете делать веб-проект?
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта