使用DSum需要花费大量的时间来计算我需要的数字。我的查询每行大约需要0.1秒,其中有4300行。这意味着每次刷新我的数据库时,大约需要8分钟...访问查询:在不使用DSum的情况下运行总计(或另一种方法)?
我在这里查询的内容很深,但如果您遵循,它应该完全一致。也就是说,如果你知道如何从两个表格和我想要的输出中获得A到B,请随时帮助我。我有一个以下的工作方法,但正如我所说,它只是需要太长时间。
我从下面两个表开始。我想要做的是从我需要的数量中减去我手边的数量,并将任何持续的超额前滚到下一个日期。但是,我不想滚动我所需的数量。
手头
Product | QTY
A | 125
要求(在这个例子中,我需要每月50)
Product | QTY Req | Date Req
A | 50 | 1-1-18
A | 50 | 2-1-18
A | 50 | 3-1-18
A | 50 | 4-1-18
A | 50 | 5-1-18
A | 50 | 6-1-18
而且,这是我想要的输出:(在这个例子中,我在3个月内耗尽了我手头上的数量,并且在此之后仍然需要多达50个月的时间。
Product | Build QTY | Date Req
A | 0 | 1-1-18
A | 0 | 2-1-18
A | 25 | 3-1-18
A | 50 | 4-1-18
A | 50 | 5-1-18
A | 50 | 6-1-18
步骤1:
分配一个假日期到我的手头QTY(手动设定为之前的任何所需的日期)。这是因为我们可以进行联合查询来合并所有供应/需求数量。
手头摘要(新查询)
SELECT
DateValue("12/1/2017") AS [Date],
[On Hand].[Product],
[On Hand].[QTY];
第2步:
做一个联合查询,所以我们可以得到所有date↔product连击。
uQuery(新查询)
SELECT
[On Hand Summary].[Date] AS [Date],
[On Hand Summary].[Product] AS [Product]
FROM [On Hand Summary]
UNION SELECT
[Required].[Date Req] AS [Date],
[Required].[Product] AS [Product]
FROM [Required];
步骤3:
巩固产物&日期QTY。在这里,我将手头数量乘以-1,以便我们可以准备向前滚动的金额。
我也将我的数量填入Iif(IsNull())
,以便我可以用0替换空值。
数据整合1(新查询)
SELECT
[uQuery].Date,
[uQuery].Product,
IIf(IsNull(-1*[On Hand Summary]![QTY]),0,-1*[OH Summary]![QTY]) AS [OH QTY],
IIf(IsNull([Required]![QTY Req]),0,[Required]![QTY Req]) AS [Req QTY],
[OH QTY]+[Req QTY] AS [Combined QTY]
FROM ([uQuery]
LEFT JOIN [On Hand Summary] ON
([uQuery].Product = [On Hand Summary].Product) AND
([uQuery].Date = [On Hand Summary].Date))
LEFT JOIN Forecast ON
([uQuery].Product = Required.Product) AND
([uQuery].Date = Required.[Date Req]);
步骤4(添加DSUM,其花费的时间太长):
在这个查询中,我拉在Product
,Date
,和Combined QTY
从第一个数据合并查询,并添加一个Roll QTY
列。
数据合并2(新查询)
Product | Date | Combined QTY | Roll QTY
A | 12-1-17 | -125 | -125
A | 1-1-18 | 50 | -75
A | 2-1-18 | 50 | -25
A | 3-1-18 | 50 | 25
A | 4-1-18 | 50 | 75
A | 5-1-18 | 50 | 125
A | 6-1-18 | 50 | 175
对于Roll QTY
,我使用以下表达式:
辊QTY:DSUM( “[QTY]”,“数据合并2 “[数据合并1]![Product] =''& [Product] &”'[Data Consolidation 1]![Date] < =#“& [Date] &”#“)
现在,这给了我需要的东西,但就像我说的那样,每行大概需要0.1秒。在4300行(只是变大)中,计算时间是不可接受的。
第5步(未实现)
我不需要此部分的帮助;我知道我需要做什么。但是我只是想包括这个,如果你想知道我将如何达到我想要的输出。
我打算创建计算以下
最小值([组合QTY],最大值([辊QTY],0))
这些最后一个查询是传统max
和min
功能,我明白I'll need to implement a VB module。
编辑:
我重新格式化我的一些数据库的,但我想我做到了简单。我只设计了一个输入表,其中“现有”数量表示为负值。
Product | QTY Req | Date Req
A | -125 | 12-1-18
A | 50 | 1-1-18
A | 50 | 2-1-18
A | 50 | 3-1-18
A | 50 | 4-1-18
A | 50 | 5-1-18
A | 50 | 6-1-18
有没有办法在不使用DSUM的情况下推进这项工作?
要确认,最终值不应小于0,但不能超过每月的金额。
访问不太好,但只是想评论这是一个很好的问题。 –
我很欣赏你试图解释你的问题,但仍想要求澄清。在跳转到SQL之前,你可以打开你想要做的事情,然后提供步骤1和步骤2的简短示例结果吗?我有一种感觉,我们可以在一个或两个步骤中实现您想要的结果 –
@ErikvonAsmuth在顶部添加了一些额外的信息。这有帮助吗? – MrMusAddict