Forum Discussion

BWL's avatar
BWL
Helper II
7 years ago
Solved

Rolling dates

Dear all, I've searched in the community, got some good info and I'm close but still can't get it fixed.  I have the following tables: - Employees  table which contains  the columns: "Employee...
  • BWL's avatar
    7 years ago

    Hi dax ,


    After some real DAX struggles I found a solution, it might be not the perfect DAX, but for now it works.
    I had three tables:

    1. Employee table 1 - N 2, Absence table
    3. Date table

     

    Absence Hours = 
    VAR OutsideWeek =       //time between start week ---> end week (+1 to exclude sunday)
        SUMX (
            FILTER (
                Absence;
                Absence[StartDate]
                    <= FIRSTDATE ( 'Date'[Date] )
                    && Absence[EndDate]
                        >= LASTDATE ( 'Date'[Date]))
            ;
            
                DATEDIFF (
                    (FIRSTDATE( 'Date'[Date] ) + 1);
                    LASTDATE(  'Date'[Date] );
                    DAY
                ) * 8
             
        )
    VAR StartIsOutSideWeek =  // time between start absence ---> end week
        SUMX (
            FILTER (
                Absence;
                Absence[StartDate]
                    > FIRSTDATE ( 'Date'[Date] )
                    && Absence[StartDate]
                        < LASTDATE ( 'Date'[Date] )
                    && Absence[EndDate]
                        >= LASTDATE ( 'Date'[Date] )) ;
                     
            DATEDIFF (
                Absence[StartDate];
                LASTDATE ( 'Date'[Date] );
                DAY
            ) * 8
        )
    
    VAR EndOutsideWeek = // time between start week  ---> end absence (+1 day to exclude sunday)
        SUMX (
            FILTER (
                Absence;
                Absence[StartDate]
                    < FIRSTDATE ( 'Date'[Date] )
                    && Absence[EndDate]
                    > FIRSTDATE( 'Date'[Date] )
                    && Absence[EndDate]
                    < LASTDATE ( 'Date'[Date] ) 
    
            );
            DATEDIFF (
                (FIRSTDATE('Date'[Date])+1);
                Absence[EndDate];
                DAY
            ) * 8
        )
    
    
    VAR InsideWeek =  // time between start absence ---> end absence
        SUMX (
            FILTER (
                Absence;
                Absence[StartDate]
                    >= FIRSTDATE ( 'Date'[Date] )
                    && Absence[EndDate]
                    <= LASTDATE ( 'Date'[Date] )
    
            );
            DATEDIFF (
                Absence[StartDate];
                Absence[EndDate];
                DAY
            ) * 8
        ) 
    
    
    RETURN
       OutsideWeek + StartIsOutSideWeek + EndOutsideWeek + InsideWeek +[Open Absence Hours]
    Open Absence Hours = // calculates the hours for absence with end day blank()
    VAR StartPreviousWeek =  // time between start absence in previous week ---> end week
        SUMX (
            FILTER (
                Absence;
                Absence[StartDate]
                    < LASTDATE ( 'Date'[Date] )
                    && Absence[StartDate]
                        > FIRSTDATE ( 'Date'[Date] )
                    && Absence[EndDate]
                        = BLANK ()
            );
    
            DATEDIFF (
                Absence[StartDate];
                LASTDATE ( 'Date'[Date] );
                DAY
            ) * 8
        )
        
    
    
    VAR StartOutsideWeek =
        SUMX (
            FILTER (
                Absence;
                Absence[StartDate]
                    <= FIRSTDATE ( 'Date'[Date] )
                    && Absence[EndDate]
                        = BLANK ()
            );
    
    DATEDIFF (
                (
                    FIRSTDATE ( 'Date'[Date] ) + 1
                );
                LASTDATE ( 'Date'[Date] );
                DAY
            ) * 8     
            )
    RETURN
        StartOutsideWeek + StartPreviousWeek

     

    For more details, you can check the file here:

    https://www.dropbox.com/s/jte4onfidloiepz/Example.pbix?dl=0

    Thanks,


    Bwl.