Newsgroup: it.comp.appl.access
Titolo: [2010] ottimizzare una query infarcita di DlookUp

ho una corpulenta query che mette insieme dati proveniente da sette 
tabelle/query (queste ultime a loro volta mettono insieme dati da tabelle 
singole o multiple): in soldoni, il risultato lo ho oggi in poco meno di 40 
secondo sul mio vetusto i3
 
ho provato a migliorare la cosa, convertendo 4 delle 5 query da Select a 
MakeTable e ho beccato la colpevole che teoricamente è la più semplice in 
quanto prende i dati base da una sola tabella, ma in pratica è appesantita 
da una sfilza di DLookUp che generano i campi del risultato prendendo 
ulteriori dati da una seconda tabella
 
in soldoni: 
prendo il codice del prodotto dalla tabella 1 (ItemsModel, 2700 record 
circa: anagrafica prodotti) e cerco in tabella 2 (Items, oltre 64000 
record: storico dei saldi a fine mese di ogni prodotto) il valore di 
giacenza alla fine di ognuno dei 12 mesi precedenti la data dell'ultimo 
aggiornamento
 
un esempio, sempre che si capisca, per trovare il saldo di 12 mesi fa:
 
Val(DLookUp("[Items]![Quantity]","Items","[Items]![Update]=#" & 
DateAdd("m",-
11,DateSerial(Year([Forms]![Parameters]![EndDate]),Month([Forms]![Parameter
s]![EndDate]),1)-1) & "# And [Items]![MATCHCODE]= '" & 
[ItemsModel]![MATCHCODE] & "'")) AS [Stock-12]
 
questa roba è ripetuta 12-13 volte, ogni volta scalando un mese dalla data 
di partenza
 
*la domanda è semplice: cosa posso usare al posto di DLookUp per recuperare 
quel che mi serve?*
 
tabella ItemsModel
MatchCode
Pippo
Pluto
Paperino
 
Tabella Items
MatchCode   Update     Quantity
Pippo       28/02/2022     58
Pippo       31/01/2022     56
Pippo       31/12/2021     64
Pippo       30/11/2021     69
Pluto       28/02/2022     12
Pluto       31/01/2022      4
Pluto       31/12/2021      6
Pluto       30/11/2021     21
Paperino    28/02/2022      0
Paperino    31/01/2022     40
Paperino    31/12/2021     31
Paperino    30/11/2021     35
 
 
Risultato query (parte da Stock-12 e arriva a Stock-0)
MatchCode   Stock-3 Stock-2 Stock-1 Stock-0
Pippo         58      56      64      69 
Pluto         12       4       6      21
Paperino       0      40      31      35
 
 
La data di partenza è nella maschera:
[Forms]![Parameters]![EndDate] che oggi vale 28/02/2022
 
 
tra le malsane idee che mi son venute in testa c'è quella di una query a 
campi incrociati, da costruire al volo in modo che le date delle colonne 
corrispondano alle ultime 12 date presenti nel file Items, ma ci sto 
pensando da un po' e non trovo il bandolo
 
oppure generare una tabella intermedia con i soli tre campi che poi rimetto 
insieme con una query più semplice
 
oppure, più semplice, estrarre da ItemsModel solo i record degli ultimi 12 
mesi, circa un terzo scarso del totale, e lavorare su quelli invece che sul 
malloppo completo (e questa la vedo già meglio, mi è venuta in mente mentre 
ci ragionavo su)
 
e grazie, neh, se avete avuto la pazienza di leggere fin qui
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........


Mi viene in mente Elookup di Allen Brown (
http://allenbrowne.com/ser-42.html
). Potresti fare una prova.
Ciao