Funzione DSum con valutazione su tre campi

di il
7 risposte

Funzione DSum con valutazione su tre campi

Ciao a tutti.
ho una tabella composta dai campi PRODUCT_CODE_IN, PLANT_CODE, Wk, Qty_Start, Plant_Stock_Qty, Stock_Residuo.

Wk e' un format LONG per gestire la codifica YYYYWW, Stock_residuo e' ovviamente la differenza per ogni settimana fra Qty_Start e Plant_Stock.

Come faccio a fare la somma cumulativa del campo Stock_Residuo facendo in modo che ricominci quando cambiano I valori dei campi PRODUCT_CODE_IN e PLANT_CODE?

La formula che ho creato (Expr1: DSum("[Stock_Residuo]","Tbl_PianoStart_e_StockPlant","[Wk] <=" & [Wk])) mi somma tutte le settimane 201818, poi le 201819 etc.
L'ho modificata in Expr1: DSum("[Stock_Residuo]","Tbl_PianoStart_e_StockPlant","[Wk] <=" & [Wk] And "[PRODUCT_CODE_IN] <=" & [PRODUCT_CODE_IN] And ","[PLANT_CODE] <=" & [PLANT_CODE]) ma non capisco che cosa faccia perche' non capisco I numeri che ottengo.

Questo e' un esempio di quello che dovrebbe risultare
PRODUCT_CODE_IN, PLANT_CODE, Wk, Stock_Residuo, Expr1
A, 3068, 201818, -360391, -360391
A, 3068, 201819, -420459, -780850
A, 3068, 201820, -420455, -1201305
A, 0959, 201818, -420458, -420458
A, 0959, 201819, -420459, -840917
A, 0959, 201820, -420455, -1261372
B, 0151, 201805, -7739, -7739
...

Scusate la formattazione ma non capisco come farla in modo diverso e quindi ho separato I valori con le virgole.

Grazie a tutti
Max

7 Risposte

  • Re: Funzione DSum con valutazione su tre campi

    maxgrana ha scritto:


    ...
    DSum("[Stock_Residuo]","Tbl_PianoStart_e_StockPlant","[Wk] <=" & [Wk] And "[PRODUCT_CODE_IN] <=" & [PRODUCT_CODE_IN] And ","[PLANT_CODE] <=" & [PLANT_CODE])
    ma non capisco che cosa faccia perche' non capisco I numeri che ottengo.

    Questo e' un esempio di quello che dovrebbe risultare
    
    PRODUCT_CODE_IN,    PLANT_CODE,     Wk,        Stock_Residuo,            Expr1
    A,                   3068,          201818,      -360391,                -360391
    A,                   3068,          201819,      -420459,                -780850
    A,                   3068,          201820,      -420455,                -1201305
    A,                   0959,          201818,      -420458,                -420458
    A,                   0959,          201819,      -420459,                -840917
    A,                   0959,          201820,      -420455,                -1261372
    B,                   0151,          201805,      -7739,                    -7739
    ...
    E' giusto che Stock_Residuo sia negativo?
    Per il resto, il DSum fa quello che deve, quindi è sbagliato come è formulata. Devi per forza farlo in una query? Secondo me a livello di report sarebbe tutto molto più facile.
    A te interessa che il conteggio si "resetti" al cambio di [PRODUCT_CODE_IN] e [PLANT_CODE] (di cui non capisco il significato)?
    Non devi indicare la condizione come "<=" ma solo "=" per quei due campi.
    Occhio all'uso di DSum su query, può rendere tutto pesantissimo, è per questo che avevo proposto l'uso di un report.
  • Re: Funzione DSum con valutazione su tre campi

    Ciao,
    I numeri sono negativi perche' la query non e' ancora terminate. Per il momento si limita alla disponibilita' di magazzino della materia prima (PRODUCT_CODE_IN, che non ho messo nella tabella d'esempio) ed ai piani di produzione delle prossime 52 settimane. Devo ancora aggiungere i piani di rifornimento futuri e quanto puo' essere prodotto teoricamente in ogni periodo (Wk).
    Non penso che la possa fare tramite report perche' la mia intenzione e' quella di limitare il report a quei prodotti (PRODUCT_CODE_IN) che negli impianti (PLANT_CODE) hanno un piano di produzione reale inferiore a quello teorico ed una disponibilita' di materiale inutilizzato (Stock cumulativo > piano di produzione cumulativo).
    Mi sono accorto della pesantezza, ed infatti sto lavorando su una sequenza di Make-Table-Query.

    Ho riscritto la formula nei seguenti modi, ma in questo modo per ogni record viene riportato il totale il totale generale del campo Stock_Residuo
    Expr1: DSum("[Stock_Residuo]","Tbl_PianoStart_e_StockPlant","[PRODUCT_CODE_IN] =" & [PRODUCT_CODE_IN] And "[PLANT_CODE] =" & [PLANT_CODE])

    Expr1: DSum("[Stock_Residuo]","Tbl_PianoStart_e_StockPlant","[PRODUCT_CODE_IN] =" & [PRODUCT_CODE_IN] And "[PLANT_CODE] =" & [PLANT_CODE] And "[Wk] <=" & [Wk])

    Grazie per il support
    Max
  • Re: Funzione DSum con valutazione su tre campi

    maxgrana ha scritto:


    ...
    I numeri sono negativi perche' la query non e' ancora terminate.
    Vale la pena lavorare su qualcosa che non è ancora terminato? Come capisci se i risultati sono giusti? Vabbè, questo lo sai tu.

    maxgrana ha scritto:


    Per il momento si limita alla disponibilita' di magazzino della materia prima
    ...
    Non penso che la possa fare tramite report perche' (omissis) (Stock cumulativo > piano di produzione cumulativo).
    Mi sono accorto della pesantezza, ed infatti sto lavorando su una sequenza di Make-Table-Query.
    Non ho capito niente, ma non necessariamente è colpa tua, anzi! Il mio lavoro è di tutt'altro tipo quindi mi concentro solo sull'aspetto informatico.

    maxgrana ha scritto:


    Ho riscritto la formula nei seguenti modi, ma in questo modo per ogni record viene riportato il totale il totale generale del campo Stock_Residuo
    Expr1: DSum("[Stock_Residuo]","Tbl_PianoStart_e_StockPlant","[PRODUCT_CODE_IN] =" & [PRODUCT_CODE_IN] And "[PLANT_CODE] =" & [PLANT_CODE])

    Expr1: DSum("[Stock_Residuo]","Tbl_PianoStart_e_StockPlant","[PRODUCT_CODE_IN] =" & [PRODUCT_CODE_IN] And "[PLANT_CODE] =" & [PLANT_CODE] And "[Wk] <=" & [Wk])
    Per prima cosa usa i tag code per racchiudere il codice, così la visualizzazione aiuta l'analisi. Ad intuito però c'è qualcosa che non quadra, già a livello di sintassi.
    Questa parte di DSum() (come di molte altre funzioni su dominio)
    DSum(..., "[PRODUCT_CODE_IN] =" & [PRODUCT_CODE_IN] And "[PLANT_CODE] =" & [PLANT_CODE] And "[Wk] <=" & [Wk])
    deve essere una Where Condition valida senza la parola Where. La sequenza di concatenamento costanti e variabili non sembra corretta, nello specifico il fatto che And è fuori dalla stringa mentre deve farne parte.
    Ragiona con il doppio apice e & di concatenamento affinché risulti un qualcosa del tipo
    "[PRODUCT_CODE_IN] = 'A' AND [PLANT_CODE] = 3068 AND [Wk] <= 201819"
    Solo ora vedo che [PRODUCT_CODE_IN] è un campo di tipo testo. Deve essere racchiuso da apice singolo. Lavoraci su.
  • Re: Funzione DSum con valutazione su tre campi

    Grazie,
    prova a sbatterci la testa con I tuoi suggerimenti.
    Sara' un po' dura perche' I prodotti sono, al momento 319, e gli impianti una decina, con una quantita' di combinazioni che non e' il prodotto geometrico ma poco ci manca , ma ci provo.

    Buona giornata
    Max
  • Re: Funzione DSum con valutazione su tre campi

    maxgrana ha scritto:


    ...
    Sara' un po' dura perche' I prodotti sono, al momento 319, e gli impianti una decina, con una quantita' di combinazioni che non e' il prodotto geometrico ma poco ci manca , ma ci provo..
    Ma fossero anche molti di più... non è lì il problema, non devi creare un DSum diverso ogni volta ma scriverlo in modo tale che sia lui ad adattarsi al record corrente.
    Ho scritto come devi ottenere il risultato solo per non scriverti direttamente il codice che è una "banalità" (spero). Se si vuole indicare 10 come la soluzione del problema, a mio avviso avevi già fatto 8 abbondante. Si tratta di mettere i doppi apici e l'apice singolo nei posti giusti.
  • Re: Funzione DSum con valutazione su tre campi

    Ti offrirei una cena piu' che volentieri.
    Maledetti apicetti singoli
    Expr1: DSum("[Stock_Residuo]","Tbl_PianoStart_e_StockPlant","[PRODUCT_CODE_IN] =' " & [PRODUCT_CODE_IN] & " ' And [PLANT_CODE] =' " & [PLANT_CODE] & " ' And [Wk] <=" & [Wk])
    Grazie infinite
    Max
  • Re: Funzione DSum con valutazione su tre campi

    maxgrana ha scritto:


    Maledetti apicetti singoli
    E poi si scopre che pure [PLANT_CODE] è tipo testo e non numerico.
    Non prendertela con gli apicetti singoli ma impara l'uso dei delimitatori.

    maxgrana ha scritto:


    Ti offrirei una cena piu' che volentieri.
    Con il condizionale mi sa che mi resta la fame. Oggi guardo gli esiti degli esami del sangue e ti faccio sapere. (scherzo, ovviamente)
Devi accedere o registrarti per scrivere nel forum
7 risposte