Основа Falcon SpaceРуководстваОсновные компонентыВозможностиКоммуникация пользователейДизайн, стилизация, юзабилитиЛендингиУниверсальный APIИнтеграцииКаталогиНавигацияДокументыДополнительные компонентыПродвижение, SEOСистемные моментыСистемное администрированиеHOWTOТаблицыФормыПоля формыЗагрузка файлов, картинокHOWTO SQLHOWTO JSHOWTO ВерсткаРешение проблем
Выгода от использования Falcon Space
В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Как сделать аналитику по периодам (таблица с интервалами дат)
Создаем такой отчет по периодам:
Для этого указываем столбцы таблицы 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 поиск по нашей документации
Нужна бесплатная консультация?
Планируете делать веб-проект?
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта