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 »

Buongiorno a tutti,
considerando che l'azienda dove lavoro produce su tre turni (mattina 06.00.00 - 13.59.59 / pomeriggio 14.00.00 - 21.59.59 / notte 22.00.00 - 05.59.59) e considerando che ho delle segnalazioni per più tipologie di fermo (1 lavoro / 2 attrezzaggio / 3 guasto etc) e considerando che una segnalazione può essere a cavallo di due turni (es 12.32 - 14.15) ho bisogno di calcolare i minuti in base alla tipologia per i turni.

Il fermo di attrezzaggio del 03/10 che va dalle 12.32 alle 14.15 dovrà essere di 88 minuti al mattino (12.32 - 13.59) e di 15 minuti al pomeriggio (14.00 - 14.15).

Posto che, considerando che parto da una colonna data/ora, ho creato una colonna fine e una inizio dove con questa mi estraggo solo l'ora

Codice: Seleziona tutto

Fine = FORMAT('LavMacchina'[IMES_End], "HH:mm:ss")
Sto lavorando su un cubo e non ho possibilità di fare un export completo ma quello che sono riuscita a fare è questo file che allego.

Ho provato due misure ma senza esito

Codice: Seleziona tutto

DurataEffettiva =
IF(
LavMacchina[Tipo] = 2,
IF(
HOUR(LavMacchina[Inizio]) >= 6 && HOUR(LavMacchina[Fine]) <= 13,
MINUTE(LavMacchina[Fine]) - MINUTE(LavMacchina[Inizio]),
IF(
HOUR(LavMacchina[Inizio]) < 6,
MINUTE(DATEADD(LavMacchina[Inizio], 6, HOUR)) + MINUTE(LavMacchina[Fine]) - MINUTE(DATEADD(LavMacchina[Fine], 14, HOUR)),
MINUTE(LavMacchina[Fine]) - MINUTE(DATEADD(LavMacchina[Inizio], 6, HOUR))
)
),
MINUTE(LavMacchina[Fine]) - MINUTE(LavMacchina[Inizio])
)

Codice: Seleziona tutto

2Mattina =
    SUMX(
        FILTER(
            LavMacchina,
            LavMacchina[Tipo] = 2 &&
            HOUR(LavMacchina[Inizio]) >= 6 &&
            HOUR(LavMacchina[Fine]) <= 14 &&
            LavMacchina[Fine] < TIME(14, 0, 0)
        ),
        MINUTE(LavMacchina[Fine]) - MINUTE(LavMacchina[Inizio])
    )
Non so più dove sbattere la testa sinceramente

Grazie a tutti per la pazienza
Allegati
demoesempio.xlsx
(16.3 KiB) Scaricato 6 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,

Prima di aprire nuove discussioni sarebbe necessario chiudere quelle in essere, per le quali si è ricevuto un riscontro positivo. Se non sai come fare leggi gli annunci di staff per mettere lo stato "risolto".

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 »

Ehm..quella discussione non è risolta. E' un problema diverso...mentre capisco quella vorrei andare avanti con questo problema. Solo per questo :)
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,

La discussione precedente è in fase di risoluzione, hai già ottenuto gli spunti necessari bastava attendere qualche minuto in più del tuo tempo da dedicarci.

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.

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.

Poi per ogni causale di fermo avrai un orario di inizio ed uno di fine (riportati al minuto se per te basta la precisione al minuto). dovrai filtrare la tabella di anagrafica ore per il turno 1 e per le righe di orario che rientrano nel range del data inizio - data fine. Il numero di righe che rimangono saranno i minuti spesi nel turno 1.

Farai lo stesso per gli altri 2 turni.

Questa è un'idea di massima che penso possa aiutarti come spunto, poi sta a te metterla in pratica sulla base del tuo caso reale.

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,
si e ti ringrazio ancora. Semplicemente per l'altro non avevo capito che si intendesse PowerQuery ma avevo inteso l'Excel finale (non so come possiamo chiamarlo per differenziare).

Per questo, come già scritto, ho già estratto l'ora dalla colonna IMES_Start e la data nella mia analisi.

Provo a mettere in pratica quanto dici e vi aggiorno.

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 »

Andrea90 ha scritto: lun 12 feb 2024, 16:44 Ci aggiungi poi una colonna che identifica in che turno si trova quello specifico orario.

Poi per ogni causale di fermo avrai un orario di inizio ed uno di fine (riportati al minuto se per te basta la precisione al minuto). dovrai filtrare la tabella di anagrafica ore per il turno 1 e per le righe di orario che rientrano nel range del data inizio - data fine. Il numero di righe che rimangono saranno i minuti spesi nel turno 1.
Allora ho creato la tabella di anagrafica e associato il valore del turno al minuto (riporto come ho fatto se può servire a qualcuno).

Codice: Seleziona tutto

TurnoOra = 
SWITCH(TRUE(),
'AnagraficaMinuti'[OraMinuto] >=TIME(6,0,0) && 'AnagraficaMinuti'[OraMinuto] <TIME(13,59,59),"Mattina",
'AnagraficaMinuti'[OraMinuto] >=TIME(14,0,0) && 'AnagraficaMinuti'[OraMinuto] <TIME(21,59,59), "Pomeriggio",
'AnagraficaMinuti'[OraMinuto] >=TIME(22,0,0) || 'AnagraficaMinuti'[OraMinuto] <=TIME(05,59,59),"Notte",
"Other")
Non ho compreso quale sarebbe il passaggio successivo per collegare le mie colonne "inizio" (in cui so a che turno appartiene) con fine (in cui non so se è tutto di un turno o solo parzialmente) con anagrafica minuti.
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,

Se in una riga della tua tabella dei fermi hai l'orario di inizio e l'orario di fine (sperando che non ci siano fermi che occupino più di 24 ore), con l'uso di VAR riesci ad ottenere questi due orari e li usi per filtrare la tabella di anagrafica ore (se calcoli le ore spese nel turno "Mattina" avrai precedentemente filtrato questa tabella per i valori [TurnoOra] = "Mattina").

Se la tabella anagrafica ore ha una riga per ciascun minuto, ed il filtro ti restituisce 45 righe, significa che per il turno della Mattina, quel particolare fermo ha occupato 45 minuti. Stesso ragionamento per gli altri due turni.

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 mi molto chiaro il tuo discorso ma ho risolto creando tre colonne: mattina, notte, pomeriggio e applicando (grazie a degli amici di excel) una formula di excel modificata ovvero (nel calcolo dei minuti per il turno notte) convertito in formato ora e risolto.
Ora ho ottenuto i minuti..provo ad applicarli al report.

Codice: Seleziona tutto

Notte = 
VAR m = 0.000694444444444444
VAR s =
    ADDCOLUMNS (
        ADDCOLUMNS (
            GENERATESERIES ( 0, [IMES_End] - [IMES_Start], m ),
            "Time", [IMES_Start] + [Value]
        ),
        "Hour", HOUR ( [Time] )
    )
RETURN
    CALCULATE (
        SUMX (
            FILTER ( s, ( [Hour] >= 22 || [Hour] < 6 ) ),
            m
        )
    )
[/code]

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 »

Si può chiudere questa discussione in quanto ho risolto da me, come spiegato sopra, il motivo per cui era aperta. E' sorto un altro problema ma apro altra discussione nuova.
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,

Codice: Seleziona tutto

VAR s =
    ADDCOLUMNS (
        ADDCOLUMNS (
            GENERATESERIES ( 0, [IMES_End] - [IMES_Start], m ),
            "Time", [IMES_Start] + [Value]
        ),
        "Hour", HOUR ( [Time] )
    )
Ho letto la discussione su forum excel. La logica del "mi dici la formula in Excel che poi la replico su Power BI" funziona poco in Power BI.

Giusto per darti un input su quello che fa la tua formula:

ADDCOLUMNS è una funzione iteratore, e tu ne hai messe due annidate. Vuol dire che il sistema esegue una scansione di una tabella per crearti quel "Time" e poi ne esegue un'altra sempre sulla stessa tabella per crearti "Hour". Risulta facile intuire che non è proprio il massimo, se la tua "tabella" ha 1000 righe, ne leggerai in realtà 2000.

Poi questa "tabella" è generata da GENERATESERIES la quale parte da 0 fino alla differenza di [IMES_End] - [IMES_Start] con righe tra loro separate di un valore m, che è pari a 0.000694444444444444. (immagina quante righe in media crei in questa tabella).

Tutto ciò immagino lo inserirai in una formula per una colonna calcolata (in realtà 3 perché lo fai per i 3 turni). Dunque 3 x il numero di righe della tua tabella di partenza.

Senza contare il fatto che ci sarebbe un altro iteratore in quella formula, ovvero quel FILTER finale, inserito dentro a SUMX (altro iteratore)...

Giusto come appunto per il futuro, Power BI ha le sue logiche, ma non sono quelle di 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
Rispondi