Страницы: 1
RSS
Определить кто с кем из сотрудников пересекается по датам отпусков, Есть график отпусков. Пересечения определятся если они есть, но не понятно с каким сотрудником/ми
 
Здравствуйте!
Подскажите пожалуйста как сделать вывод имен сотрудников с кем в датах пересекаются отпуска.
Т.е. чтобы вместо "Есть пересечения" в AL были все имена из AI с кем пересечения по датам.
 
Добрый день!
вариант на PQ
 
формула массива, тянуть вправо и вниз
Код
=ЕСЛИОШИБКА(ИНДЕКС($AI:$AI;АГРЕГАТ(15;6;СТРОКА($AI5:$AI$57)/(ЕСЛИ($AK5:$AK$57>$AK4;$AK4;$AK5:$AK$57)-ЕСЛИ($AJ5:$AJ$57>$AJ4;$AJ5:$AJ$57;$AJ4)+1>0);ЧИСЛСТОЛБ($AI$4:AI$4)));"")
 
Спасибо большое!
 
Цитата
написал:
Добрый день!
вариант на PQ
Добрый день!
пригодилась ваша таблица, можно вопрос по лимитам дней. Как они рассчитываются, вижу стоит формула, но не могу ее понять.
 
Цитата
написал:
Добрый день!вариант на PQ
Отличный вариант, но заметил баг. Когда даты пересекаются больше чем у двух людей и сами даты одинаковы, получается ситуация как на скрине. Если даты немного сдвинуть хотя бы на день, то все ок. Как это поправить ?  
Изменено: Minpower220 - 28.08.2023 14:43:25 (Скрины)
 
Цитата
Minpower220 написал:
Как это поправить ?  
в чужом коде копаться не стал, написал свой (не самый быстрый, над оптимизацией не думал - все "в лоб"). Вроде, отрабатывает ваш случай без ошибки.
Код
let
    Source = Excel.CurrentWorkbook(){[Name="vacations"]}[Content],
    vacations_list = List.Buffer(Table.ToRecords(Source)),
    max_count = Table.RowCount(Source),
    fx = (rec, lst) =>
        [a = 
            List.Select(
                lst, 
                each 
                    [фио] <> rec[фио] and 
                    (  (rec[Начало] >= [Начало] and rec[Начало] <= [Конец]) 
                        or 
                       (rec[Конец] >= [Начало] and rec[Конец] <= [Конец])
                    )
            )][a],

    g = 
        List.Generate(
            () => [i = 0, cross = fx(vacations_list{0}, vacations_list)],
            (x) => x[i] < max_count, 
            (x) => [i = x[i] + 1, cross = fx(vacations_list{i}, vacations_list)],
            (x) => Record.AddField(vacations_list{x[i]}, "С кем", Text.Combine(List.Distinct(List.Transform(x[cross], each [фио])), ", "))
        ),
    z = Table.FromRecords(g)
in
    z
Пришелец-прораб.
 
Alien Sphinx,
для кого в лоб а кому то по лбу

однако
 
Сергей, я не пытаюсь "жеманничать". Сравнивать все записи против всех остальных - ну чем здесь гордиться? Как есть "в лоб".
Пришелец-прораб.
 
Alien Sphinx, я не про это

Имел в виду , что и такого не знал
Страницы: 1
Наверх