Calcolare i minuti in un intervallo di tempo accavallato L’argomento è risolto

Il software per la BI di Microsoft, leader nel mercato

viaggiatrice
Messaggi: 44 | Topic creati
Iscritto il: mar 6 feb 2024, 7:32
Ringraziato: 3 volte

Calcolare i minuti in un intervallo di tempo accavallato

Messaggio da viaggiatrice »

Ti ringrazio per la spiegazione.
Purtroppo non ne riesco a venire a capo in PowerBi, come già anticipato nel messaggio prima. In Excel mi pare più semplice ma non vorrei orientarmi li.

Non mi piace il "mi dici la formula" semplicemente perché qui come lì sono per imparare (se hai letto ho fatto poi domande per capire la natura della formula). Non ho altro modo per poterla applicare in PowerBi.

Ora, mi piacerebbe seguire la tua propsota iniziale ma, come già anticipato, non riesco ad applicarla. Se hai modo di essere più chiaro allora potrò provarci ancora. Grazie


Avatar utente

Andrea90
Messaggi: 2255 | Topic creati
Iscritto il: dom 28 giu 2020, 19:41
Luogo: Bologna
Ringraziato: 672 volte
Contatta:

Calcolare i minuti in un intervallo di tempo accavallato

Messaggio da Andrea90 »

viaggiatrice ha scritto: gio 15 feb 2024, 16:55 Non mi piace il "mi dici la formula" semplicemente perché qui come lì sono per imparare (se hai letto ho fatto poi domande per capire la natura della formula).
Potrà anche non piacerti, ma credo che tu non abbia aperto la discussione nella sezione formule inizialmente, ma in quella Power BI & Power Query, poi ti sarà stata spostata li perché hai espressamente richiesto una formula excel da poter eventualmente "riportare" in Power BI.

E io torno a suggerirti di non applicare questa logica (non per questo caso specifico, ma proprio in generale). Power BI ed Excel sono due strumenti diversi, se una cosa funziona in uno strumento, non è detto che funzioni anche nell'altro. E se anche funziona, non è detto che stia lavorando nel modo corretto.

E ti ho poi fornito un'osservazione su dove quella formula che hai costruito può "cozzare" con il sistema Power BI.

Puoi ottimizzare quel codice? Credo di si...

Puoi seguire un'altra strada? probabilmente si, ad esempio quella che ti avevo fornito all'inizio.

Poi su questo secondo punto, hai scritto su Forum Excel che "ho provato a risolverlo con PowerBi e relativo PowerQuery ma senza esito", ma non è propriamente corretto perché dal mio ultimo messaggio inviato (prima che tu scrivessi la stessa richiesta su Forum Excel) non hai più chiesto nulla come suggerimenti.

Giusto come appunto, qui siamo "easy" sul tema, ma su Forum Excel è vietato il crossposting (te lo scrivono anche nel messaggio di benvenuto), quindi occhio a tenere discussioni aperte su due forum. Lo dico più per te nel caso in cui venissi "sanzionata" su Forum Excel...

Andrea
Se hai gradito l'aiuto che hai ricevuto considera di contribuire alle spese per il mantenimento del forum facendo una libera DONAZIONE --> Link

Ricordarsi di segnare come "RISOLTE" le discussioni per le quali si è ricevuto un feedback positivo. Per vedere come fare --> Link

Autore del topic
viaggiatrice
Messaggi: 44 | Topic creati
Iscritto il: mar 6 feb 2024, 7:32
Ringraziato: 3 volte

Calcolare i minuti in un intervallo di tempo accavallato

Messaggio da viaggiatrice »

Buongiorno Andrea, non sono stata spostata (v. aggiornamento ultimo post).
Ad ogni modo, se esiste un'altra soluzione (quella che hai indicato), non riesco ad applicarla.

Ora capito quello che intendi..il punto è che il mio problema non l'ho risolto e, ancor peggio, non ho imparato molto (su powerbi...su Excel ho capito molto bene il concetto).

Potresti meglio spiegarmi la tua idea di risoluzione?

Grazie
Avatar utente

Andrea90
Messaggi: 2255 | Topic creati
Iscritto il: dom 28 giu 2020, 19:41
Luogo: Bologna
Ringraziato: 672 volte
Contatta:

Calcolare i minuti in un intervallo di tempo accavallato

Messaggio da Andrea90 »

@viaggiatrice,

Ripartiamo.

Premetto che non vedo cosa tu abbia elaborato fino ad ora, quindi se hai un file demo (quello allegato va più che bene), collegalo ad un file di Power BI e mostra i passaggi fatti di volta in volta che smarchiamo i seguenti punti:

Punto (1)

Andrea90 ha scritto: lun 12 feb 2024, 16:44 Ti anticipo già che se devi lavorare con datetime in Power BI devi suddividere i campi, quindi in uno tieni la data e nell'altro l'orario.
Questo lo fai in Power Query.

Punto (2)
Andrea90 ha scritto: lun 12 feb 2024, 16:44 Poi ti crei una tabella che contenga "l'anagrafica ore" (formato 24h) dove per ogni riga avrai un orario diverso con un incremento scelto da te (ad esempio se ti bastano i minuti puoi scrivere: 00:01:00, 00:02:00, ecc). Se vuoi un livello al secondo ovviamente dovrai aumentare il numero di righe. Ci aggiungi poi una colonna che identifica in che turno si trova quello specifico orario.
Dovresti avere una tabella come la seguente:
Immagine

Punto (3)
Andrea90 ha scritto: mar 13 feb 2024, 14:47 Se la tabella anagrafica ore ha una riga per ciascun secondo, ed il filtro ti restituisce 45 righe, significa che per il turno della Mattina, quel particolare fermo ha occupato 45 secondi. Stesso ragionamento per gli altri due turni.
Questo concetto l'hai compreso? Altrimenti spiego meglio..

Andrea
Se hai gradito l'aiuto che hai ricevuto considera di contribuire alle spese per il mantenimento del forum facendo una libera DONAZIONE --> Link

Ricordarsi di segnare come "RISOLTE" le discussioni per le quali si è ricevuto un feedback positivo. Per vedere come fare --> Link

Autore del topic
viaggiatrice
Messaggi: 44 | Topic creati
Iscritto il: mar 6 feb 2024, 7:32
Ringraziato: 3 volte

Calcolare i minuti in un intervallo di tempo accavallato

Messaggio da viaggiatrice »

Ciao Andrea,

allora ho creato la tabella di anagrafica e associato ad ogni minuto il turno.

Allego il file su cui sto lavorando
test_due.pbix
(150.2 KiB) Scaricato 3 volte
Non ho capito il punto 3, ci ho ragionato più volte ma non l'ho compreso. Come posso filtrare il mio orario di inizio con i minuti della tabella anagrafica?
Avatar utente

Andrea90
Messaggi: 2255 | Topic creati
Iscritto il: dom 28 giu 2020, 19:41
Luogo: Bologna
Ringraziato: 672 volte
Contatta:

Calcolare i minuti in un intervallo di tempo accavallato

Messaggio da Andrea90 »

viaggiatrice ha scritto: lun 19 feb 2024, 8:03 Come posso filtrare il mio orario di inizio con i minuti della tabella anagrafica?
Quello che devi fare è in realtà il contrario...

Parti dalla tua tabella [TestOra] e calcolati una colonna calcolata seguendo questi step:

1) Crea una variabile che tenga in memoria l'orario di inizio prendendo il relativo campo (l'hai chiamato [Inizio])

2) Crea una variabile che tenga in memoria l'orario di fine prendendo il relativo campo (l'hai chiamato [Fine])

3) Filtra la tua tabella di anagrafica (devi usare FILTER) utilizzando due condizioni legate da un operatore AND(). Condizione 1: L'orario deve essere >= alla prima variabile. Condizione 2: L'orario deve essere <= alla seconda variabile. Tutto questo all'interno di un CALCULATETABLE che selezioni il valore del campo [Turno] corretto (dipende se stai calcolando i minuti del Mattino, Pomeriggio o Notte).

Quello che ottieni dal passaggio 3 è una tabella con N righe, ogni riga rappresenta un secondo. Conta le righe di questa tabella ed otterrai i secondi intercorsi nel turno che hai scelto relativi al range [Inizio] - [Fine].

Hai tenuto l'orario della tabella TestOra in hh:mm:ss pertanto anche le righe della anagrafica dovranno tenere conto dei secondi e non solo dei minuti.

Andrea
Se hai gradito l'aiuto che hai ricevuto considera di contribuire alle spese per il mantenimento del forum facendo una libera DONAZIONE --> Link

Ricordarsi di segnare come "RISOLTE" le discussioni per le quali si è ricevuto un feedback positivo. Per vedere come fare --> Link

Autore del topic
viaggiatrice
Messaggi: 44 | Topic creati
Iscritto il: mar 6 feb 2024, 7:32
Ringraziato: 3 volte

Calcolare i minuti in un intervallo di tempo accavallato

Messaggio da viaggiatrice »

Ciao Andrea...[TestOra]?
Ho le tabelle TepiLavoro e TabellaMinuti

Se ho ben capito i passaggi devo fare il lavoro su TempiLavoro....
Ci provo anche se la vedo ostica per me :(
Avatar utente

Andrea90
Messaggi: 2255 | Topic creati
Iscritto il: dom 28 giu 2020, 19:41
Luogo: Bologna
Ringraziato: 672 volte
Contatta:

Calcolare i minuti in un intervallo di tempo accavallato

Messaggio da Andrea90 »

viaggiatrice ha scritto: lun 19 feb 2024, 10:18 Ciao Andrea...[TestOra]?
Perdona, intendevo [TempiLavoro]
viaggiatrice ha scritto: lun 19 feb 2024, 10:18 Ci provo anche se la vedo ostica per me
Procedi a step, parti dalla colonna per il turno "Mattina" e crea la formula in DAX seguendo gli step indicati. Se ti fermi in un punto allega la funzione DAX che hai realizzato così si lavora su quella.

Andrea
Se hai gradito l'aiuto che hai ricevuto considera di contribuire alle spese per il mantenimento del forum facendo una libera DONAZIONE --> Link

Ricordarsi di segnare come "RISOLTE" le discussioni per le quali si è ricevuto un feedback positivo. Per vedere come fare --> Link

Autore del topic
viaggiatrice
Messaggi: 44 | Topic creati
Iscritto il: mar 6 feb 2024, 7:32
Ringraziato: 3 volte

Calcolare i minuti in un intervallo di tempo accavallato

Messaggio da viaggiatrice »

Ti ringrazio per la tua pazienza enorme

Allora ho creato all'interno della tabella "TempiLavoro" la colonna "OrarioFine" e "Orario Inizio" utilizzando

Codice: Seleziona tutto

OrarioFine = TempiLavoro[Fine]
e

Codice: Seleziona tutto

OrarioInizio = TempiLavoro[Inizio]
Ora se ho ben capito dovrei fare una nuova tabella con la funzione CALCULATE e FILTER per filtrare il tempo di ora inizio con il valore della colonna [Turno] della tabella 'TabellMinuti'

Ho provato ad abozzare qualcosa così ma mi sono fermata

Codice: Seleziona tutto

Nuovatabella =
CALCULATE  (
FILTER (
TabellaMinuti,
TabellaMinuti[Turno] =
IF (
TempiLavoro[OrarioInizio]>=
test_due.pbix
(158.41 KiB) Scaricato 3 volte
Avatar utente

Andrea90
Messaggi: 2255 | Topic creati
Iscritto il: dom 28 giu 2020, 19:41
Luogo: Bologna
Ringraziato: 672 volte
Contatta:

Calcolare i minuti in un intervallo di tempo accavallato

Messaggio da Andrea90 »

@viaggiatrice,

Tutto va fatto in una singola espressione, non hai bisogno di creare più colonne. Utilizza VAR per salvare il valore di un dato campo all'interno di una variabile da riutilizzare nel codice a valle:

Codice: Seleziona tutto

Turno Mattina = 
VAR TimeStart = TempiLavoro[Inizio]
VAR TimeEnd = TempiLavoro[Fine]
VAR result = ....
RETURN result
Ora in result devi filtrare la tabella che contiene l'anagrafica ore. Quindi ok che scrivi:

FILTER ( TabellaMinuti, ... )

Ma come argomento condizione (il secondo) devi verificare se il campo che contiene hh:mm:ss nella tabella anagrafica tempi è sia maggiore del tuo TimeStart, che inferiore del tuo TimeEnd. Dunque dovrebbe essere qualcosa di simile:

Codice: Seleziona tutto

TabellaMinuti[Value] >= TimeStart && TabellaMinuti[Value] <= TimeEnd
Quel "&&" è l'operatore logico AND(), avresti potuto anche scrivere:

Codice: Seleziona tutto

AND( TabellaMinuti[Value] >= TimeStart, TabellaMinuti[Value] <= TimeEnd)
Con [Value] che contiene i valori corretti dei vari tempi separati ciascuno da 1 secondo (come quelli che ti avevo mostrato in un'immagine qualche messaggio fa).

Questo codice ti restituisce la [TabellaMinuti] filtrata, ma non tiene conto del turno per il quale vuoi calcolare i tempi. Nel messaggio precedente ti avevo indicato di inserire questa formula dentro un CALCULATETABLE() perché devi cambiare il contesto filtro nel quale stai valorizzando questa misura.

CALCULATE restituisce un valore scalare, CALCULATETABLE restituisce una tabella (e tu hai infatti bisogno di una tabella).
Perché l'ultimo passaggio sarà appunto quello di contare le righe di questa tabella, e per farlo dovrai utilizzare COUNTROWS().

Vedi se così ti risulta più chiara la logica.

Andrea
Se hai gradito l'aiuto che hai ricevuto considera di contribuire alle spese per il mantenimento del forum facendo una libera DONAZIONE --> Link

Ricordarsi di segnare come "RISOLTE" le discussioni per le quali si è ricevuto un feedback positivo. Per vedere come fare --> Link
Rispondi