Pagina 1 di 1

Differenza in giorni tra date non successive

Inviato: dom 10 lug 2022, 10:04
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

Differenza in giorni tra date non successive

Inviato: dom 10 lug 2022, 10:35
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

Differenza in giorni tra date non successive

Inviato: dom 10 lug 2022, 10:58
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

Differenza in giorni tra date non successive

Inviato: lun 11 lug 2022, 16:43
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

Differenza in giorni tra date non successive

Inviato: lun 11 lug 2022, 17:17
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

Differenza in giorni tra date non successive

Inviato: lun 11 lug 2022, 18:25
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

Differenza in giorni tra date non successive

Inviato: lun 11 lug 2022, 19:06
da Gennaro_64
grazie Enrico Galli
Funziona perfettamente