Come affrontare la previsione delle ore

1

Ho bisogno di prevedere le ore preventivate per 2 dipartimenti per aiutarle a programmare il personale, poiché attualmente il meglio che possono fare è proprio quello. Quando riceviamo una proposta di lavoro, la persona che invia il modulo inserisce le ore a budget di quel lavoro in ciascun dipartimento come campo float.

I lavori possono avere orari preventivati per il reparto A, il reparto B o entrambi. I lavori hanno date di inizio e fine. È stato deciso dai miei supervisori che semplicemente dividere equamente le ore di lavoro in tutti i giorni sarà un indicatore utile. Quello che voglio fare è sommare i totali giornalieri [tutti i lavori] per il reparto A e il reparto B. Qui è dove diventa complesso ...

  • Dept. A funziona 7 giorni a settimana e il Dipartimento B lavora regolarmente nei giorni lavorativi.
  • Entrambi i reparti hanno bisogno della flessibilità per contrassegnare un giorno come chiuso e prendere le ore assegnate a quel giorno e spingerli ai giorni rimanenti.
  • Ma voglio anche essere in grado di organizzare feste o eventi in cui sappiamo in anticipo che non saremo aperti e invece di spingere le ore in avanti le distribuirà avanti e indietro. Ad esempio, il reparto A non funzionerà mai il giorno del Superbowl.

Sto cercando consigli su come affrontare questo problema, in particolare i giorni chiusi. Stavo pensando che potrei avere una tabella nel database semplicemente monitorando i giorni chiusi?

Non cerco aiuto nella scrittura del codice, ma piuttosto aiuto nella comprensione di come progettare questo processo più in generale.

    
posta click here 25.01.2016 - 15:54
fonte

3 risposte

1

Modellerei un calendario (cioè un array di 365 elementi).

la difficoltà con questo sistema è che un blocco di giorni viene allocato in tanti singoli giorni anziché in una singola voce, tuttavia mi aspetto che assegnerai un tag o un'etichetta a ciascuna voce logica che può essere utilizzata per identificare ogni blocco di giorni in modo da poter modificare una singola voce (logica).

Il vantaggio di archiviare ogni giorno è la possibilità di pre-allocare i fine settimana, le vacanze, le riunioni di gruppo a piacere, ma anche le vacanze dei membri individuali (o altre assenze dal lavoro) anche se ciò significa semplicemente ridurre le ore totali disponibili per un giorno particolare.

È anche facile da capire e anche la creazione di rapporti / ricerche sul modello è facile.

    
risposta data 25.01.2016 - 16:24
fonte
0

Avrai bisogno di un elenco di giorni chiusi e forse anche di renderlo specifico per il gruppo. Scrivere un algoritmo per prevedere la data del Superbowl il prossimo anno non vale la pena.

Ciò consente di creare un elenco di tutti i giorni in un determinato intervallo di tempo nel codice da escludere. Alcune soluzioni basate su database hanno una tabella con tutti i giorni già in esso per un ragionevole lasso di tempo: poiché la società ha iniziato a 5 anni nel futuro.), E quindi contrassegnare qualsiasi giorno (fine settimana, festività, altro / Super Bowl) perché è più facile leggere / unire dati piuttosto che crearlo.

L'ostacolo più grande potrebbe essere quello di convincere qualcuno a popolare questo tavolo. I fine settimana e le festività che sono sempre nello stesso giorno dell'anno, possono essere generati. È possibile segnalare singoli gruppi / team che lavorano sempre o mai nei fine settimana, ma le eccezioni lo renderanno ancora più complicato. Ci sarà eccezione.

    
risposta data 25.01.2016 - 16:25
fonte
0

Quindi, sembra che tu voglia qualcosa di relativamente fluido. Se ieri era un giorno di neve, è possibile aggiungerlo il giorno successivo e quindi eseguire nuovamente i calcoli per esaminare i carichi di lavoro (teoricamente) necessari per rispettare le scadenze.

Basta pensare al volo qui:

Jobs:
Job ID, Name, Start Date, End Date

Depts:
Dept ID, Name, WeekType

JobHours:
Job ID, Dept ID, Allotted Hours

Ora, se hai bisogno di ricorrere a ricalcoli a causa di ore aggiuntive, scadenze estese, scadenze perse o altri problemi reali che si intromettono su soluzioni semplici, avrai bisogno di un modo per "rifondere" il progetto da un punto in tempo.

Hai anche la flessibilità, nel tempo, per aggiungere ulteriori reparti. Forse se un programma non può essere raggiunto, gli sviluppatori di terze parti sono programmati e forse hanno aspettative di giorni lavorativi o orari al giorno diversi.

Altre idee sulla pseudo-tabella:

JobDeptRecast:
Job ID, Dept ID, Recast Date, Hours Consumed, Hours Added, New End Date

In sostanza, per scopi di programmazione a nessuno interessa il passato dopo la rifusione (dato che non stai cercando di tenere traccia delle ore lavorate o qualcosa del genere). La rifusione è concettualmente un "nuovo" progetto alla data della rifusione.

Ora arriviamo all'elenco delle eccezioni alle ore "previste" al giorno. Dico atteso perché potrebbero facilmente passare giorni in cui le ore sono più elevate della capacità di lavorare per qualsiasi numero di motivi, inclusi quelli che menzioni.

E altro materiale per i DB finti:

WorkExceptions:
Job ID, Dept ID, Date, Hours Excepted, Reason

Cucendo un po 'di questo insieme, sembrerebbe che potresti fare un calcolo matematico sul numero di giorni del progetto (aggiustando per i fine settimana se per elenco, stimando i fine settimana nel periodo o semplicemente facendo scorrere i giorni e cercando i giorni non lavorativi come il progetto non sarà così lungo) meno il numero di ore di eccezioni trovate tra le date di inizio e di fine.

Tuttavia, se autorizzi una rifusione, dovresti prima vedere se hai delle modifiche al progetto che devono essere prese in considerazione.

Mi aspetto che questo modello sia abbastanza fluido per un sistema che prevede di spargere ore tra le date in poi senza tentare di tenere conto dell'effettivo utilizzo del tempo o dei dettagli del livello dei dipendenti.

Fondamentalmente, è sufficiente eseguire tutti i lavori senza fine dall'ultima rifusione, se ce ne sono, sommando le eccezioni * in passato per ottenere lavoro mancato e sommando le eccezioni * andando avanti per ridurre i giorni di lavoro previsti da ora alla data di scadenza. A meno che tu non abbia un lavoro di zillion dovrebbe essere molto veloce - e ogni eccezione aggiunta dopo il fatto trasforma comunque i calcoli precedenti in bugie.

Per i punti bonus, perché questa situazione esiste nella società per cui lavoro, potresti avere un diverso numero di ore nel giorno lavorativo per i dipartimenti in diverse aree geografiche. Se si desidera mostrare il numero di persone necessarie per soddisfare lo sforzo di lavoro pianificato, è possibile inserire le ore giornaliere nella tabella dipartimento per eseguire il calcolo corretto.

Spero che ti dia alcune cose a cui pensare. Naturalmente, non farò promesse per una serie di pensieri rapidi, ma sarei disposto a prototipare sulla base di quanto sopra se avessi lo stesso compito (assumendo che io abbia interpretato correttamente la tua domanda).

Spero di darti qualche idea.

[*] Non dimenticare di stimare, generare al volo o caricare eccezioni del weekend precedentemente compilate.

    
risposta data 24.07.2016 - 00:51
fonte

Leggi altre domande sui tag