次の 12 か月の各日について、日付別のさまざまなアイテムの売上を示すクエリ (MS Access 2013) があります。別のテーブルには、各アイテムの既知の購入リードタイム (30 日から 90 日など) があります。クエリを作成し、各アイテムについて、次を使用して、リードタイムに従って将来の日付を計算しました。
FutureDate: DateAdd("d",[Leadtime],Date())
すべてのアイテムが Sales クエリに存在し、すべての FutureDates が Sales に存在するレコード内にあることを検証しました。
各アイテムの一意のリードタイム内に予想される売上の合計額を取得するために、現在と各アイテムの計算された [FutureDate] の間の毎日の売上の合計を計算する必要があります。
関数 DSUM() を試してみましたが、奇妙な結果が得られました。
Daily Sales のクエリはすでに過去の売上を除外しているため、最初に試したのは次のとおりです。
TotalSalesInLeadtime: DSUM("DailySales","Sales","[DayOfSale]<=#" & [FutureDate] & "# AND [Item]='" & [SearchedItem] &"'")
一部のアイテムでは、[TotalSalesInLeadtime] が正しく計算されましたが、他のアイテムでは Null と評価されました。
それから私は試しました:
TotalSalesInLeadtime: DSUM("DailySales","Sales","[DayOfSale] BETWEEN #" Date() "# AND #" & [FutureDate] & " AND [Item]='" & [SearchedItem] &"'")
今の結果は逆転しました。[TotalSalesInLeadtime] の値は、以前は Null を示していたアイテムに対して正しく表示され、以前は正しく評価されていたアイテムに対して Null でした。
DSUM() がこれを行った理由がわかりませんでした。
DSUM() の不具合を回避するために、埋め込まれたサブクエリを使用しました。これにより、パフォーマンスが大幅に低下しましたが、すべての値が正しく生成されました。
SELECT [PurchItem],
(SELECT Sum([DailySales]) AS SumOfSales
FROM [Sales]
WHERE ([Item]=[LeadtimeItems].[PurchItem]) AND ([DayOfSale] Between Date() AND [LeadtimeItems].[FutureDate]))
As TotalSalesInLeadtime
FROM LeadtimeItems
DSUM がこのように動作する理由を誰かが知っている場合は、助けていただければ幸いです。DSUM が機能すると、確かに速くなるようです。