Страницы: 1
RSS
Power Query округление времени до 15 минут и преобразование после округления в десятичный формат
 
Добрый день.


Есть таблица, где в первой колонке time введено время

Нужно сделать округление этого времени через Power Query в радиусе ближайших 15 минут, как показано во втором столбце, в таком формате:


- 00:10:00 до 00:15:00

- 00:35:00 до 00:30:00

- 00:40:00 до 00:45:00

- 00:53:00 до 01:00:00

- 01:13:00 до 01:15:00


А затем перевести эти округления в десятичную форму, как показано в 3-м столбце, в таком виде:


- 00:15:00 в 0,25

- 00:30:00 в 0,5

- 00:45:00 в 0,75

- 01:00:00 в 1

- 01:15:00 в 1,25

и так далее с разрядами, из расчета, что каждые 15 минут равно 0,25


Подскажите пожалуйста, есть ли способ в Power Query это реализовать? Если что непонятно, спрашивайте. Заранее спасибо!


P.S. почему именно сначала округление, а затем преобразование в десятичность? В акц-бд таким алгоритмом получилось сделать. А в PQ не знаю, может алгоритм другой))
Изменено: Raven2009 - 13.03.2018 23:34:53
 
Доброе время суток.
Цитата
Raven2009 написал:
сделать округление этого времени через Power Query
А вы уверены, что на форуме ничего по этому вопросу нет? Увы, вы не первый ;)
Успехов.
 
Ага, особенно если учесть, что это его же тема! :D
Вот горшок пустой, он предмет простой...
 
Цитата
Андрей VG написал:
Успехов.
Cпасибо.
Цитата
PooHkrd написал:
Ага, особенно если учесть, что это его же тема!
Если учитывать, что там было округление до 10 минут, да.

Всем спасибо за помощь.
 
А какая разница? Алгоритм абсолютно тот же, только переменные разные. У вас же проблема по факту не с PQ, а с тем как алгоритмически решить задачу.
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
У вас же проблема по факту не с PQ, а с тем как алгоритмически решить задачу.
Именно так. Спасибо.
 
Сделано. Всем спасибо. Файл вложил
 
Добрый день.

Изивняюсь, снова по данному вопросу.

Заметил одно несоответствие: в таблице время 3:07:10 (выделил цветом) округляется через Power Query до 3:00:00, однако согласно ТЗ должно округляться до 3:15:00 (до 15 минут).

Остальное все округляется корректно.

Возможно как_то дополнить данный код, чтобы ничего не сломать?
Код
Table.TransformColumns(#"11", {{"пп", each Time.From(Number.Round( _ * 24 * 4, 0 ) / ( 24 * 4 )), type time}})
 
Цитата
Raven2009 написал:
время 3:07:10 (выделил цветом) округляется через Power Query до 3:00:00, однако согласно ТЗ должно округляться до 3:15:00 (до 15 минут).
Это как? А 10,45 до целых тоже должно округляться до 11?
 
Цитата
Андрей VG написал:
Это как?
Извиняюсь, запутался в этих округлениях и переводах)

Удивительное извращение мои иностранные коллеги изобрели...))
 
Цитата
Raven2009 написал:
Удивительное извращение мои иностранные коллеги изобрели...))
Может просто описались? Запросите, а как быть в случаях 22, 37, 52 минут?
 
На всякий случай...
Колонка, которую преобразуем изначально должна быть в формате "type number".
Шаг, который проделываем подразумевает изменение уже существующей колонки
Код
#"Округление времени вниз до часа" = Table.TransformColumns(#"Название предыдущего шага", {{"Название колонки, которую необходимо округлить", each Time.From(Number.RoundDown( _ * 24 * 1, 0 ) / ( 24 * 1 )), type time}})

#"Округление времени вниз до 30 мин = Table.TransformColumns(#"Название предыдущего шага", {{"Название колонки, которую необходимо округлить", each Time.From(Number.RoundDown( _ * 24 * 2, 0 ) / ( 24 * 2 )), type time}})

#"Округление времени вниз до 20 мин = Table.TransformColumns(#"Название предыдущего шага", {{"Название колонки, которую необходимо округлить", each Time.From(Number.RoundDown( _ * 24 * 3, 0 ) / ( 24 * 3 )), type time}})

#"Округление времени вниз до 15 мин = Table.TransformColumns(#"Название предыдущего шага", {{"Название колонки, которую необходимо округлить", each Time.From(Number.RoundDown( _ * 24 * 4, 0 ) / ( 24 * 4 )), type time}})

#"Округление времени вниз до 10 мин = Table.TransformColumns(#"Название предыдущего шага", {{"Название колонки, которую необходимо округлить", each Time.From(Number.RoundDown( _ * 24 * 6, 0 ) / ( 24 * 6 )), type time}})
Если заменить Number.RoundDown на Number.RoundUp - произойдет округление вверх с соответствующими интервалами времени.

P.S. Мне пригодилось при расчете количества кассовых операций за временной промежуток с интервалом в 30 мин.
Страницы: 1
Наверх