Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Февраль 24, 2018, 12:57:05 am

Автор Тема: Есть в QV аналог аналитическим функциям в Oracle?  (Прочитано 974 раз)

Оффлайн evaeve1en

  • Стажер
  • *
  • Сообщений: 1
  • Страна: ru
  • Рейтинг: +0/-0
    • Просмотр профиля
Добрый день! Мне очень нужна помощь.
Задача звучит просто, но как сделать пока не могу найти.

Задача:
Есть задания (tasks), есть логи изменения их состояний (task_logs)
Выглядит это допустим так:


Мы видим, что task1 (task_id=1) был 'создан'(created), 'назначен'(assigned) и 'взят в работу'(active) в неделю под номером W43.
А task2 был создан и назначен в W42, в W43 с ним ничего не происходило, поэтому нет ни одной записи за эту неделю о изменении его статуса, а в W44 он был решен и закрыт.

Мне же необходимо построить chart с грануляцией по неделям с информацией сколько же в каждую неделю было незакрытых task-ов(т.е. все задания в статусах не равных 'закрыт'). За W43 у меня есть записи в логах только по одному task-у, но 'незакрытых' task-ов должно посчитаться 2, а не 1.

Каким образом можно это сделать? в оракле я б использовала аналитические функции, а тут мне не хватает знаний.

Огромное спасибо за помощь! очень жду ваших советов

Оффлайн bibis

  • Наставник
  • **
  • Сообщений: 78
  • Рейтинг: +31/-0
    • Просмотр профиля
Re: Есть в QV аналог аналитическим функциям в Oracle?
« Ответ #1 : Ноябрь 02, 2015, 09:46:19 am »
Добрый день. Первое,что приходит в голову
Сначала перестроить таблицу, так чтобы появилось 2 столбца: BEGIN_wk END_wk:
Примерно так:
 tmp:
 LOAD *,
if(id_task=Previous(id_task) ,   Previous(week),  weekname('01.01.2100') ) as END_wk, weekname(log_updated_at) as BEGIN_wk
 from task_logs  where  status='created' or  status='closed'
Order by id_task, log_updated_at desc;

interval_table:
load * resident tmp where status='created';

drop table tmp;

Затем можно это дело привязать к календарю через Intervalmatch (WEEK_FROM_CALENDAR) load BEGIN_WK ,END_WK resident tmp;
Ну и дальше считать через count  distinct