Forum Discussion

WorkHard_'s avatar
WorkHard_
Frequent Visitor
2 years ago
Solved

Concatenate multiple rows with same ID that intersect the same period

I have a Project table with multiple tasks under the same project.

I have an Employee table with assignments per project.

 

How do I concatenate all employees that intersect the period of the start and end dates of each row in the Project Table?


Employee table:

Employee ScheduledStart DateEnd DateProject ID
John Doe4/3/20244/8/2024100
Victor Krum4/17/20244/25/2024100
John Sena3/20/20244/1/2024100
John Doe4/1/20244/12/2024101


Project table:

Project IDTask Start DateTask End DateExpected Result
1004/1/20245/1/2024John Doe
Viktor Krum
John Sena
1004/15/20245/1/2024Viktor Krum
1014/12/20245/1/2024John Doe
  • WorkHard_,

     

    Try this calculated column in the Project table. It requires a date table 'Date'. No relationships exist among the three tables.

     

    Employees = 
    VAR vProjectID = Project[Project ID]
    VAR vTaskDates =
        DATESBETWEEN ( 'Date'[Date], Project[Task Start Date], Project[Task End Date] )
    VAR vEmployeeTable =
        FILTER (
            Employee,
            VAR vEmployeeDates =
                DATESBETWEEN ( 'Date'[Date], Employee[Start Date], Employee[End Date] )
            RETURN
                Employee[Project ID] = vProjectID
                    // at least one day in each date range must overlap
                    && NOT ISEMPTY ( INTERSECT ( vTaskDates, vEmployeeDates ) )
        )
    VAR vResult =
        CONCATENATEX ( vEmployeeTable, Employee[Employee Scheduled] & UNICHAR ( 10 ) )
    RETURN
        vResult

     

     

  • Hi,

    This calculated column formula works

    Column = CALCULATE(CONCATENATEX(VALUES(Employee[Employee Scheduled]),Employee[Employee Scheduled],", "),FILTER(Employee,Employee[Start Date]<=EARLIER(Project[Task End Date])&&Employee[End Date]>=EARLIER(Project[Task Start Date])&&Employee[Project ID]=EARLIER(Project[Project ID])))

    Hope this helps.

     

2 Replies

  • WorkHard_,

     

    Try this calculated column in the Project table. It requires a date table 'Date'. No relationships exist among the three tables.

     

    Employees = 
    VAR vProjectID = Project[Project ID]
    VAR vTaskDates =
        DATESBETWEEN ( 'Date'[Date], Project[Task Start Date], Project[Task End Date] )
    VAR vEmployeeTable =
        FILTER (
            Employee,
            VAR vEmployeeDates =
                DATESBETWEEN ( 'Date'[Date], Employee[Start Date], Employee[End Date] )
            RETURN
                Employee[Project ID] = vProjectID
                    // at least one day in each date range must overlap
                    && NOT ISEMPTY ( INTERSECT ( vTaskDates, vEmployeeDates ) )
        )
    VAR vResult =
        CONCATENATEX ( vEmployeeTable, Employee[Employee Scheduled] & UNICHAR ( 10 ) )
    RETURN
        vResult

     

     

  • Hi,

    This calculated column formula works

    Column = CALCULATE(CONCATENATEX(VALUES(Employee[Employee Scheduled]),Employee[Employee Scheduled],", "),FILTER(Employee,Employee[Start Date]<=EARLIER(Project[Task End Date])&&Employee[End Date]>=EARLIER(Project[Task Start Date])&&Employee[Project ID]=EARLIER(Project[Project ID])))

    Hope this helps.