多输出计算SUMPRODUCT(Google表格)

时间:2013-07-06 17:38:22

标签: array-formulas google-sheets

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

  • 使用入住日期和退房日期记录预订
  • 连同一个预订价格(一切都在同一行)
  • 退房日期计为空置,因为每日入住时间房间将为空
  • 我们只想要搜索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中这会更容易,但谷歌对我来说是一个新玩具 - 欢迎任何想法!

1 个答案:

答案 0 :(得分:0)

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

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

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

希望它可以帮助别人:)

=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))))