0

私はホテル予約カレンダー ツールに取り組んでおり、任意の 2 つの検索日の間に表示される予約の1 泊あたりの平均価格を計算する必要があります。考慮事項:

  • 予約はチェックイン日とチェックアウト日を使用して記録されます
  • 単一の予約価格とともに (すべてが同じ行にあります)
  • 毎日のチェックイン時間までに部屋が空になるため、チェックアウト日は空室としてカウントされます
  • 検索した 2 つの日付の間に該当する日の予約値のみが必要です
  • 明確にするために、予約は検索の 1 番目と 2 番目の日付を超えて延長することができますが、日付の端点を超えたこれらの日の 1 日の値は無視されます
  • コードではなく数式を使用してこれを行いたい

私は一日中 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() 条件は、検索日までまたは検索日を過ぎたすべての予約を検索します 2 番目のネストされた IF() は、最初の検索日より前にのみ延長された予約を検索します 3 番目のネストされた IF() は、2 番目の検索日を超えてのみ延長された予約を検索します

Excel ではこれは簡単ですが、Google は私にとって新しいおもちゃです。

4

1 に答える 1

0

やっと正しい数値が出ました。データセットに隣接する列を設定するための解決策はたくさんありますが、単一の値の解決策を得るのに苦労しました。

これが機能する方法は、ほとんどの SUMPRODUCT 式と非常によく似ています。

  • 最初の 2 つの結果セットは、一部またはすべての期間が検索日付の間にある予約でフィルター処理されます
  • 3 番目の結果セットは、フィルター処理されたすべての予約の平均 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))))
于 2013-07-12T11:49:12.050 に答える