0

我正在开发一个酒店预订日历工具,我需要计算出现在 2 个任意搜索日期之间的预订的每晚平均价格。需要考虑的事项:

  • 使用入住日期和退房日期记录预订
  • 连同一个单一的预订价格(一切都在同一行)
  • 退房日期算作空置,因为在每日入住时间之前房间将是空的
  • 我们只想要搜索 2 个日期之间的日期的预订值
  • 需要明确的是,预订可以延长粘贴第 1 次和第 2 次搜索日期,但我们将忽略超出日期极限的那些日子的每日值
  • 我真的很想使用公式而不是代码来做到这一点

我整天都在玩 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 = 包含入住/退房日期的列

第一个 IF() 条件搜索所有延长到/超过搜索日期的预订 第二个嵌套 IF() 搜索仅在第一个搜索日期之前延长的预订 第三个嵌套 IF() 搜索仅延长到第二个搜索日期之后的预订

在 Excel 中这会更容易,但 Google 对我来说是一个新玩具 - 欢迎任何想法!

4

1 回答 1

0

最后,我得到了正确的数字。有许多解决方案可以填充与数据集相邻的列,但我在获得单值解决方案时遇到了很多麻烦。

它的工作方式与大多数 SUMPRODUCT 公式非常相似:

  • 前 2 个结果集在部分或全部期间位于搜索日期之间的预订中过滤
  • 第三个结果集返回所有过滤预订的平均 PPN
  • 最后一个结果集使用嵌套的 IF() 返回两个搜索日期之间的预订天数

希望它可以帮助别人:)

=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))))
于 2013-07-12T11:49:12.050 回答