anty762
Дата: Воскресенье, 05.11.2023, 00:54 |
Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация:
0
±
Замечаний:
0% ±
Добрый день. Необходима формула для оптимизации количества смен. В каждой группе найти смены, имеющие "дыры" между окончанием одной смены и началом другой или такие смены, где окончание одной смены равно началу другой. В итоге хотелось бы получить: Группа/смена/кол-во часов/группа, которую можно оптимизировать. Данные на Лист1. На Лист 2 визуалитация того, что хотел получить, т.к. трудно сформулировать задание)
Добрый день. Необходима формула для оптимизации количества смен. В каждой группе найти смены, имеющие "дыры" между окончанием одной смены и началом другой или такие смены, где окончание одной смены равно началу другой. В итоге хотелось бы получить: Группа/смена/кол-во часов/группа, которую можно оптимизировать. Данные на Лист1. На Лист 2 визуалитация того, что хотел получить, т.к. трудно сформулировать задание) anty762
Ответить
Сообщение Добрый день. Необходима формула для оптимизации количества смен. В каждой группе найти смены, имеющие "дыры" между окончанием одной смены и началом другой или такие смены, где окончание одной смены равно началу другой. В итоге хотелось бы получить: Группа/смена/кол-во часов/группа, которую можно оптимизировать. Данные на Лист1. На Лист 2 визуалитация того, что хотел получить, т.к. трудно сформулировать задание) Автор - anty762 Дата добавления - 05.11.2023 в 00:54
AlienSphinx
Дата: Понедельник, 06.11.2023, 11:25 |
Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация:
8
±
Замечаний:
0% ±
365
формулой, наверное, сложновато будет (хотя...). Вот вам вариант в PQ. [vba]Код
let Source = Excel.CurrentWorkbook(){[Name="смены"]}[Content], g = Table.Group(Source, "группа", {{"shifts", each Table.ToRecords(_)}}), fx = (lst as list) => List.Transform( lst, (z) => [a = List.Select(lst, (x) => z[конец смены] <= x[начало смены]), tx = List.Transform( a, (w) => z[группа] & "/" & Text.From(z[смена]) & "/" & Duration.ToText(Duration.From(w[начало смены] - z[конец смены])) & "/" & Text.From(w[смена]) )][tx] ), tx = Table.TransformColumns(g, {"shifts", (h) => List.Combine(fx(h))}), sh = List.Combine(tx[shifts]) in sh
[/vba]
формулой, наверное, сложновато будет (хотя...). Вот вам вариант в PQ. [vba]Код
let Source = Excel.CurrentWorkbook(){[Name="смены"]}[Content], g = Table.Group(Source, "группа", {{"shifts", each Table.ToRecords(_)}}), fx = (lst as list) => List.Transform( lst, (z) => [a = List.Select(lst, (x) => z[конец смены] <= x[начало смены]), tx = List.Transform( a, (w) => z[группа] & "/" & Text.From(z[смена]) & "/" & Duration.ToText(Duration.From(w[начало смены] - z[конец смены])) & "/" & Text.From(w[смена]) )][tx] ), tx = Table.TransformColumns(g, {"shifts", (h) => List.Combine(fx(h))}), sh = List.Combine(tx[shifts]) in sh
[/vba] AlienSphinx
Ответить
Сообщение формулой, наверное, сложновато будет (хотя...). Вот вам вариант в PQ. [vba]Код
let Source = Excel.CurrentWorkbook(){[Name="смены"]}[Content], g = Table.Group(Source, "группа", {{"shifts", each Table.ToRecords(_)}}), fx = (lst as list) => List.Transform( lst, (z) => [a = List.Select(lst, (x) => z[конец смены] <= x[начало смены]), tx = List.Transform( a, (w) => z[группа] & "/" & Text.From(z[смена]) & "/" & Duration.ToText(Duration.From(w[начало смены] - z[конец смены])) & "/" & Text.From(w[смена]) )][tx] ), tx = Table.TransformColumns(g, {"shifts", (h) => List.Combine(fx(h))}), sh = List.Combine(tx[shifts]) in sh
[/vba] Автор - AlienSphinx Дата добавления - 06.11.2023 в 11:25