2016-08-01 3 views
0

Скажем, у нас есть некоторые данные, а затемExcel функция работает общая/окно

Datetime    Type Sale 
25/07/2016 03:21  A  12 
25/07/2016 04:00  B  23 
25/07/2016 15:20  B  5 
26/07/2016 05:15  A  15 
26/07/2016 10:20  A  3 
26/07/2016 16:10  B  20 
27/07/2016 10:10  B  5 

....... 

вопрос: «Найти на 36-часовой кадр, где мы имеем наибольший общий объем продаж продукции типа А» с помощью Excel.

Из того, что я понимаю, и если я попытаюсь приблизиться к нему, 36-часовой кадр будет означать для каждой записи, мы посмотрим на рамку с этого момента. Например, возьмите первую запись, начиная с нее будет 25/07/2016 03:21 -> 26/07/2016 15:21, через 1,5 дня, что означает, что сумма для этого кадра составляет 12 + 15 + 3 , Принимая что-нибудь позже или раньше, чем рассматриваемая запись уменьшит сумму, не так ли? Принимая каждую запись в качестве отправной точки, ваша сумма «охватывает самые дальней».

  1. Это выглядит как оконная сумма в SQL для меня. Как найти решение только с помощью Excel?

  2. Было бы неплохо, если бы вы могли предоставить решение и в SQL.

спасибо.

+0

Можете ли вы вставить ожидаемый вывод. Для работы с общим количеством файлов Excel проверьте этот https://support.office.com/en-us/article/Calculate-a-running-total-170fa72a-a0f4-4476-9708 -5a9f993668e9 – TheGameiswar

+0

У меня нет исходного ввода и вывода. Это был тестовый вопрос. Каким будет ваш подход, независимо от реального входа? – Kenny

ответ

1

Вам необходимо предоставить более подробную информацию о том, как работает ваше 36-часовое окно; это просто любое произвольное 26-часовое окно или они задают интервалы с определенными начальными и конечными точками? Если это последний, вы можете сделать это только с дополнительной таблицей Datetime Periods, чтобы вы могли рассчитать суммы.

Для первого, однако, вы можете посмотреть 36-часовой период до и после каждой продажи, а затем найти максимальное значение этих значений. Самый простой способ сделать это - использовать Table в excel и следующих формулах SUMIFS, которые ищут все продажи того же типа, что и в строке со значением Datetime 36 часов (1,5 дня) до или после значения Datetime в данная строка:

Начните с выбора вам данные, а затем вставить таблицу:

enter image description here

затем добавьте два столбца и введите следующие формулы:

Предыдущая 36 часов:
= SUMIFS ([Продажа], [Type], [@ Type], [Datetime], ">" & [@Datetime] -1,5 [Datetime], "< =" & [@Datetime])

Следующая 36 часы работы:
= SUMIFS ([Продажа], [Type], [@ Type], [Datetime], "< "& [@Datetime] +1,5 [Datetime],"> =" & [ @Datetime])

enter image description here

Для этого в SQL с использованием 36 часовых периодов Datetim e вы можете использовать следующее. Я включил как предыдущий, так и следующие 36-часовые периоды, поскольку, глядя только в одном направлении, вы пропустите продажи либо в начале, либо в конце набора данных.Windowed функция не позволяет указать управляемые окна данных, так что вам нужно использовать либо присоединяется или суб-выбирает для достижения того, что вы после:

declare @data table(dt Datetime, Type nvarchar(50), Sale int) 
insert into @data 
values 
('2016/07/25 03:21','A',12) 
,('2016/07/25 04:00','B',23) 
,('2016/07/25 15:20','B',5) 
,('2016/07/26 05:15','A',15) 
,('2016/07/26 10:20','A',3) 
,('2016/07/26 16:10','B',20) 
,('2016/07/27 10:10','B',5) 

select a.dt 
     ,a.Type 
     ,a.Sale 
     ,sum(dprev.Sale) as PrevSales 
     ,a.NextSales 
from(
    -- If you only want the proceeding 36 hour period you can just use this part -- 
    select d.dt 
      ,d.Type 
      ,d.Sale 
      ,sum(dnext.Sale) as NextSales 
    from @data d 
     left join @data dnext 
      on(d.Type = dnext.Type 
       and dnext.dt between d.dt and dateadd(hour,+36,d.dt) 
       ) 
    group by d.dt 
      ,d.Type 
      ,d.Sale 
    ------------------------------------------------------------------------------- 
) a 
    left join @data dprev 
     on(a.Type = dprev.Type 
      and dprev.dt between dateadd(hour,-36,a.dt) and a.dt 
      ) 
group by a.dt 
     ,a.Type 
     ,a.Sale 
     ,a.NextSales 
order by a.Type 
     ,a.dt 
+0

Это одна важная точка вопроса, которую я предполагаю. См. Мой обновленный вопрос. Если вы определяете произвольное 36 часов, у вас не будет оптимальной суммы. 36-часовой запуск должен начинаться с каждой записи, чтобы «проехать дальше». – Kenny

+0

@ Kenny Отредактированный ответ, чтобы отразить определение 36-часового периода. – iamdave

1

пишет в E2 с формулой ниже
=SUMIFS($C$2:$C$8,$B$2:$B$8,"=A",$A$2:$A$8,">="&A2,$A$2:$A$8,"<"&A2+1.5)

enter image description here

Смежные вопросы