Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Привет.
Предложите пож-та решение проблемы.
Вкратце опишу вопрос. Необходимо при выборе фильтра name (Задача), получать корректное значение по срокам выполнения задачи, а именно срок выполнения задачи в рабочих днях.
В примере при выборе фильтра "задача1", которая имеет start_date = 13.01.2017 и finish_date = 18.01.2017. Необходимо рассчитать разница между этими датами с учётом выходных дней.
Таблица"Calendar" имеет 2 поля, Data и Id_status (значение поля =0 - это выходные; 1- рабочие дни).
Во вложении скрины + архив с файлов приложения *.qvf и таблица в *.xlsx
Заранее благодарен.
Добрый день, Андрей. Попробуй использовать для этого networkdays (start_date, finish_date)
Андрей, добрый день. Спасибо за ответ.
Пробовал данную функцию. Есть у неё один минус, если start_date = дата выходного, то расчёт получается некорректный (по крайней мере у меня так вышло). В связи с этим, мне это не походит.
Нужно всё же как-то пробовать привязать производственный календарь к датам start и finish.
Так же пробовал с помощью функции IntervalMatch(). НО, есть в этом также минус, если много данных, Qlik не справляется, я так понимаю что каждой задачи присваивает интервал и слишком много записей в таблице получается.
При варианте из вашего примера, формула такая получится.
= SUM ( { < Data = {">=$(=min(start_date))<=$(=max(finish_date))"} > } Id_status)
Если использовать в таблице, добавьте агрегирование или по названию или по ID (но ID у вас не совпадают в примере)
= SUM ( AGGR (
SUM ( { < Data = {">=$(=min(start_date))<=$(=max(finish_date))"} > } Id_status)
, name) )
Как вариант, проставить флаги в календаре для рабочих и не рабочих дней если нужно включить какие-то праздники или использовать определенный производственный календарь и в set analysis отфильтровать
Count({< Флаг = {1} >} DISTINCT Дата)
или еще как-то попробовать
Count(DISTINCT If(not Match(WeekDay(Дата), 'Сб', 'Вс') and not Match(Дата, $(=СписокДатДляИсключения)), Дата))
или тоже самое в set analysis
Count({< ДеньНедели -={'Сб', 'Вс'}, Дата -= {"$(=СписокДатДляИсключения)"} >} DISTINCT Дата)
Еще момент, Андрей, под рукой нет QS и посмотреть файл нет возможности. По сему ответ Станислава может быть куда более осмысленным.
Станислав, Андрей, благодарю за ответ.
По варианту Станислава расчёт рабочих дней происходит корректно при выборе фильтра "Задача1" или "Задача2" . см.скрины
А как сделать, чтобы мера в таблице вела подсчёт по количеству рабочих дней и без выбора фильтров "Задача1" или "Задача2"???
Попробуйте так, специально на куски разбил для удобочитаемости
=
SUM ( { < Data = {"
>=
$(=aggr(min(start_date)),name)
<=
$(=aggr(max(finish_date)),name)
"} > } Id_status)
Станислав, такой вариант и с фильтрами и без них показывает "0"
Решал подобную задачу сделав предрасчет при загрузке в скрипте
NetWorkDays(<Дата начала>, <Дата окончания>, $(vHolidays)) as WorkDays
Список праздничных дней брал отсюда