Ciao a tutti,
Prendiamo un dataset che descrive eventi: inizio, fine, e varie informazioni su quell'evento.
sto sbattendo la testa su un problema legato alla base dati che ho sotto mano. Molte righe del mio dataset (ve ne condivido qualcuna opportunamente camuffata da dati sensibili) hanno la data di inizio minore della data di fine. A livello riepilogativo, questo è un problema, perchè quando vado a prendere i minuti ad esempio del 4 gennaio, questi sono ben maggiodi dei canonici 1440 minuti/giorno.
Mi occorre riempire il vuoto, andando a creare delle righe che vanno dalla mezzanotte fino alla fine dell'evento. In alcuni casi, devo creare più righe.
Ho preparato un excel che spero sia abbastanza esaustivo, con alcune righe esemplificative.
Vi sono 4 categorie:
A--> DataInizio=DataFine, queste vanno bene
B--> DataFine = DataInizio+1, in questo caso occorre creare una riga in più, chiudere la prima alle 23:59:59 di Data Inizio e aprire la seconda alle 00:00:00 di DataFine.
C--> DataFine = DataInizio+N. In questo caso oltre che a creare una riga in più come per la categoria B, devo anche riempire il vuoto creando righe per ogni giorno che manca, aprendo alle 00:00:00 e chiudendo alle 23:59:59. Esempio più esaustivo nell'excel.
D--> DataInizio>DataFine. In questo caso non serve fare nulla, le identifico e le filtro direttamente da PowerQuery.
Quando creo una riga, tutte le altre informazioni rimangono uguali.
Avete dei suggerimenti da darmi? Grazie.
Eseguire il riempimento delle date L’argomento è risolto
-
- Messaggi: 61 | Topic creati
- Iscritto il: lun 31 mag 2021, 12:21
- Ringraziato: 4 volte
-
- Messaggi: 2255 | Topic creati
- Iscritto il: dom 28 giu 2020, 19:41
- Luogo: Bologna
- Ringraziato: 672 volte
- Contatta:
Eseguire il riempimento delle date
calcioscacchi,
Utilizzi la sintassi {[data_inizio]..[data_fine]} per creare una lista "innestata" di date, poi la espandi e vai ad eseguire un check se la data che ottieni è uguale a quella iniziale allora avrai come orario di partenza quello che ti riporta il sistema, e come valore di fine giornata sempre 23:59, se la data che ottieni nella lista è uguale a quella di fine allora avrai come orario di inizio 00:00 e come orario di fine quella del sistema, in tutti gli altri casi l'orario di inizio sarà sempre 00 e quello di fine 23:59.
Andrea
Utilizzi la sintassi {[data_inizio]..[data_fine]} per creare una lista "innestata" di date, poi la espandi e vai ad eseguire un check se la data che ottieni è uguale a quella iniziale allora avrai come orario di partenza quello che ti riporta il sistema, e come valore di fine giornata sempre 23:59, se la data che ottieni nella lista è uguale a quella di fine allora avrai come orario di inizio 00:00 e come orario di fine quella del sistema, in tutti gli altri casi l'orario di inizio sarà sempre 00 e quello di fine 23:59.
Andrea
-
Autore del topic - Messaggi: 61 | Topic creati
- Iscritto il: lun 31 mag 2021, 12:21
- Ringraziato: 4 volte
Eseguire il riempimento delle date
Ho capito la strategia, provo e ti faccio sapere. Secondo me ci sono delle cose nel tuo ragionamento che non funzionano, ma provo e ti riporto caso per caso
Grazie intanto per la dritta.
Grazie intanto per la dritta.
-
- Messaggi: 890 | Topic creati
- Iscritto il: dom 28 giu 2020, 19:03
- Luogo: San Giovanni in Persiceto (BO)
- Ringraziato: 325 volte
- Contatta:
Eseguire il riempimento delle date
calcioscacchi ha scritto: ↑ven 31 mar 2023, 9:46 Secondo me ci sono delle cose nel tuo ragionamento che non funzionano
Il ragionamento di Andrea90 funziona benissimo, ha solo "omesso" la casistica ovvia (se la data coincide sia con quella di inizio sia con quella di fine, replicare le due colonne originali). Presuppone che tu crei altre due colonne "event_datetime_2", "event_end_datetime_2" che sono quelle su cui poi calcolerai il deltaAndrea90 ha scritto: ↑gio 30 mar 2023, 17:58 se la data che ottieni è uguale a quella iniziale allora avrai come orario di partenza quello che ti riporta il sistema, e come valore di fine giornata sempre 23:59, se la data che ottieni nella lista è uguale a quella di fine allora avrai come orario di inizio 00:00 e come orario di fine quella del sistema, in tutti gli altri casi l'orario di inizio sarà sempre 00 e quello di fine 23:59
Enrico Galli
Link utili: I nostri tutorial | Come inserire: Immagini - Codice - Risolto
Se il forum ti è stato utile, considera di supportarlo con una libera donazione
Link utili: I nostri tutorial | Come inserire: Immagini - Codice - Risolto
Se il forum ti è stato utile, considera di supportarlo con una libera donazione
-
Autore del topic - Messaggi: 61 | Topic creati
- Iscritto il: lun 31 mag 2021, 12:21
- Ringraziato: 4 volte
Eseguire il riempimento delle date
Eccomi, devo ricredermi, il tuo suggerimento era azzeccato su tutti i fronti.
Ora il risultato è quello sperato. Mi riservo un po' di tempo per giocarci, ma se avrò dei problemi, aprirò una discussione dedicata.
Enrico Galli Certo, quel passaggio non l'aveva esplicitato ma era scontato, infatti ho ricreato una colonna Data Inizio e una Data Fine con i nuovi criteri.
Grazie.
Per i posteri:
Creazione lista, colonna poi da espandere su nuove righe e modificare in tipo Data
Colonna Data_Inizio: se DateList combacia con event_start_date, prendere il dato dalla colonna che contiene il formato datetime (io ne avevo due, una tipo date per confronto e una di tipo datetime che contiene l'informazione che ci serve), altrimenti siamo in un giorno diverso e deve iniziare da 00:00:00. Convertire la colonna in formato datetime
Colonna Data_Fine: se DateList è uguale alla data di fine evento, allora siamo arrivati alla fine dell'evento e utilizziamo la corrispondente datetime (come sopra). Altrimenti, attraverso la funzione DateTime.From, creare la chiusura alle 23:59:59. Convertire poi in datetime.
Ora il risultato è quello sperato. Mi riservo un po' di tempo per giocarci, ma se avrò dei problemi, aprirò una discussione dedicata.
Enrico Galli Certo, quel passaggio non l'aveva esplicitato ma era scontato, infatti ho ricreato una colonna Data Inizio e una Data Fine con i nuovi criteri.
Grazie.
Per i posteri:
Creazione lista, colonna poi da espandere su nuove righe e modificare in tipo Data
Codice: Seleziona tutto
= Table.AddColumn(#"Modificato tipo2", "DateList", each {Number.From([event_start_date])..Number.From([event_end_date])})
Codice: Seleziona tutto
= Table.AddColumn(#"Modificato tipo", "Data_Inizio", each if [DateList]=[event_start_date] then [event_datetime] else [DateList])
Codice: Seleziona tutto
= Table.AddColumn(#"Modificato tipo3", "Data_Fine", each if [DateList]=[event_end_date] then [event_end_datetime] else DateTime.From(#datetime(Date.Year([DateList]),Date.Month([DateList]),Date.Day([DateList]),23,59,59)))
Ultima modifica di calcioscacchi il ven 31 mar 2023, 11:05, modificato 1 volta in totale.