Query fra record per creare formula

di il
22 risposte

Query fra record per creare formula

Ho la necessità di creare dei KPI le cui formule sono all'interno di alcuni record di una tabella. Vorrei sapere che è possibile realizzarle. 

Allego alcune immagini che qui spiego. nella tabella: imporbilancio ho ad esempio il record “retribuzioni lorde” e “oneri sociali”. Io voglio fare il rapporto fra i due (oneri sociali/retribuzioni lorde). Questa formula la voglio chiamare ad esempio “incidenza oneri sociali”. Io devo creare molte formule (KPI) pertanto la mia idea era quella di creare una tabella con la lista dei KPI (indicidibilancio) e che contenesse come campo la formula e il risultato delle formule.  In questo modo diventerebbe più semplice non solo gestire tutte le formule, ma anche visualizzare in modo semplice i risultati. Purtroppo non so se è possibile farlo e come, ma una volta ho visto una cosa del genere. Vi sono grato di qualsiasi suggerimento perchè online non ho trovato nulla.

22 Risposte

  • Re: Query fra record per creare formula

    Visto che possono esistere vari modi logici per portare a casa il risultato, partiamo dalla teoria e per il momento lasciamo fuori l'aspetto tecnico di come fare in access quello che vorresti realizzare. Una volta trovato l'approccio più consono alle tue esigenze, si passerà all'aspetto pratico.

    Per il momento mi viene pensato un possibile approccio.

    In una tabella dovrai avere solo il nome della formula che vorrai applicare ed un altro campo con la formula stessa. Che sarà la fonte dati da cui preleverai di volta in volta le formule da applicare.

    Quando dovrai calcolare un KPI, avrai una maschera con delle text box, dove avrai i valori che alimenteranno la formula e una casella combo box da cui sceglierai il relativo indice da applicare.

    Una volta che avrai fatto la scelta, dovrai automatizzare il tutto. 

    La via più semplice è quella di usare il VBA, inserito nell'evento click di un pulsante, a cui passerai la relativa formula da usare con i relativi dati che avrai inserito nella maschera.
    Per poi visualizzarli in una text box.

    questo è un possibile approccio, ma sicuramente te ne verranno suggeriti altri.

  • Re: Query fra record per creare formula

    Puoi creare una tabella con nomefunzione e testosql

    Quando richiami una funzione esegui la sql dopo aver eventualmente inserito i parametri.

  • Re: Query fra record per creare formula

    Ciao,

    in un modulo del Vba inserisci le varie funzioni che ti occorreranno
    Per esempio:

    Public Function MyFunction01(tuoparametro 1, tuo parametro 2, Etc etc...) As Double … o altro tipo di valore di ritorno
    Tuo calcolo etc etc ....
    End If
    
    Public Function MyFunction02(tuoparametro 1, tuo parametro 2, Etc etc...) As Double … o altro tipo di valore di ritorno
    Tuo calcolo etc etc ....
    End If
    
    Public Function MyFunction03(tuoparametro 1, tuo parametro 2, Etc etc...) As Double … o altro tipo di valore di ritorno
    Tuo calcolo etc etc ....
    End If
    
    Public Function MyFunction04(tuoparametro 1, tuo parametro 2, Etc etc...) As Double … o altro tipo di valore di ritorno
    Tuo calcolo etc etc ....
    End If
    
    e varie altre function ... (tutte quelle che serviranno)

    Nella Tabella inserirai una Field che indica quale Function dovrà essere eseguita per quel particolare caso… Per esempio:

    Field di nome   FunctionRun   di tipo Integer 

    In questa colonna della tabella inserirai il valore corrispondente alla function da richiamare.. per esempio = 1 per richiamare la Function 1, oppure = 2 per richiamare la Function 2, etc etc etc … 

    A questo punto, sempre nel modulo che si accennava in precedenza, creare una Function per pilotare l'esecuzione della function desiderata… Proviamo a mettere insieme tutto il codice e ….

    • Supponiamo di aver bisogno di tre parametri atti per eseguire i calcoli per tutte le varie Function,
      • Si definisco i parametri di tipo Optional in modo che se una Function ha la necessita di usare 1 o 2 o più parametri, in tal caso passerai solo quelli che occorrono
      • Tali parametri saranno definiti di tipo Variant e in questo modo si ha la possibilità di passare alle function valori espessioni etc etc…
    • Supponiamo di aver bisogno di un solo valore di ritorno dalla Function richiamata e lo impostiamo di tipo Double
    • Supponiamo di aver bisogno di richiamare 4 tipi di calcoli diversi, uno per ogni Function

    Per esempio possiamo avere una cosa di questo tipo:

    ____________________________________________________________________________________________________________________
    ' FUNCTION RUN SELECT
    Public Function MyFunctionRun(intRun As Integer, Optional parm1 As Variant, Optional parm2 As Variant, Optional parm3 As Variant) As Double
    ' set default return value
    MyFunctionRun = 0
    
    ' select function run
    Select Case intRun
    Case 1: MyFunctionRun = MyFunction01(parm1, parm2, parm3)
    Case 2: MyFunctionRun = MyFunction02(parm1, parm2, parm3)
    Case 3: MyFunctionRun = MyFunction03(parm1, parm2, parm3)
    Case 4: MyFunctionRun = MyFunction04(parm1, parm2, parm3)
    End Select
    
    End Function
    ____________________________________________________________________________________________________________________
    ' FUNCTION 1 RUN
    Public Function MyFunction01(par1, parm2, parm3) As Double
    ' set default return value
    MyFunction01 = 1
    ' your calculations
    ' ...
    End Function
    ____________________________________________________________________________________________________________________
    ' FUNCTION 2 RUN
    Public Function MyFunction02(par1, parm2, parm3) As Double
    ' set default return value
    MyFunction02 = 2
    ' your calculations
    ' ...
    End Function
    ____________________________________________________________________________________________________________________
    ' FUNCTION 3 RUN
    Public Function MyFunction03(par1, parm2, parm3) As Double
    ' set default return value
    MyFunction03 = 3
    ' your calculations
    ' ...
    End Function
    ____________________________________________________________________________________________________________________
    ' FUNCTION 4 RUN
    Public Function MyFunction04(par1, parm2, parm3) As Double
    ' set default return value
    MyFunction04 = 4
    ' your calculations
    ' ...
    End Function

    Per richiamare la function desiderata si richiamerà MyFunctionRun con il parametro proveniente dal record nella Field FunctionRun…
    Per esempio in una query potrai agire in questo modo :

    MyFunctionRun(FunctionRun, parm1,parm2,parm3)

    Supponiamo che la Field FunctionRun del record contenga il valore 2 e non abbiamo necessità di passare nessun parametro aggiuntivo…
    Quindi verrà richiamata in questo modo:

    MyFunctionRun(2)

    In questo caso viene eseguita la function 2,… eseguirà i calcoli che deve eseguire e restituisce il valore risultante dal calcolo che ha eseguito


    Supponiamo che il record successivo della Query richiede l'esecuzione della Function 4 (troviamo tale valore sempre nella colonna FunctionRun)
    e supponiamo di dover passare i parametri 1 con il valore 50 e parametro 2 con il valore 1000 e magari questi valori sono contenuti nelle varie fields che espone la Query … in pratica risulterà il richiamo della function 4 in questo modo:

    MyFunctionRun(4, 50, 1000)

    e così via dicendo e nei parametri puoi avere o i valori o il nome dei campi che hai a disposizione, etc etc etc …. 


    se poi ti occorre passare come parametri operatori e altri simboli per eseguire determinate formule e calcoli, allora nei parametri puoi passare qualsiasi tipo di informazione visto che sono definiti di tipo Variant… Per esempio parm1 = “>= 0”  e nel parm2 = “<= 100” , etc etc etc … 


    Oppure puoi inserire nella tabella una seconda Field di nome FunctionRunParm di tipo Stringa e che conterrà un espressione che indicherà il tipo di calcoli che quella particolare function dovrà esequire…. etc etc etc …
    Per esempio avrai una cosa del genere dove il parm1 verrà popolato con la field appena citata:

    MyFunctionRun(FunctionRun, FunctionRunParm , parm2, parm3)

    Ma la Field FunctionRunParm  può contenere qualsiasi cosa e per esempio una serie di calcoli e funzioni da eseguire… bene a questo punto in FunctionRunParm si imposteranno, sempre sotto forma di stringa, le varie variabile e condizioni di una o più formule e basta separarle l'une dalle altre con un delimitatore, per esempio un punto e virgola … “condizione1;formula1;condizione2;operaratore2;funzione2”.
    A questo punto la funzione richiamata riceverà tale parametro e dovrà splittare i vari argomenti che rappresenteranno le funzioni e i calcoli da eseguire.

    Insomma … una cosa del genere …  mi sembra che sia abbastanza flessibile e adattabile per qualsiasi formula da eseguire.

    P.s. Ho fatto un esempio citando il richiamo delle functions da una query, ma possono essere richiamate in qualsiasi altro contesto… nella lettura di un recordset, oppure da impostare in un controllo TextBox nelle Form o nei Report, etc etc etc 

    ;-)

  • Re: Query fra record per creare formula

    15/08/2023 - fratac ha scritto:


    Visto che possono esistere vari modi logici per portare a casa il risultato

    Ciao fratac … dici che con il mio esempio mi sono spinto troppo oltre ;-)

    fai sapere … 

  • Re: Query fra record per creare formula

    16/08/2023 - By65Franco ha scritto:


    in un modulo del Vba inserisci le varie funzioni che ti occorreranno

    Da quello che ho capito, non vorrebbe modificare o aggiungere  codice a livello di programmazione, ogni volta che deve inserire nuove formule, ma le vorrebbe aggiungere in un campo della tabella per poi usarla in una maschera o report.
    Praticamente un adattamento di una cella calcolata di excel

  • Re: Query fra record per creare formula

    16/08/2023 - By65Franco ha scritto:


    Ciao fratac … dici che con il mio esempio mi sono spinto troppo oltre ;-)

    fai sapere … 

    A dir la verità, pur sapendo cosa stavi spiegando, ho dovuto rileggere due volte  :)

    In realtà è forse l'unico approccio da seguire.

    Soluzioni “universali” per fare i calcoli, sono intriganti, ma portano inevitabilmente a risultati imprevisti, perchè non si possono prevedere tutte le casistiche.
    Sicuramente è più logico aggiungere mano a mano del codice scritto specificatamente per la nuova funzione.

    Per tutto il resto c'è excel.

  • Re: Query fra record per creare formula

    No, va beh. A volte mi sento come le due appendici infracosciali penzolanti di un uomo.
    Cercando chissà quali soluzioni sofisticate ci si dimentica dell'ovvio.

    Access ha già uno strumento nativo semplice da usare, perfetto per queste cose.

    I report.

    Basta creare uno o più  report  che eseguano i calcoli richiesti.

  • Re: Query fra record per creare formula

    16/08/2023 - fratac ha scritto:


    Da quello che ho capito, non vorrebbe modificare o aggiungere  codice a livello di programmazione, ogni volta che deve inserire nuove formule, ma le vorrebbe aggiungere in un campo della tabella per poi usarla in una maschera o report.
    Praticamente un adattamento di una cella calcolata di excel

    E già, anche i report sono una soluzione… Ma venendo a quanto esposto qui sopra… Se è effettivamente questo il caso, allora a mio avviso c'è solo una soluzione.

    Si deve costruire una funzione che faccia da interprete. Nel senso che dovrà leggere la stringa che contiene la funzione che vuoi eseguire, e che hai memorizzato nel record, spacchettarla e interpretarla. 

    In pratica si deve costruire un traduttore che leggendo quanto contenuto nella stringa preveda e trasformi in operatori e quant'altro ciò che è stato scritto … un po' come fa una AI, oppure più semplicemente come hai fatto notare tu, come fa Excel.

    Ma come dici tu, trovare tutte le combinazioni e quindi tutte le casistiche, non è così semplice e banale come potrebbe sembrare… quindi in definitiva mi domando… il gioco vale la candela ?

    Citazione: 

    " Il gioco non vale la candela " è un modo di dire italiano che si usa quando si vuole rischiare per fare una cosa, anche se è meglio pensarci su a volte se il rischio ne vale la pena o meno. L'espressione è utilizzata per esprimere la propria incertezza o indecisione nel momento di compiere un gesto o di fare qualcosa perché non sappiamo quali risultati produrrà e se il nostro sacrificio davvero varrà la pena

    Vabbè, ovviamente si fa per parlare…. sapendo bene che tutto si può fare… però…  ;-))

  • Re: Query fra record per creare formula

    16/08/2023 - By65Franco ha scritto:


    E già, anche i report sono una soluzione

    C'è anche un'altra riflessione da considerare.

    Trattandosi di valori statistici e di comparazione che solitamente vengono stampati o comunque visualizzati nelle riunioni, un report dovrebbe essere comunque realizzato.

    Quindi, invece di fare il lavoro due volte, prima il calcolo nella maschera e poi successivamente la generazione del report, conviene da subito usare solo il report.

  • Re: Query fra record per creare formula

    15/08/2023 - sihsandrea ha scritto:


    Puoi creare una tabella con nomefunzione e testosql

    Quando richiami una funzione esegui la sql dopo aver eventualmente inserito i parametri.

    Grazie per il consiglio. Non essendo uno sviluppatore in pratia cosa dovrei fare?

  • Re: Query fra record per creare formula

    15/08/2023 - sihsandrea ha scritto:


    Puoi creare una tabella con nomefunzione e testosql

    Quando richiami una funzione esegui la sql dopo aver eventualmente inserito i parametri.

    Grazie per il consiglio. Non essendo uno sviluppatore in pratia cosa dovrei fare?

  • Re: Query fra record per creare formula

    Ho letto tutti i post e siete stati veramente gentili.  Spiego più in dettaglio. In excel è tutto più semplice ma ho la necessità di creare un programmino che permetta  a delle persone di visualizzare i risultati in modo semplice. In realtà poi dovrei farlo trasformare in applicazione web. 

    Il concetto è semplice: si tratta di fare degli indici di bilancio che sono circa 20. Il problema principale è come fare le formule fra record, quindi capire materialmente cose devo fare all'interno di access.  Il discorso del report (mi riferisco al post di fratar) è una buona idea perchè semplice per me. ma in pratica mettiamo che io devo creare 20 formule, devo fare 20 query o machere (anche se preferisco usare query perchè poi più semplice da spiegare ad un programmatore web)? e come devono essere materialmente?  Intendo dire anche come deve essere una eventuale formula da inserire in un campo della query-maschera che faccia il rapporto (come da esempio iniziale) fra: oneri sociali/totale retribuzione.

    Grazie

  • Re: Query fra record per creare formula

    16/08/2023 - Pros78 ha scritto:


    In realtà poi dovrei farlo trasformare in applicazione web.

    Farlo trasformare da chi?

    Chiama chi deve trasformarlo, gli spieghi come calcolare gli indici e ti crea la webapp.

    Perché questa perdita di tempo?

    16/08/2023 - Pros78 ha scritto:


    Il concetto è semplice: si tratta di fare degli indici di bilancio che sono circa 20.

    Per questi 20 indici bastano 20 query.

    16/08/2023 - Pros78 ha scritto:


    fare 20 query o machere

    La query è un accesso ai dati, la maschera è un modo per visualizzare cosa ha estratto la query. Tuttavia, trattandosi di indici, una sola maschera generica con una casella di testo con scritto tipo indice: ROI valore indice: 3% note: attenzione, indice basso!

    Magari una griglia con intestazioni:

    Indice, valore, commento.

    Tutto su una videata.

    Ma se mi chiedi come si fa, ti consigli di bypassare access e far fare al programmatore l'app o la webapp. 

    Considera che più che gli indici, il tempo maggiore si perde nell'export dati e gestione utenti che scaricano l'app e richiedono gli accessi. Tutte congetture, perché non so come gestisci i dati di bilancio, se riferito a chiunque voglia verificare la stabilità aziendale inserendo sull'app le varie voci di bilancio o altro ancora. 

    Poi devi chiederti perché usare l'app quando il web è stracolmo di fogli excell che fanno la stessa cosa.

  • Re: Query fra record per creare formula

    16/08/2023 - sihsandrea ha scritto:


    16/08/2023 - Pros78 ha scritto:


    In realtà poi dovrei farlo trasformare in applicazione web.

    Farlo trasformare da chi?

    Chiama chi deve trasformarlo, gli spieghi come calcolare gli indici e ti crea la webapp.

    Perché questa perdita di tempo?

    16/08/2023 - Pros78 ha scritto:


    Il concetto è semplice: si tratta di fare degli indici di bilancio che sono circa 20.

    Per questi 20 indici bastano 20 query.

    16/08/2023 - Pros78 ha scritto:


    fare 20 query o machere

    La query è un accesso ai dati, la maschera è un modo per visualizzare cosa ha estratto la query. Tuttavia, trattandosi di indici, una sola maschera generica con una casella di testo con scritto tipo indice: ROI valore indice: 3% note: attenzione, indice basso!

    Magari una griglia con intestazioni:

    Indice, valore, commento.

    Tutto su una videata.

    Ma se mi chiedi come si fa, ti consigli di bypassare access e far fare al programmatore l'app o la webapp. 

    Considera che più che gli indici, il tempo maggiore si perde nell'export dati e gestione utenti che scaricano l'app e richiedono gli accessi. Tutte congetture, perché non so come gestisci i dati di bilancio, se riferito a chiunque voglia verificare la stabilità aziendale inserendo sull'app le varie voci di bilancio o altro ancora. 

    Poi devi chiederti perché usare l'app quando il web è stracolmo di fogli excell che fanno la stessa cosa.

    ok, accetto le opinioni di tutti, ma volevo semplicemente la risposta alla mia domanda…

Devi accedere o registrarti per scrivere nel forum
22 risposte