Vuoi sapere chi ha approvato una richiesta di permesso in Microsoft Teams Shifts? In questa guida trovi dove vedere la cronologia nativa, i limiti attuali e come costruire un registro completo con Audit log Microsoft 365, Microsoft Graph e report in Power BI.
Scenario e obiettivo
Le organizzazioni che usano Microsoft Teams → Shifts per la gestione dei turni hanno spesso bisogno di tracciare in modo chiaro chi ha approvato un permesso (time‑off), quando e con quale esito. Questo requisito nasce da esigenze operative (copertura dei turni), di compliance (audit, verifiche interne/esterne) e di analytics (tendenze di assenze e picchi stagionali).
Domanda
È possibile visualizzare in Microsoft Teams → Shifts la cronologia di chi ha approvato le richieste di permesso (time‑off)?
Risposta breve
- Funzionalità nativa – I Shift owners (proprietari del piano turni) o i manager del gruppo possono aprire la richiesta di permesso in Shifts e vedere, nel pannello dei dettagli, la sequenza di approvazione (chi ha agito, quando, stato).
- Limiti attuali – Non esiste un report unico che elenchi in blocco tutte le approvazioni; la cronologia è consultabile solo a livello di singola richiesta.
- Prossimi passi consigliati – Se serve un registro più completo (report esportabile, filtro per date/utenti), Microsoft invita a inviare un’idea nel portale Feedback di Teams, dove le proposte vengono valutate dal team di prodotto.
Come visualizzare la cronologia di approvazione direttamente in Shifts
La procedura è semplice e si basa sui ruoli. I passaggi possono variare leggermente in base a lingua, tema e aggiornamenti dell’interfaccia, ma lo schema è costante:
Prerequisiti
- Essere Shift owner del team Shifts o manager designato per le approvazioni.
- Accesso a Microsoft Teams (desktop o web). Su mobile i passaggi sono analoghi.
Passaggi (desktop/web)
- Apri Microsoft Teams e vai all’app Shifts del team desiderato.
- Vai alla vista Richieste (Requests) e seleziona il filtro Permessi (Time‑off), oppure apri direttamente la richiesta dalla griglia del piano.
- Fai clic sulla richiesta di permesso da esaminare. Si apre il pannello dei dettagli.
- Nella sezione dei dettagli vedrai la timeline/attività dell’oggetto con la sequenza delle azioni: invio, eventuali modifiche, approvazione o rifiuto (con autore e timestamp).
Nota: in nessuna vista standard è disponibile, ad oggi, un elenco aggregato di tutte le approvazioni con relativi approvatori. Per ottenere un quadro globale, fai riferimento alle sezioni successive (Audit, Graph, Power BI).
Limiti e implicazioni operative
- Assenza di report centralizzato: la verifica è puntuale, elemento per elemento.
- Filtri limitati nella vista richieste di Shifts: non è pensata per analisi storiche a lungo periodo.
- Dipendenza dai ruoli: solo owner/manager vedono la cronologia estesa dell’approvazione.
Tre strade per uno storico completo e analitico
Per superare i limiti della vista nativa e costruire un registro molto più ricco, puoi combinare tre componenti della piattaforma Microsoft 365:
- Audit log di Microsoft 365 (per la tracciabilità certificata degli eventi).
- Microsoft Graph API (per l’estrazione massiva e programmabile dei dati Shifts).
- Power BI (per dashboard e filtri avanzati).
Confronto sintetico delle opzioni
| Opzione | Quando usarla | Vantaggi | Limiti | Competenze richieste |
|---|---|---|---|---|
| Shifts (nativo) | Verifica spot di una singola richiesta | Subito disponibile, contestuale | Nessun report aggregato | Ruolo owner/manager |
| Audit log M365 | Ricostruzione certificata di “chi/quando” | Storico ufficiale, con metadati | Interfaccia orientata a compliance, export manuale | Ruoli di compliance |
| Graph API | Estrazioni massive, automazioni, integrazioni | Accesso completo a richieste, metadati e stati | Richiede permessi app/dev e manutenzione | Dev/API, app registration |
| Power BI | Reporting periodico e interattivo | Dashboard, filtri, condivisione con business | Autenticazione verso Graph, modellazione dati | Data modeling/BI |
Audit log di Microsoft 365: come ottenerlo e cosa contiene
Gli audit log sono la fonte ufficiale per sapere chi ha eseguito un’azione e quando. Per Shifts, puoi filtrare l’evento “Shifts time‑off request approved” per estrarre lo storico delle approvazioni.
Prerequisiti e ruoli
- Accesso al Centro compliance (Purview) con ruoli come Audit Logs, Compliance Administrator o equivalenti.
- Auditing abilitato nel tenant (di norma è attivo, ma alcuni tenant legacy potrebbero richiedere un abilitazione esplicita).
Passi operativi (alto livello)
- Apri il portale di compliance e vai a Auditing.
- Imposta un intervallo di date adatto alla tua analisi.
- Nel filtro delle attività, seleziona l’evento Shifts time‑off request approved.
- Esegui la ricerca. Puoi esportare i risultati in CSV per elaborazioni successive.
Campi utili da aspettarsi nell’export
| Campo | Descrizione | Esempio |
|---|---|---|
CreationTime | Timestamp dell’evento | 2025-03-12T10:05:10Z |
Operation | Tipo di evento | Shifts time‑off request approved |
UserId | Utente che ha generato l’evento (approvatore) | nome.cognome@contoso.com |
AffectedUserOrGroup | Utente a cui si riferisce la richiesta | dipendente@contoso.com |
ItemId / RequestId | Identificativo della richiesta | GUID |
Workload | Servizio interessato | Microsoft Teams / Shifts |
ClientIP | IP da cui è stata eseguita l’azione (se disponibile) | 52.xxx.xxx.xxx |
Perché usare l’Audit: è il registro “di prova” per internal audit, dispute o verifiche di compliance. Unisci questi dati con quelli operativi (via Graph) per una vista a 360°.
Esportazione via Microsoft Graph: endpoint e modello dati
Se ti serve un database operativo delle richieste con gli stati di approvazione e i metadati chiave, la strada più flessibile è usare le API di Microsoft Graph.
Endpoint rilevante
Per elencare le richieste di permesso (time‑off) di un team:
GET /v1.0/teams/{teamId}/schedule/timeOffRequests
Permessi e sicurezza
- Delegated (utente): es.
Schedule.Read.All/Schedule.ReadWrite.Allper leggere/scrivere dati di Shifts in base ai privilegi dell’utente. - Application (app): es.
Schedule.Read.Allcon admin consent, ideale per job notturni/integrazioni. Richiede app registration in Entra ID (ex Azure AD), secret/certificato e hardening dei permessi.
Proprietà utili (modello semplificato)
id– Identificativo della richiesta.state– Stato (pending, approved, denied).createdDateTime,lastModifiedDateTime.senderUserId,senderDateTime– Chi ha inviato la richiesta e quando.managerUserId,managerActionDateTime,managerActionMessage– Metadati chiave per la tracciabilità dell’approvazione.timeOff– Oggetto conuserId,startDateTime,endDateTime,timeOffReasonId,isPaid.
Esempi di chiamata
Elenco delle richieste con paginazione
curl -X GET \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
"https://graph.microsoft.com/v1.0/teams/<teamId>/schedule/timeOffRequests?$top=50"
Risposta (estratto didattico)
{
"value": [
{
"id": "AAMkAGI2...",
"state": "approved",
"createdDateTime": "2025-02-21T09:13:22Z",
"lastModifiedDateTime": "2025-02-21T10:05:10Z",
"senderDateTime": "2025-02-21T09:13:22Z",
"senderUserId": "8b9c...",
"managerActionDateTime": "2025-02-21T10:05:10Z",
"managerUserId": "1a2b...",
"managerActionMessage": "Ok, copertura garantita",
"timeOff": {
"userId": "8b9c...",
"startDateTime": "2025-03-10T00:00:00Z",
"endDateTime": "2025-03-12T23:59:59Z",
"timeOffReasonId": "d4e5...",
"isPaid": true
}
}
],
"@odata.nextLink": "https://graph.microsoft.com/v1.0/teams/<teamId>/schedule/timeOffRequests?$skiptoken=..."
}
PowerShell (modulo Microsoft Graph)
# Autenticazione interattiva
Connect-MgGraph -Scopes "Schedule.Read.All"
Imposta il team
$teamId = ""
Estrae le richieste di permesso e seleziona campi chiave
$requests = Get-MgTeamScheduleTimeOffRequest -TeamId $teamId -All
$requests | Select-Object `
Id, State, ManagerUserId, ManagerActionDateTime, SenderUserId,
@{Name='Start';Expression={$*.TimeOff.StartDateTime}},
@{Name='End';Expression={$*.TimeOff.EndDateTime}},
@{Name='ReasonId';Expression={$_.TimeOff.TimeOffReasonId}} |
Export-Csv -Path ".\Shifts-TimeOff-Requests.csv" -NoTypeInformation -Encoding UTF8
Best practice tecniche
- Stabilizza i teamId: mantieni un mapping anagrafico tra team, reparti e responsabili.
- Time zone: normalizza i timestamp in UTC e calcola il locale in fase di report.
- Data quality: sincronizza anche timeOffReasons per etichette leggibili in report.
- Sicurezza: isola l’app Graph con principio del privilegio minimo, rotazione dei secret e audit degli accessi.
Report in Power BI: dalla fonte al cruscotto
Con Audit e Graph puoi alimentare un dataset Power BI che mostri chi ha approvato cosa, quando, con filtri per periodo, reparto, approvatore, motivo. Ecco un percorso tipico.
Architettura consigliata
- Dataflow (opzionale): estrai via Graph e salva in tabelle bronze/silver.
- Dataset: modella le tabelle (Fatto: TimeOffRequests; Dimensioni: Utenti, Team, Reasons, Date).
- Report: viste operative (oggi/settimana), storiche (trend) e compliance (audit trail).
Esempio M (Power Query) per chiamare Graph
Nota: la gestione del token è semplificata a fini illustrativi.
let
AccessToken = "<BEARER_TOKEN>",
TeamId = "<TEAM_ID>",
Source = Json.Document(
Web.Contents("https://graph.microsoft.com/v1.0/teams/" & TeamId & "/schedule/timeOffRequests",
[Headers=[Authorization="Bearer " & AccessToken]]
)
),
Rows = Source[value],
ToTable = Table.FromList(Rows, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
Expand1 = Table.ExpandRecordColumn(ToTable, "Column1",
{"id","state","createdDateTime","lastModifiedDateTime","managerUserId","managerActionDateTime","senderUserId","senderDateTime","timeOff"},
{"id","state","createdDateTime","lastModifiedDateTime","managerUserId","managerActionDateTime","senderUserId","senderDateTime","timeOff"}
),
ExpandTimeOff = Table.ExpandRecordColumn(Expand1, "timeOff",
{"userId","startDateTime","endDateTime","timeOffReasonId","isPaid"},
{"userId","startDateTime","endDateTime","timeOffReasonId","isPaid"}
)
in
ExpandTimeOff
Misure DAX utili
- Tempo medio approvazione =
AVERAGEXdella differenza tra managerActionDateTime e senderDateTime. - Tasso approvazione =
DIVIDE( COUNTROWS(Approved), COUNTROWS(AllRequests) ). - Assenze per motivo = conteggio per timeOffReasonId (con tabella di mapping descrittivo).
Governance, ruoli e permessi – chi vede cosa
| Ruolo | Shifts (cronologia richiesta) | Audit log | Graph API | Power BI |
|---|---|---|---|---|
| Dipendente | Vede la propria richiesta (non la timeline completa di approvazione altrui) | Di norma nessun accesso | No | Solo se condiviso e con RLS |
| Manager di reparto | Vede la timeline delle richieste del team | Solo se autorizzato dal reparto compliance | Delegated (limitato) | Sì, su report pertinenti al team |
| Shift owner | Vede e gestisce tutte le richieste del piano | Possibile accesso su richiesta | Delegated / Application (con policy) | Sì |
| Compliance / Security | Non necessario | Pieno accesso agli audit (in base al ruolo) | Application (least privilege) | Sì, report dedicati audit |
Workflow consigliato: dal bisogno alla soluzione
- Definisci lo scopo: solo visibilità spot o esigenza di storico e report?
- Mappa i ruoli: chi deve vedere approvazioni e a quale livello di dettaglio.
- Attiva/valida l’Audit log e prepara un modello di export ricorrente.
- Implementa Graph per estrazioni massive (job giornaliero/notturno).
- Costruisci Power BI con filtri per team, approvatore, periodo e motivo.
- Documenta la politica di conservazione e le responsabilità (DPO, HR, IT).
Checklist rapida
- ✅ Verifica ruoli in Shifts (owner/manager).
- ✅ Conferma l’abilitazione dell’Audit log.
- ✅ Registra un’app in Entra ID per Graph (se serve reporting periodico).
- ✅ Definisci il mapping teamId ↔ reparto.
- ✅ Progetta il modello dati (tabelle & misure principali).
- ✅ Applica RLS (Row-Level Security) su Power BI per i manager.
Consigli pratici per migliorare la tracciabilità
- Motivi standardizzati: mantieni un catalogo di time‑off reasons curato e coerente.
- Messaggi di approvazione: invita i manager a lasciare note sintetiche ma significative; le ritroverai come managerActionMessage.
- Formazione: istruisci i manager sulla consultazione corretta della cronologia e sui tempi attesi di approvazione.
- Data retention: allinea la conservazione dei log a policy legali/HR.
Troubleshooting
Non vedo la timeline dell’approvazione nella richiesta Controlla i ruoli: solo owner/manager vedono i dettagli completi. Verifica anche di essere nel team corretto. La ricerca Audit non restituisce risultati Amplia l’intervallo di date; verifica che l’attività sia inclusa nel set di eventi tracciati e che i ruoli di compliance siano corretti. Graph restituisce errore 403 Permessi insufficienti: chiedi admin consent per Schedule.Read.All e verifica lo scoping ai team giusti. I timestamp non coincidono Uniforma a UTC in fase ETL e applica il fuso in visualizzazione. Power BI non si aggiorna Verifica le credenziali del connettore (token scaduto), le refresh policies e gli eventuali limiti di throttling.
Esempio completo: dal log all’insight
Immagina un’azienda retail con 12 negozi e 24 manager. L’HR chiede “quante richieste di permesso sono state approvate in ritardo (oltre 48 ore) nell’ultimo trimestre, per manager”.
- Audit: esporti gli eventi “Shifts time‑off request approved” del trimestre.
- Graph: estrai le richieste con
senderDateTimeemanagerActionDateTime. - Power BI: calcoli LeadTimeApproval = managerActionDateTime – senderDateTime; applichi una misura per contare i casi > 48 ore e visualizzi la classifica per manager e negozio.
Risultato: l’HR individua due punti vendita con colli di bottiglia; il direttore area interviene sulla copertura turni.
FAQ
Posso esportare l’intera cronologia approvazioni da Shifts con un clic? No, Shifts non offre un report aggregato nativo. Usa Audit e/o Graph per creare un export completo. L’utente può vedere chi ha approvato la propria richiesta? Può vedere lo stato e le note associate alla sua richiesta; i dettagli avanzati della timeline sono tipicamente riservati a owner/manager. Quali permessi servono per leggere le richieste via Graph? In genere Schedule.Read.All (delegated o application). Per scenari server‑to‑server preferisci application con admin consent e privilegi minimi. Quanto resta disponibile l’Audit? Dipende dalla licenza e dalla policy del tenant. Verifica con il tuo team di compliance la retention applicata ai log di audit. Posso costruire un cruscotto per i manager di negozio? Sì, con Power BI e RLS puoi esporre a ciascun manager solo i dati del proprio perimetro. Posso filtrare le richieste per motivo (ferie, malattia, formazione)? Sì. In Graph usa timeOffReasonId e mantieni una tabella di mapping per etichette parlanti. La timeline in Shifts mostra anche le modifiche alla richiesta? Sì, la timeline include gli eventi chiave legati alla richiesta (invio, eventuale modifica, approvazione/rifiuto) con autore e orario. Esiste un “super report” ufficiale di Microsoft che già fa tutto? Al momento non è disponibile. Il percorso raccomandato da Microsoft è usare Audit e Graph e inviare feedback sul portale per richieste di funzionalità.
Modello dati di riferimento (logico)
Per un reporting robusto, valuta un modello a stella:
- Fatto: TimeOffRequestFact (IdRichiesta, Stato, SenderUserId, SenderDateTime, ManagerUserId, ManagerActionDateTime, ReasonId, Start, End, TeamId).
- Dimensioni: DimUtente (UserId, Nome, Ruolo, Reparto), DimTeam (TeamId, Sede, Area), DimReason (ReasonId, Descrizione), DimDate (Calendario), DimManager (ManagerUserId, Nome).
Policy e compliance
- Least privilege: limita la platea che può vedere le timeline complete e i report globali.
- Privacy: i dati di assenza possono essere sensibili. Applica minimizzazione e need‑to‑know.
- Retention: allinea la durata di conservazione dei dataset BI alle policy HR e ai requisiti legali.
- Auditabilità: conserva pipeline, mapping e trasformazioni (DataOps) per garantire verificabilità end‑to‑end.
Invio di feedback a Microsoft
Se desideri un report nativo in Teams Shifts che elenchi le approvazioni in blocco, inoltra la richiesta nel portale Feedback di Teams, specificando: casi d’uso, filtri richiesti (intervallo date, team, approvatore, motivo), output desiderati (CSV/Excel, paginazione, API).
Riepilogo
- In Shifts puoi già vedere la timeline di approvazione aprendo la singola richiesta di permesso.
- Non esiste un report cumulativo incorporato: per uno storico completo usa Audit log M365 e/o Microsoft Graph.
- Con Power BI trasformi i dati in dashboard con filtri per approvatore, periodo e motivo.
- Definisci ruoli, sicurezza e retention per una soluzione sostenibile e conforme.
In sintesi operativa: per sapere chi ha approvato una richiesta in Shifts, guarda la timeline dentro la richiesta stessa. Per monitorare tutte le approvazioni, combina Audit, Graph e Power BI in un flusso automatizzato: avrai uno storico analitico e pronto per gli audit.
