Riepilogo valori per settimane

di il
11 risposte

Riepilogo valori per settimane

Ciao a tutti,
sono alle prese con l'ennesima richiesta di riepilogo di dati da un db..
I dati provengono solo dalla tbl1 che contiene:
IDAct (contatore); ActNr(txt); StartDate (date);EndDate (date); Work(single)

Lo scopo è quello di verificare in quale settimana cadono le ore di Work, fin qui nessun problema: ho estratto i numeri di settimana di StartDate e End Date , e contato il numero di settimane dell'intervallo. Il problema si pone quando le settimane di intervallo sono più di una, il riepilogo mi metterebbe tutte le ore di work sulla settimana StartDate o EndDate, falsando la realtà dei fatti. Il risultato che vorrei ottenere è la "spalmatura" delle ore "Work" sul numero di settimane di intervallo :
IDAct ActNr__StartDate _EndDate ____Work
1____ abc__ 01/01/2012 _03/01/2012_ 5
2____ def__ 01/01/2012 _31/01/2012_ 30
3____ fgh__ 18/01/2012 _06/04/2012 _ 36

Riepilogo:
ActNr StartWk EndWk Work 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15....
abc_____1______1____5 __5
def_____1_____ 5____30__6 6 6 6 6
fgh_____3_____ 14____36_____3 3 3 3 3 3 3_3__3_3__3_3

Qualche idea su come fare?

Grazie ciao

11 Risposte

  • Re: Riepilogo valori per settimane

    Non riesco a capire il senso del tuo problema, ma in ogni caso dovrai creare una query, importare i campi che ti servono per fare calcoli e aggiungere una nuova colonna con una formula tipo
    N.Work/N.Settimane (mi pare di capire che sei già riuscito a ricavare N.Settimane da solo).
    Una volta fatto questo, non riesco a cogliere la spalmatura.
  • Re: Riepilogo valori per settimane

    Grazie Osvaldo per la tua risposta. Il problema è che il report dovrebbe mostrare le ore di work su ogni settimana "generando" i numeri di settimana...

    ad esempio se l'intervallo di settimane dell'attività "abc" è dalla 3a alla 7a settimana con un totale di 25 ore di work, la query dovrebbe creare una sequenza tipo:

    sett. 3: 5 ore
    sett. 4: 5 ore
    sett. 5: 5 ore
    sett. 6: 5 ore
    sett. 7: 5 ore

    Devo fare in modo che ad ogni record (attività) venga calcolato l'intervallo di settimane tra data inizio e data fine ( e qui ci sono), ma non so come generare i numeri di settimana intermedi ai quali poi assegnare le ore di work. Pensavo alla creazione di una tabella di appoggio e con un ciclo tipo "For" Next" generare tanti record quante sono le settimane nell'intervallo, ma non so da dove cominciare.
    Grazie
  • Re: Riepilogo valori per settimane

    Sai usare il Visual Basic? Il ciclo For...Next è un'idea, ma io non so usare il codice.

    Tabella di appoggio...è un'idea possibile.
    Sinceramente non ho capito tutto il calcolo che sta sotto la tua logica. Io pensavo invece di avere sotto mano una tabella con il contatore settimane. Una volta che hai capito l'intervallo delle settimane, potresti pensare a una query avente come filtro
    Between 3 And 7
    sul campo N.Settimana
    + un campo di calcolo dove deve apparire il valore 5 (ore settimanali)
    Tale query ti mostrerebbe 5 record. Questa query, poi la trasformi in query di accodamento sulla tabella di appoggio che vedrà incrementarsi di 5 record.
    Problemi:
    1) Saresti in grado di creare un filtro del tipo "Between (formula che genera il 3) And (formula che genera il 7)", per rendere il filtro il più generale possibile?
    2) Siamo sicuri che la tabella di appoggio serve? Forse la query svolge direttamente quello che cercavi.
  • Re: Riepilogo valori per settimane

    Grazie Osvaldo,
    purtroppo non ho molta confidenza con VB(non sono un mostro nenache con le query in realtà ), se tu hai idea di come strutturare una query del genere , mi aiuterebbe molto.
    Oppure se c'è qualcuno del forum che conosce il VB ...
    Grazie a tutti
  • Re: Riepilogo valori per settimane

    Buona giornata, hangart;
    credo che una soluzione abbastanza semplice potrebbe esserci; l'unico limite che posso presumere è quello di avere un range di date sempre simile (esempio dal lunedì al sabato, dal lunedì al venerdì oppure da un qualunque giorno della settimana iniziale e finale sempre fissi).

    Nel caso in cui questo non sia troppo vincolante, credo di poterti proporre una soluzione adeguata.

    Cordiali saluti, buon lavoro e ... allez.

    Giuseppe
  • Re: Riepilogo valori per settimane

    Grazie Giuseppe!

    Allora, le date sono variabili , nel senso che ogni attività può cominciare e terminare in qualsiasi giorno della settimana o di di più settimane. Finchè l'attività parte e si conclude nella stessa settimana non ho problemi, quando invece è distribuita su più settimane o prendo la data di inizio o quella di fine per determinare la settimana di allocazione, ma perdo di efficacia nei dati: immagina un'attività di 60 ore distribuita su 3 settimane (idealmente 20 ore a settimana) mi finirebbe conteggiata o nella settimana di inzio o in quella di fine , falsando la realtà e generando degli overbooking inesistenti delle risorse.

    Grazie per l'aiuto
  • Re: Riepilogo valori per settimane

    Ciao hangart;
    credo di poterti rubare qualche minuto per esporti come pensavo di operare.
    Due tabelle, la Tua “tbl1” e una tabella che ho chiamato “Calendario”.
    Per tbl1 ho seguito la struttura impostata da Te.
    In Calendario ho previsto 3 campi:
    ID (contatore – chiave primaria), Data (date), W (Byte)
    Visto che sono "pigro" , ho importato “Calendario” da un file Excel nel quale ho inserito tutti i 366 giorni del 2012 aggiungendo il numero della settimana; esempio:
    
      Data		 W
    01/01/2012	1
    02/01/2012	1	
    03/01/2012	1	
    04/01/2012	1	
    05/01/2012	1	
    06/01/2012	1	
    07/01/2012	1	
    08/01/2012	2
    09/01/2012	2	
    10/01/2012	2	
    11/01/2012	2	
    12/01/2012	2	
    13/01/2012	2	
    14/01/2012	2	
    15/01/2012	3
    .
    .
    .
    23/12/2012	52
    24/12/2012	52	
    25/12/2012	52	
    26/12/2012	52	
    27/12/2012	52	
    28/12/2012	52	
    29/12/2012	52	
    30/12/2012	53
    31/12/2012	53	
    
    1) Ho costruito la maschera di inserimento dati nel modo più semplice.
    2) Ho costruito una Query importando entrambe le tabelle.
    3) Nella Query ho costruito la seguente struttura:
    
    Campo      Tabella          Criteri
    IDAct      tbl1             [Forms]![tbl1]![IDAct]
    ActNr      tbl1
    StartDate  tbl1
    EndDate    tbl1
    Work       tbl1
    Data       Calendario      Between [Forms]![tbl1]![StartDate] And [Forms]![tbl1]![EndDate]
    W          Calendario
    
    4) Ho costruito un Report basato su questa Query.

    Ora, selezionando dalla maschera inserimento dati il Record che Ti interessa, Il Report ha il seguente output:

    Selezionado il Record 1
    
    Dalla data: domenica 1 gennaio 2012     Alla data: martedì 3 gennaio 2012
    ==========================================================================
    Settimana: 1
    ==========================================================================
    Settimane: 1 Ore lavorate: 5  Ore/Settimana 5
    
    Selezionado il Record 2
    
    Dalla data: domenica 1 gennaio 2012     Alla data: martedì 31 gennaio 2012
    ===========================================================================
    Settimana: 1
    Settimana: 2
    Settimana: 3
    Settimana: 4
    Settimana: 5
    ===========================================================================
    Settimane: 5 Ore lavorate: 30  Ore/Settimana 6
    
    Selezionado il Record 3
    
    Dalla data: mercoledì 18 gennaio 2012     Alla data: venerdì 6 aprile 2012
    ==========================================================================
    Settimana: 3
    Settimana: 4
    Settimana: 5
    Settimana: 6
    Settimana: 7
    Settimana: 8
    Settimana: 9
    Settimana: 10
    Settimana: 11
    Settimana: 12
    Settimana: 13
    Settimana: 14
    ==========================================================================
    Settimane: 12 Ore lavorate: 36  Ore/Settimana 3
    
    Nel caso in cui questo output soddisfi le Tue esigenze, se lo ritieni opportuno, possiamo vedere assieme come strutturare il Report.

    Buona serata.

    Giuseppe
  • Re: Riepilogo valori per settimane

    Grazie Giuseppe per i tuoi suggerimenti, ho riprodotto e il tutto funziona, ma solo se si considera una singola attività.
    L'obiettivo è avere un riepilogo settimana per settimana di tutte le attività in una volta sola.
    Magari dovrei creare una routine che copia su una tabella d'appoggio record per record ..
    Capisco che non è semplice e ringrazio te (ed Osvaldo il quale mi ha supportato in pv) per le dritte.
    Ciao

    Marco
  • Re: Riepilogo valori per settimane

    Buona giornata, Marco;
    credo si possa risolvere anche aggiungendo due campi in tbl1; [SettimanaIniziale] e [SettimanaFinale]. I campi si potrebbero compilano automaticamente con AfterUpdate sui campi [StartDate] e [EndDate] ma questo non so se, in qualche modo, viola le regole dei DB.

    In ogni caso i due nuovi campi consentono di avere un Report del tipo:
    
    Report delle attività nel periodo:    Dalla data 01-gen-2012     Alla data 30-apr-2012 
    
    Attività   Dalla data   Alla data   Sett.iniziale   Sett.finale   Ore   n° sett.   hh/sett.
       abc       01-gen-12  05-gen-12       1                   1      5       1           5
       def       01-gen-12  31-gen-12       1                   5     30       5           6
       fgh       18-gen-12  06-apr-12       3                  14     36      12           3
    
    Il range"Dalla data" "Alla data" può essere modificato secondo le necessità; nell'esempio il 30 aprile è una data che va oltre la data finale dell'ultima attività valutata ma questo non inficia i valori del Report. Per capirci, se il range prevede le date comprese dal 01-gennaio-2012 al 31-dicembre-2012, nel nostro esempio i risultati non variano; a meno che non esistano altre attività successive al 06-apr-2012.

    A disposizione.
    Buon fine settimana.

    Giuseppe
  • Re: Riepilogo valori per settimane

    Grazie Giuseppe per la tua disponibilità, una situazione simile l'avevo ottenuta già formattando le date di inizio e fine in numeri di settimane. Quello che però servirebbe è proprio la distribuzione puntuale delle ore su ogni settimana: dovendo valutare l'impegno di risorse che lavorano su attività diverse, ho bisogno di sapere cumulativamente su quali settimane e per quante ore queste risorse sono impegnate. Per questo mi sembra giusta la strada che avete suggerito inizialmente tu e Osvaldo, di creare una tabella d'appoggio con i numeri di settimana. Resta "solo" da creare una routine che analizzi passo passo la tabella attività e copi in un'altra tabella d'appoggio i numeri di settimane di intervallo e i relativi carichi di lavoro.
    Purtroppo io non sono un grande esperto di vb... Grazie comunque per tutto l'impegno che ci mettete. Buona settimana.

    Marco
  • Re: Riepilogo valori per settimane

    Ciao a tutti,
    ho finalmente risolto il problema creando le giuste funzioni e lavorando con una select...
    Option Compare Database
    Public datIni As Date
    Public datFin As Date
    Public intIDTask As Integer
    
    Public Function StDate() As Date
    StDate = datIni
    End Function
    
    
    Public Function EnDate() As Date
    EnDate = datFin
    End Function
    Public Function intIDTsk() As Integer
    intIDTsk = intIDTask
    End Function
    
    Public Function cmdUpd()
    On Error GoTo Err_cmdUpd
    
        Dim db As DAO.Database, strSql As String, rst As DAO.Recordset
        
        strSql = "SELECT * FROM qWeeks  ORDER BY IDTask ASC"
        
        Set db = DBEngine(0)(0)
       
        Set rst = db.OpenRecordset(strSql)
        
        rst.MoveFirst
        
        
        On Error GoTo err_Handle
        BeginTrans
        
        
        
           Do Until rst.EOF
            datIni = rst!StartDate
         
            datFin = rst!EndDate
        
            intIDTask = rst!IDTask
        
            
            DoCmd.SetWarnings 0
            
            
             DoCmd.OpenQuery "Query1", acNormal, acEdit
                     DoCmd.SetWarnings -1
            
           
           
            rst.MoveNext
           
        Loop
           CommitTrans
        sub_Exit: .....

    Ho utilizzato le funzioni per filtrare le query descritte da Giuseppe e la select per impostare il loop di analisi record per record. La query poi accoda le righe filtrate in una tabella di appoggio.

    Nel caso qualcuno abbia bisogno di più informazioni sono disponibile.

    Per ora sembra funzioni tutto.
    Grazie a quanti mi hanno supportato!
    Ciao


    Marco
Devi accedere o registrarti per scrivere nel forum
11 risposte