Funzione DSum

di il
12 risposte

Funzione DSum

Buongiorno a tutti,
per la valutazione mensile degli ammortamenti ho creato una tabella "RE_Calendario" che dato l'anno [AA], il mese [MM] e i giorni lavorativi di ciascun mese [GLav] (valori noti), mi calcoli una serie di campi [Pr01], [Pr02], ecc... dati dalla somma dei giorni dei mesi residui nell'anno (difficile da spiegare, la tabella aiuta). 
In realtà nella tabella allegata (riferita al 2023) ho calcolato solo il [Pr01] con la funzione 


DSum("GLav";"RE_calendario";"AA=" & [AA] & " And MM <=" & [MM])


ma non sono riuscito ad ottenere lo stesso risultato da Pr02 a Pr12 (i dati nell'esempio sono imputati a mano).
Chi mi dà una mano?
Grazieeeeeee!

12 Risposte

  • Re: Funzione DSum

    Pr01 funziona perchè prende tutto senza considerare l'Offset di partenza…

    Pr02 deve partire da 2
    Pr03 deve partire da 3

    Quindi non è sufficiente la condizione MM=[MM] ma devi introdurre l'Offset con una 3° condizione 

    Pr02 – > AND MM>1
    Pr03 – > AND MM>2

    Quindi vedendo che sono sempre N-1 rispetto al MM puoi provare

    MM<=[MM] AND MM>[MM]-1

    oppure 

    MM>=[MM]-1

    Da provare perchè non avendo modo di verificare risulta poco semplice…

  • Re: Funzione DSum

    Grazie @Alex,

    in realtà avevo provato qualcosa del genere ma non riesco ad ottenere quello che mi serve. Ora ho provato solo con [Pr02]:

    DSum("GLav";"RE_calendario";"AA=" & [AA] & " And MM <=" & [MM] & "And [MM] >" & [MM]-1)

    ma ottengo quanto sotto, sicuramente è una questione di sintassi ma non ne esco :-(

  • Re: Funzione DSum

    …dimenticavo, gli altri campi (Pr03 e oltre) li ho ottenuti calcolando i gg mediamente lavorati al mese ma è solo un'approssimazione di ciò che mi serve

  • Re: Funzione DSum

    Diciamo che concettualmente la sintassi sarebbe questa:

    MM>=[MM]-1

    Tuttavia ti faccio notare che i valori di MM [01-02…] non sono numerici ma Stringhe io avrei lasciato valori Numerici per dare coerenza all'ordinamento, poi se devi gestire formati in visualizzazione li formatti… ma all'utilizzo pratico… 

    Eventualmente condividi un File di Esempio 

  • Re: Funzione DSum

    Se metto MM=[MM]-1 ottengo per Pr02 dei valori diversi ma comunque non corretti:

    In realtà quella che vedi è una query che pesca dalla tabella calendario con valori AA e MM numerici (su MM ho impostato lo 0 iniziale ma è numerico), comunque tabella o query non credo faccia differenza. 

    Non so come condividere il file d'esempio (il DB nel suo insieme è piuttosto complesso), se mi dai una dritta domani lo faccio.

    Ti ringrazio davvero molto per l'aiuto (e per la pazienza…)

  • Re: Funzione DSum

    Basta che posti il link del file su sito di condivisione, tipo Dropbox.

  • Re: Funzione DSum

    Ciao, spero funzioni.

    buona giornata.

    https://file.pizza/download/66juansx

  • Re: Funzione DSum

    Forse è meglio se usi un sito più serio, in quanto dice che non ha trovato il file.

  • Re: Funzione DSum

    Buo

    06/09/2023 - Stifone ha scritto:


    Forse è meglio se usi un sito più serio, in quanto dice che non ha trovato il file.

    Buongiorno a tutti,

    chiedo scusa per il ritardo ma per un paio di settimane sono stato impegnato all'estero, questo è il link https://we.tl/t-Q8CrqbADxi

    Ricapitolando vorrei trovare il modo di crearmi una matrice simile a quella postata (query Q_RE_calendario) dove ciascuna colonna (Pr01, Pr02, ecc) risulti non come somma della media mensile dei giorni lavorati ogni anno (GTot) ma come somma dei giorni effettivamente lavorati ogni mese (GLav). Quindi la colonna Pr01 corrisponde a Prog (giorni progressivi per l'anno intero), la Pr02 dovrebbe calcolare i progressivi partendo dai 20 gg lavorativi di febbraio, la Pr02 dai 22 gg di marzo e così via.

    Spero di essermi spiegato e che qualcuno possa aiutarmi.

    Grazie, buona giornata.

  • Re: Funzione DSum

    SELECT RE_calendario.AA, RE_calendario.MM, RE_calendario.Mese, RE_calendario.GLav, 
    	DSum("GLav","RE_calendario","AA=" & [AA] & " And MM <=" & [MM]) AS GProg, 
    	DSum("GLav","RE_calendario","AA=" & [AA]) AS GTot, 
    	DSum("GLav","RE_calendario","[AA]=" & [AA] & " And [MM]>=1 AND [MM]<=" & [MM]) AS Pr01, 
    	DSum("GLav","RE_calendario","[AA]=" & [AA] & " And [MM]>=2 AND [MM]<=" & [MM]) AS Pr02, 
    	DSum("GLav","RE_calendario","[AA]=" & [AA] & " And [MM]>=3 AND [MM]<=" & [MM]) AS Pr03, 
    	DSum("GLav","RE_calendario","[AA]=" & [AA] & " And [MM]>=4 AND [MM]<=" & [MM]) AS Pr04, 
    	DSum("GLav","RE_calendario","[AA]=" & [AA] & " And [MM]>=5 AND [MM]<=" & [MM]) AS Pr05, 
    	DSum("GLav","RE_calendario","[AA]=" & [AA] & " And [MM]>=6 AND [MM]<=" & [MM]) AS Pr06, 
    	DSum("GLav","RE_calendario","[AA]=" & [AA] & " And [MM]>=7 AND [MM]<=" & [MM]) AS Pr07, 
    	DSum("GLav","RE_calendario","[AA]=" & [AA] & " And [MM]>=8 AND [MM]<=" & [MM]) AS Pr08, 
    	DSum("GLav","RE_calendario","[AA]=" & [AA] & " And [MM]>=9 AND [MM]<=" & [MM]) AS Pr09, 
    	DSum("GLav","RE_calendario","[AA]=" & [AA] & " And [MM]>=10 AND [MM]<=" & [MM]) AS Pr10, 
    	DSum("GLav","RE_calendario","[AA]=" & [AA] & " And [MM]>=11 AND [MM]<=" & [MM]) AS Pr11, 
    	DSum("GLav","RE_calendario","[AA]=" & [AA] & " And [MM]>=12 AND [MM]<=" & [MM]) AS Pr12
    FROM RE_aamm INNER JOIN RE_calendario ON RE_aamm.A = RE_calendario.AA
    ORDER BY RE_calendario.AA, RE_calendario.MM;

    Mi pare faccia quanto hai esposto nel primo Post.

  • Re: Funzione DSum

    Perfetto!!! esattamente quello che cercavo.

    Grazie mille.

  • Re: Funzione DSum

    La parte legata all'Anno non serve fatta così… in quanto sarà sempre soddisfatta, dovresti renderla Parametrica in modo da filtrare per Anno.

    Per capirci questa sarà sempre vera:

    "[AA]=" & [AA] &

    Andrebbe fatta una cosa simile:

    PARAMETERS pAnno Integer;
    SELECT RE_calendario.AA, RE_calendario.MM, RE_calendario.Mese, RE_calendario.GLav, 
    	DSum("GLav","RE_calendario","AA=" & [pAnno] & " And MM <=" & [MM]) AS GProg, 
    	.....
    	ecc....

    Da usare poi passando il parametro:

    https://learn.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/parameters-declaration-microsoft-access-sql

Devi accedere o registrarti per scrivere nel forum
12 risposte