Неофициальный форум пользователей Qlik Sense & Qlikview

Для разработчиков => Вопросы по Qlik Sense & QlikView => Тема начата: d.pimkin от 11 марта 2015, 02:13:04

Название: Доступность в рабочее время
Отправлено: d.pimkin от 11 марта 2015, 02:13:04
Доброго времени суток!

Похожую задачу я уже как-то озвучивал на форуме. Сейчас условие немного другое.
Имеется таблица событий следующего типа
(https://qliksense-forum.ru/qvf/proxy.php?request=http%3A%2F%2Fs015.radikal.ru%2Fi331%2F1503%2Fc4%2F5fe084b4d76c.png&hash=56816a7e33d57b3c2391974aa8cd430483a56b6b)
time - начало события,
nexttime - конец события
diff - интервал в формате hh:mm:ss
start_dw -первый день недели рабочего времени
end_dw - последний день рабочего времни
start_time - начало раб.времени
end_time - конец раб. времени

Нужно посчитать разницу между time и nexttime в рабочее время.
Когда time и nexttime - один день, это легко, а вот если это разные дни? У меня даже идей нет...
Название: Re: Доступность в рабочее время
Отправлено: admin от 11 марта 2015, 08:14:36
День добрый.
Что-то сразу не вникну, как понять (как считается) разница между time и nexttime в рабочее время?
Можно разъяснить на примере?
Название: Re: Доступность в рабочее время
Отправлено: d.pimkin от 12 марта 2015, 09:34:15
Согласен, слово "доступность" вообще можно убрать.
Необходимо посчитать количество времени за интервал time-nexttime, которое пришлось на рабочее время хоста.
Например: time - 03.02.2015 02:17, nexttime - 06.02.2015 09:23; Рабочее время (график) хоста - Пн-Пт 03:00-16:00 (start_dw - 1, end_dw - 5, start_time 03:00, end_time - 16:00). Значит, мне нужно вычислить, сколько чч:мм из исходных 79:06 пришлось на Пн-Пт 03:00-16:00
Название: Re: Доступность в рабочее время
Отправлено: admin от 12 марта 2015, 09:59:21
Что еще может потребоваться извлечь из сведений о состоянии триггеров анализируемой системы?
За какой диапазон дат будут анализироваться данные в приложении?
Название: Re: Доступность в рабочее время
Отправлено: d.pimkin от 12 марта 2015, 10:13:53
Данные анализируются в скрипте, если что. Т.е. мне нужна в итоге таблица для последующего анализа.
Анализ за всю историю триггеров: сейчас глубина 3 месяца, а триггеров порядка 1к. В сумме это 600к записей. Но в будущем будет в 12 раз больше.
Название: Re: Доступность в рабочее время
Отправлено: bibis от 12 марта 2015, 11:09:36
Ну что-то вроде:
floor(NextTime-Time)* 9/24+
if(
if(time(end_time)<time(NextTime),time(end_time),time(NextTime))-
if(time(start_time)>time(time), time(start_time),time(time))
>0,
if(time(end_time)<time(NextTime),time(end_time),time(NextTime))-
if(time(start_time)>time(time), time(start_time),time(time))
)
Название: Re: Доступность в рабочее время
Отправлено: d.pimkin от 13 марта 2015, 08:51:13
Честно говоря, не очень понял ваше решение.
Что такое floor(NextTime-Time)* 9/24 ?
И где же проверка на дни недели?
Название: Re: Доступность в рабочее время
Отправлено: bibis от 16 марта 2015, 09:24:44
Не проводил проверку на дни недели.
Тогда будет
networkdays(Time,NextTime)/3+
if(
if(time(end_time)<time(NextTime),time(end_time),time(NextTime))-
if(time(start_time)>time(time), time(start_time),time(time))
>0,
if(time(end_time)<time(NextTime),time(end_time),time(NextTime))-
if(time(start_time)>time(time), time(start_time),time(time))
)

networkdays(Time,NextTime)/3 это собственно  количество целых рабочих дней между началом и концом периода. На 3 делим т.к. раб день принимаем за 8 часов (в предыдущем варианте, принимал раб день за 9 часов, потому писал 9/24, тут сами смотрите, нужно ли учитывать обед )
Название: Re: Доступность в рабочее время
Отправлено: admin от 17 марта 2015, 08:52:52
Добрый день.
Как успехи?
А прорабатывали вариант с использованием intervalmatch ?
Название: Re: Доступность в рабочее время
Отправлено: bibis от 17 марта 2015, 09:11:18
Только сейчас кстати заметил, что раб день не нормирован.
Тогда меняем
networkdays(Time,NextTime)/3
на
networkdays(Time,NextTime)* (end_time-start_time)
Название: Re: Доступность в рабочее время
Отправлено: d.pimkin от 17 марта 2015, 09:46:01
Спасибо за решения. Попробую сегодня этот способ.
На днях решил эту задачу средствами SQL, забыл отписать.