Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Декабрь 18, 2017, 06:17:45 am

Автор Тема: Доступность в рабочее время  (Прочитано 2241 раз)

Оффлайн d.pimkin

  • Новичок
  • *
  • Сообщений: 28
  • Рейтинг: +3/-0
    • Просмотр профиля
Доступность в рабочее время
« : Март 11, 2015, 02:13:04 am »
Доброго времени суток!

Похожую задачу я уже как-то озвучивал на форуме. Сейчас условие немного другое.
Имеется таблица событий следующего типа

time - начало события,
nexttime - конец события
diff - интервал в формате hh:mm:ss
start_dw -первый день недели рабочего времени
end_dw - последний день рабочего времни
start_time - начало раб.времени
end_time - конец раб. времени

Нужно посчитать разницу между time и nexttime в рабочее время.
Когда time и nexttime - один день, это легко, а вот если это разные дни? У меня даже идей нет...

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1005
  • Страна: ru
  • Рейтинг: +103/-0
    • Просмотр профиля
Re: Доступность в рабочее время
« Ответ #1 : Март 11, 2015, 08:14:36 am »
День добрый.
Что-то сразу не вникну, как понять (как считается) разница между time и nexttime в рабочее время?
Можно разъяснить на примере?

Оффлайн d.pimkin

  • Новичок
  • *
  • Сообщений: 28
  • Рейтинг: +3/-0
    • Просмотр профиля
Re: Доступность в рабочее время
« Ответ #2 : Март 12, 2015, 09:34:15 am »
Согласен, слово "доступность" вообще можно убрать.
Необходимо посчитать количество времени за интервал 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

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

Re: Доступность в рабочее время
« Ответ #2 : Март 12, 2015, 09:34:15 am »

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1005
  • Страна: ru
  • Рейтинг: +103/-0
    • Просмотр профиля
Re: Доступность в рабочее время
« Ответ #3 : Март 12, 2015, 09:59:21 am »
Что еще может потребоваться извлечь из сведений о состоянии триггеров анализируемой системы?
За какой диапазон дат будут анализироваться данные в приложении?

Оффлайн d.pimkin

  • Новичок
  • *
  • Сообщений: 28
  • Рейтинг: +3/-0
    • Просмотр профиля
Re: Доступность в рабочее время
« Ответ #4 : Март 12, 2015, 10:13:53 am »
Данные анализируются в скрипте, если что. Т.е. мне нужна в итоге таблица для последующего анализа.
Анализ за всю историю триггеров: сейчас глубина 3 месяца, а триггеров порядка 1к. В сумме это 600к записей. Но в будущем будет в 12 раз больше.

Оффлайн bibis

  • Наставник
  • **
  • Сообщений: 78
  • Рейтинг: +31/-0
    • Просмотр профиля
Re: Доступность в рабочее время
« Ответ #5 : Март 12, 2015, 11:09:36 am »
Ну что-то вроде:
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))
)

Оффлайн d.pimkin

  • Новичок
  • *
  • Сообщений: 28
  • Рейтинг: +3/-0
    • Просмотр профиля
Re: Доступность в рабочее время
« Ответ #6 : Март 13, 2015, 08:51:13 pm »
Честно говоря, не очень понял ваше решение.
Что такое floor(NextTime-Time)* 9/24 ?
И где же проверка на дни недели?

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

Re: Доступность в рабочее время
« Ответ #6 : Март 13, 2015, 08:51:13 pm »

Оффлайн bibis

  • Наставник
  • **
  • Сообщений: 78
  • Рейтинг: +31/-0
    • Просмотр профиля
Re: Доступность в рабочее время
« Ответ #7 : Март 16, 2015, 09:24:44 am »
Не проводил проверку на дни недели.
Тогда будет
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, тут сами смотрите, нужно ли учитывать обед )

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1005
  • Страна: ru
  • Рейтинг: +103/-0
    • Просмотр профиля
Re: Доступность в рабочее время
« Ответ #8 : Март 17, 2015, 08:52:52 am »
Добрый день.
Как успехи?
А прорабатывали вариант с использованием intervalmatch ?

Оффлайн bibis

  • Наставник
  • **
  • Сообщений: 78
  • Рейтинг: +31/-0
    • Просмотр профиля
Re: Доступность в рабочее время
« Ответ #9 : Март 17, 2015, 09:11:18 am »
Только сейчас кстати заметил, что раб день не нормирован.
Тогда меняем
networkdays(Time,NextTime)/3
на
networkdays(Time,NextTime)* (end_time-start_time)

Оффлайн d.pimkin

  • Новичок
  • *
  • Сообщений: 28
  • Рейтинг: +3/-0
    • Просмотр профиля
Re: Доступность в рабочее время
« Ответ #10 : Март 17, 2015, 09:46:01 am »
Спасибо за решения. Попробую сегодня этот способ.
На днях решил эту задачу средствами SQL, забыл отписать.