2013-07-06 2 views
0

Я работаю над инструментом календаря бронирования гостиниц, где мне нужно рассчитать средняя цена за ночь за бронирование, которое появляется между двумя произвольными датами поиска. Что следует учесть:Расчет нескольких выходных данных SUMPRODUCT (Google Таблицы)

  • бронировки записываются с помощью проверки в срок и даты выезда
  • вместе с ценой одного бронирования (все на той же строке)
  • Дата отъезда считается как вакантными, так как комната будет пуста от ежедневной проверки в срок
  • мы только хотим, чтобы стоимость бронирования в те дни, которые попадают между поиском 2 даты
  • быть ясно, заказы могут простираться вставить первый & второй даты поиска, но мы будем игнорировать дневные значения за эти дни. yond финиковые конечности
  • Я действительно хочу сделать это с помощью формул, а не код

Я играл с SUMPRODUCT формулой всего день, и получили довольно близко к желаемому результату - это особое исполнение только фиксирует общее количество комнат, заполненных в течение периода, но изменить его, чтобы вернуть значения не проблема:

=ARRAYFORMULA(SUMPRODUCT(GTE(Bookings_EndDate,ReportExec_StartDate+1), LTE(Bookings_StartDate,ReportExec_EndDate+0),IF((Bookings_StartDate<=ReportExec_StartDate)*(Bookings_EndDate>=ReportExec_EndDate),((ReportExec_EndDate-ReportExec_StartDate+1)),IF(Bookings_StartDate<ReportExec_StartDate,Bookings_EndDate-ReportExec_StartDate,IF(Bookings_EndDate>ReportExec_EndDate,(ReportExec_EndDate+1)-Bookings_StartDate,0))))) 

То, что я думаю, что проблема здесь, является то, что вычисление массива выводит только условие встретило первый IF(), поэтому я уверен, что это неправильный подход. Быстрая ориентация названных диапазонов:

  • ReportExec_StartDate/ReportExec_EndDate = дата поиска 1/поиск даты 2
  • Bookings_StartDate/Bookings_EndDate = столбцы, содержащие регистрация заезда/выезда

первой ПЧ (), отслеживает все заказы, которые продлевают срок до/после даты поиска. 2-й вложенный IF() охотится на бронирование, которое распространяется только до первой даты поиска. . 3-й вложенный IF() охотится на бронирование, которое распространяется только за 2-ю поисковую дату.

В Excel это было бы проще, но Google - новая игрушка для меня - любые мысли приветствуются!

ответ

0

В конце концов, я получил правильные цифры. Существует множество решений для заполнения столбца, прилегающего к набору данных, но у меня возникли проблемы с получением единственного решения.

Это работает очень похож на большинство SUMPRODUCT формул:

  • первые два результата устанавливает фильтр в бронированиях, где часть или весь период лежит между датами поиска
  • третьего результирующий набор возвращает СРЕДНЕМ ППНО для все отфильтрованного заказа
  • последнего набор результатов использует вложенный IF() возвращает количество дней бронирования, которые попадают между 2 поиском датой

Надежда это часа elps кто-то еще :)

=ARRAYFORMULA(SUMPRODUCT(NOT(GT(Bookings_StartDate,ReportExec_EndDate)), NOT(LT(Bookings_EndDate,ReportExec_StartDate)),IF(Bookings_Nights,(Bookings_ValueA/Bookings_Nights),0),(IF(Bookings_EndDate>ReportExec_EndDate,ReportExec_EndDate+1,Bookings_EndDate)-IF(Bookings_StartDate<ReportExec_StartDate,ReportExec_StartDate,Bookings_StartDate)))) 
Смежные вопросы