Newsgroup: it.comp.appl.access
Titolo: raggrupare report per intervallo data di 10 giorni

Salve,
vorrei raggruppare un report, contenente un campo data di arrivo merce.
 
Con le opzioni di raggruppamento posso scegliere: una settimana, un mese ecc.
 
Non vi è la possibilità di personalizzare il raggruppamento per 10 giorni.
 
Grazie

>>>>  
http://www.bb2002.it
 :)  <<<<<
........... [ al lavoro ] ...........


Ho capito il concetto. Ma non so come trasformare una data in seriale e non so come "tenere" la parte intera
 
grazie

Una cosa simile...? (non ne sono certissimo ma l'idea dovrebbe essere giusta)
 
DataSeralizzata=(clng(TuaData)\10)*10
 
Attenzione al verso del BackSlash... è come fare il FIX o CINT in quel modo...
 
IN sostanza questa funzione arrotonda alla decina... devi provare se soddisfa la tua esigenza...
 
@Alex
 


Ciao e grazie Alex,
ottengo uno strano risultato.
 
1/1/2019 --> 43730
2/2/2019 --> 43740
3/3/2019 --> 43750
4/4/2019 --> 43760
 
ad ogni giono avanza di una decina...e poi da qua come raggruppo ogni 10 gg?

Intanto stai progredendo il mese non il giorno... nella tua sequenza...
La funzione con clng converte in seriale long progressivo ... divide per 10, prende la parte fissa e rimoltiplica per 10.
Questo fa sì che quel dato abbia scalini di 10gg che poi sono il Raggruppamento a 10gg che metterai in una query e su cui raggruppi...
 
Verifica bene il valore in relazione a quanto ti ho esposto dovrebbe andare.
 
@Alex

Il giorno venerdì 20 settembre 2019 21:19:29 UTC+2, @Alex ha scritto:

ciao Alex
ho provato con VBA
 
In un campo calcolato ottengo il valore 1 2 3 per gli intervalli data su base mensile, quindi do in pasto al report il campo calcolato per il raggruppamento.
 
Public Function DS(DataPassata As Date) As Long
 
If DataPassata >= #1/1/2019# And DataPassata <= #1/10/2019# Then
DS = 1
End If
 
If DataPassata >= #1/11/2019# And DataPassata <= #1/20/2019# Then
DS = 2
End If
 
If DataPassata >= #1/21/2019# And DataPassata <= #1/31/2019# Then
DS = 3
End If
 
funziona bene ma ora non vorrei scrivere tutti gli if per tutti i mesi dell'anno.
 
come posso fare ?
 
grazie

Ti ho già spiegato come fare perché è cosa non hai compreso...?
Se hai un campo che cambia a step di 10gg non é gia quello che ti serve...?
Se devi partire dal 1 del mese o dal 5 basta sommare alla data l'offset...
Perché ho il sospetto che tu non abbia minimamente capito il suggerimento...?
 
@Alex


Se posso,
ti allego due link dove ci sono due immagini della query così non
mi sbaglio nelle spiegazioni
 
query struttura: (dove applico in un campo calcolato la tua formula)
 
https://ibb.co/VwwqLM9
 
 
visualizzazione query: (il risultato che non capisco come raggrupparlo)
 
 
https://ibb.co/3kPRNmh
 
 
 


Ma forse alla base di tutto mi sono espresso male io all'inizio
 
io devo raggruppare le date presenti nel mese in tre gruppi:
 
1° gruppo dall'1 al 10
2° gruppo dall'11 al 20
3° gruppo dal 21 a fine mese

Si allora ci siamo fraintesi.. quel sistema genera progressioni di 10gg
 
 
In ogni caso la logica non cambia... prendi la data estrai il Giorno e lo serializzi a 10 allo stesso modo poi ricomponi la data con Dateserial...
 
In sostanza se prendi  10*day(tuadata)\10 e la ricomponi ottieni la stessa cosa...
Ora siccome i gg sono 31 devi decidere come gestore il 31°... immagino nel gruppo 3...
 
A questo punto servirebbe una funzione un pochetto più studiata... ma prima prova a comprendere la logica.
 
Per la questione del raggruppamento sicuramente ti ho deviato io dicendo query raggruppate... errata indicazione... la query serve per generare il Campo calcolato... poi il report raggruppa per quel campo calcolato.
 
Se ti crei una funzione PUBLIC la puoi richiamare così...
 
Public Function GeneraDecade(mDate as date) As Date
....
End Function
 
Select *, GeneraDecade(TuaData) as Decade
From T1
 
Poi generi il report...
 
@Alex

La funzione a questo punto è banale...
 
Public Function GeneraDecade(mDate as Date) ad date
 
Dim mDay ad Integer
 
mDay=Day(mDate)
Select case mah
  Case <10:  mDay=1
  Case <20:  mDay=2
  Case else: mDay=3
End Select
 
GeneraDecade= Dateserial(mDay,mont(mDate),year(mDate)
End Function
 
Questa funzione restituisce sempre 1/2/3 del mese in considerazione... uso la data per non creare problemi con gli altri mesi.
 
A questo punto usa la per generare il Campo calcolato e poi crei il Report raggruppando per questo campo.
Chiaramente nel report poi nel gruppo specifico userai 1 controllo per visualizzare la decade e non la data che non serve a nessuno, estrapolando day/month per rappresentare un testo indicativo.
 
Spero di aver chiarito tutto.
@Alex


grazie mille sta sera lo provo

Il giorno sabato 21 settembre 2019 19:41:39 UTC+2, @Alex ha scritto:

ciao
ottengo questo strano risultato
https://ibb.co/0ZYNP39
 
https://ibb.co/9H5NN6r
 
 
ecco il codice che ho copiato da te
 
Public Function generaDecade(DataPassata As Date) As Date
 
Dim mDay As Integer
 
mDay = Day(DataPassata)
Select Case mDay
  Case Is < 10: mDay = 1
  Case Is < 20: mDay = 2
  Case Else: mDay = 3
  End Select
 
generaDecade = DateSerial(mDay, Month(DataPassata), Year(DataPassata))
End Function

Il giorno sabato 21 settembre 2019 19:41:39 UTC+2, @Alex ha scritto:

ciao,
ho modificato il tuo codice leggermente e funziona. 
Public Function DS(DataPassata As Date) As Long
'************* CODICE DI ALEX
Dim mDay As Integer
 
mDay = Day(DataPassata)
Select Case mDay
  Case Is < 10: DS = 1
  Case Is < 20: DS = 2
  Case Else: DS = 3
  End Select
 
grazie
 
Visto però che sei un grande valutatore di codice ti accodo la maniera
tortuosa e poco elegante, ma pur sempre un risultato, che avevo scovato 
in alternativa
Dim dataInizio1 As Date ' inizio prima decina del mese
Dim dataFine1  As Date  ' fine prima decina del mese
Dim dataInizio2 As Date ' inizio seconda decina del mese
Dim dataFine2  As Date  ' fine seconda decina del mese
Dim dataInizio3 As Date ' inizio terza decina del mese
Dim dataFine3  As Date  ' fine terza decina del mese
Dim strmese As String
Dim strAnno As String
Dim ultimoGiorno As String 'ultimo giorno del mese
 
strmese = Month(DataPassata) & "/"
strAnno = Year(DataPassata)
ultimoGiorno = DateSerial(Year(DataPassata), Month(DataPassata) + 1, 0)
 
ultimoGiorno = Day(ultimoGiorno)
 
dataInizio1 = "1/" & strmese & strAnno
dataFine1 = "10/" & strmese & strAnno
 
dataInizio2 = "11/" & strmese & strAnno
dataFine2 = "20/" & strmese & strAnno
 
dataInizio3 = "21/" & strmese & strAnno
dataFine3 = strmese & ultimoGiorno & "/" & strAnno
 
If DataPassata >= dataInizio1 And DataPassata <= dataFine1 Then
DS = 1
End If
 
If DataPassata >= dataInizio2 And DataPassata <= dataFine2 Then
DS = 2
 
If DataPassata >= dataInizio3 And DataPassata <= dataFine3 Then
DS = 3
End If
 
End If

Fai attenzione che come l'hai modificata ri ritrovi assieme tutte le decine dei mesi... in quanto DS di gennaio non viene differenziato da DS di Marzo... Aprile ecc.
Era il motivo per cui nel mio codice avevo ricostruito la data.
 
Se però a te così va bene forse mi manca qualche altro elemento.
 
Ciao
@Alex


Si si, quello che ti manca è che gli ordini (alimentari, ist. alberghiero Abano) li facciamo una volta al mese e mai diversamente,  percui a me basta che funzioni su base mensile
grazie per il tuo aiuto, alla prossima