Differenza in giorni tra date non successive L’argomento è risolto

Non è propriamente un programma di BI, ma nelle sue versioni più recenti anche Excel può fare grandi cose!

Moderatore: Utilizzo_prof_Excel

Rispondi

Gennaro_64
Messaggi: 107 | Topic creati
Iscritto il: dom 11 apr 2021, 12:47
Ringraziato: 5 volte

Differenza in giorni tra date non successive

Messaggio da Gennaro_64 »

Buon giorno,

Mi trovo di fronte ad un estratto conto bancario dove i vari movimenti nel tempo danno luogo a dei saldi progressivi che restano invariati (in giacenza) per un determinato numero di giorni, fino al successivo movimento.

Il numero dei giorni di giacenza è la differenza tra le due date dei movimenti.

Avrei bisogno di calcolare questa differenza, ma non posso utilizzare la funzione "DATEADD(<dates>,<number_of_intervals>,<interval>)" perché non dispongo di un numero definito di intervalli tra una data e l'altra.

Nell'immagine di seguito a titolo di esempio, il saldo progressivo di 627 euro resta invariato (in giacenza) dal 02 al 07 Luglio, quindi un intervallo (13 gg) non definito, variabile (infatti il successivo è di 42 giorni).

Immagine

Quale funzione potrei utilizzare per calcolare questo intervallo temporale variabile?
Allego il file per ogni valutazione.
Grazie
g
Allegati
Differenza_Date_Progressive.xlsx
(599.25 KiB) Scaricato 20 volte


Avatar utente

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

Differenza in giorni tra date non successive

Messaggio da Andrea90 »

Gennaro_64,

Sinceramente non ne capisco la logica del perché tu ponga il risultato 13 sulla riga del 2 luglio, per me i 13 giorni sono sulla riga del 15/07, mentre quella del 02/07 deve rimanere vuota poiché non ci sono movimenti antecedenti.

Comunque una bozza di calcolo:

Codice: Seleziona tutto

=
VAR CurDate =
    MAX ( Movimenti[Data] )
VAR TempTab =
    CALCULATETABLE (
        FILTER ( ALL ( Movimenti[Data] ); Movimenti[Data] < CurDate );
        KEEPFILTERS ( Calendario[Anno] )
    )
VAR MaxDatePrev =
    CALCULATE ( MAXX ( TempTab; Movimenti[Data] ) )
VAR TableCount =
    COUNTROWS (
        FILTER (
            ALL ( Calendario[Data] );
            Calendario[Data]
                >= DATE ( YEAR ( MaxDatePrev ); MONTH ( MaxDatePrev ); DAY ( MaxDatePrev ) )
                && Calendario[Data] < DATE ( YEAR ( CurDate ); MONTH ( CurDate ); DAY ( CurDate ) )
        )
    )
VAR Result =
    IF ( ISBLANK ( MaxDatePrev ); BLANK (); TableCount )
RETURN
    Result
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
Gennaro_64
Messaggi: 107 | Topic creati
Iscritto il: dom 11 apr 2021, 12:47
Ringraziato: 5 volte

Differenza in giorni tra date non successive

Messaggio da Gennaro_64 »

Ciao Andrea90
Inutile dire che funziona perfettamente.
In uno dei topic che leggevo nel forum, un utente esordiva "... ho letto che con il DAX si fanno miracoli ...". Aveva ragione. Ed anche questa tua misura appena creata .. fa miracoli.
Hai aggiunto abbastanza funzioni nuove per me che ne avrò da studiare e cercare di capire.
Un grande grazie con tanta stima..

Mi chiedevi perché ho posizionato il risultato dell'esempio sulla riga del 2 luglio.
Bene. Per quanto il risultato della misura è dato dalla differenza delle due date e quindi, correttamente, tu lo hai collocato sulla riga successiva del 15 luglio, in realtà, nei contesti bancari, quel risultato diventa un fattore della moltiplicazione per il saldo disponibile e in giacenza dal 2 luglio.

In altre parole, la nuova misura che andrò a creare per il calcolo degli interessi ad esempio, moltiplicherà il saldo progressivo (YTD) presente sulla riga del 2 luglio per il periodo (risultato della tua misura), presente sulla riga successiva, per il tasso di interesse diviso 365.
E questo risultato è bene che stia nella riga del 2 luglio.
Spero di avere chiarito.

PS: Mi studio la formula e poi passo alle domande ... :) di nuovo grazie

gennaro
Avatar utente

Enrico Galli
Messaggi: 890 | Topic creati
Iscritto il: dom 28 giu 2020, 19:03
Luogo: San Giovanni in Persiceto (BO)
Ringraziato: 325 volte
Contatta:

Differenza in giorni tra date non successive

Messaggio da Enrico Galli »

Ciao a tutti, come sempre io arrivo dopo che Andrea90 ha già fatto il lavoro di fatica :lol:
Mi piace comunque proporre un'alternativa, magari anche peggiore, tanto per confrontarsi:

Codice: Seleziona tutto

=
VAR CurDate =
    MAX ( Movimenti[Data] )
VAR TempTab =
    CALCULATETABLE ( ALLSELECTED ( Movimenti[Data] ); Movimenti[Data] < CurDate )
VAR MaxDatePrev =
    MAXX ( TempTab; Movimenti[Data] )
VAR DaysCount = INT ( CurDate - MaxDatePrev )
VAR Result =
    IF ( ISBLANK ( MaxDatePrev ); BLANK (); DaysCount )
RETURN
    Result
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

Autore del topic
Gennaro_64
Messaggi: 107 | Topic creati
Iscritto il: dom 11 apr 2021, 12:47
Ringraziato: 5 volte

Differenza in giorni tra date non successive

Messaggio da Gennaro_64 »

Andrea90 e Enrico Galli ,
Grazie ad entrambi per la ricchezza di informazioni.
Ovviamente non è stato facile per me: ho studiato a fondo la risposta di Andrea90 e l'ho capita (quindi oggi la tua Enrico Galli , mi viene facile leggerla e capirla ... :) :) ).

Damande:

1) Come possiamo "spostare" il tutto con partenza dalla riga 02/07/2019?
Perché, in questo caso pratico, è quel saldo progressivo che resta invariato per il numero dei giorni calcolati con le vostre preziose misure e non quello che verrebbe rappresentato nella riga 15/07/2019.
Anche perché io ho bisogno di moltiplicare quel saldo progressivo (presente sulla riga 02/07/2019) con il numero dei giorni (presente sulla riga del 15/07/2019).

2) Andrea90 , tu hai utilizzato la funzione KEEPFILTERS ( Calendario[Anno] )
Al fine di migliorare la conoscenza del DAX, qual'è stato il tuo ragionamento nel voler filtrare/fissare l'anno della Calendar?

Immagine

Ciao e di nuovo grazie ad entrambi.

gennaro
Avatar utente

Enrico Galli
Messaggi: 890 | Topic creati
Iscritto il: dom 28 giu 2020, 19:03
Luogo: San Giovanni in Persiceto (BO)
Ringraziato: 325 volte
Contatta:

Differenza in giorni tra date non successive

Messaggio da Enrico Galli »

Per la versione "giorni fino al prossimo movimento" prova così:

Codice: Seleziona tutto

=
VAR CurDate =
    MAX ( Movimenti[Data] )
VAR TempTab =
    CALCULATETABLE ( ALLSELECTED ( Movimenti[Data] ); Movimenti[Data] > CurDate )
VAR MinDataSucc =
    MINX ( TempTab; Movimenti[Data] )
VAR DaysCount = INT(MinDataSucc - CurDate)
VAR Result =
    IF ( ISBLANK ( CurDate ); BLANK (); DaysCount )
RETURN
    Result
Per quanto riguarda KEEPFILTERS, è un modificatore di CALCULATE che fa in modo da non sovrascrivere i filtri del contesto con quelli di CALCULATE, ma li "unisce". In questo caso, ALL ( Movimenti[DATA] ) toglierebbe tutti i filtri da quella colonna, ma con il modificatore impostato sulla colonna Anno di calendario fai sì che il filtro (esterno, nel tuo caso) sull'anno sia ancora preso in considerazione
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

Autore del topic
Gennaro_64
Messaggi: 107 | Topic creati
Iscritto il: dom 11 apr 2021, 12:47
Ringraziato: 5 volte

Differenza in giorni tra date non successive

Messaggio da Gennaro_64 »

grazie Enrico Galli
Funziona perfettamente
Rispondi