Hi,
I have an SQL based query which returns Actuals and Planned work from Project Server; however a number of records (generally generic resources based on the ResourceIsGeneric column) are excluded. I believe this is because my Actuals query does not return
generic resources as we are joining both sides of the query on ResourceUID. I have included a snippet below - is there a way to join Actuals and Planned work so I can return all Resource data?
Thanks
SELECT tl.ResourceUID
,tl.ProjectUID
,tl.ResourceName AS [ResourceName]
,CASE
WHEN tl.ProjectName = 'Administrative'
THEN tl.TaskName
ELSE tl.ProjectName
END ProjectName
,ruv.RBS AS [RBS]
,Sum(ta.ActualWorkBillable) ActualWorkBillable
,Sum(ta.ActualWorkNonBillable) ActualWorkNonBillable
,Sum(ta.ActualOvertimeWorkBillable) ActualOvertimeWorkBillable
,Sum(ta.ActualOvertimeWorkNonBillable) ActualOvertimeWorkNonBillable
,CASE
WHEN Sum(ta.ActualOvertimeWorkBillable) > 0
THEN Sum(ta.ActualOvertimeWorkBillable)
END [HOURS]
,DATEPART(year, ta.TimeByDay) AS [Year]
,DATEPART(month, ta.TimeByDay) AS [Month]
,DATENAME(month, DATEADD(month, DATEPART(month, ta.TimeByDay), - 1)) AS [MonthName]
,puv.[Project Status] AS [ProjectStatus]
,ruv.[Primary Role] AS [PrimaryRole]
,ruv.[Resource Department] AS [Department]
,ruv.ResourceIsGeneric
,ruv.[Cost Category] AS [ResourceType]
,puv.[SAP Project Code] AS [SAPProjectCode]
,CASE
WHEN tl.ProjectName <> 'Administrative'
THEN NULL
ELSE tl.TaskName
END TaskName
,puv.[Project Plan Type] AS [ProjectPlanType]
,puv.[GEM Project Manager] AS [GemPM]
,ruv.[Rate Code] AS [RateCode]
,ruv.[Cost Centre] AS [CostCentre]
,ept.EnterpriseProjectTypeName AS [EPT]
,puv.[I DO Phase]
,puv.ProjectOwnerName AS [ProjectOwner]
FROM dbo.MSP_TimesheetActual_OlapView ta
INNER JOIN dbo.MSP_TimesheetLine_UserView tl
ON ta.TimesheetLineUID = tl.TimesheetLineUID
INNER JOIN dbo.MSP_EpmResource_UserView ruv
ON ruv.ResourceUID = tl.ResourceUID
LEFT JOIN dbo.MSP_EpmProject_UserView puv
ON puv.ProjectUID = tl.ProjectUID
LEFT JOIN dbo.MSP_EpmEnterpriseProjectType ept
ON ept.EnterpriseProjectTypeUID = puv.EnterpriseProjectTypeUID
WHERE ta.TimeByDay >= @xDate1
AND ta.TimeByDay < @xDate2
AND tl.TimesheetStatus IN (
SELECT ParamValues
FROM @ParamTable
)
AND ta.ActualWorkBillable > 0
GROUP BY ...
) TimesheetActual
FULL JOIN (
SELECT ruv.ResourceUID
,puv.ProjectUID
,ruv.ResourceName
,puv.projectname AS ProjectName
,ruv.RBS AS [RBS]
,Sum(abduv.AssignmentWork) AS [PlannedWork]
,DATEPART(year, abduv.TimeByDay) AS [Year]
,DATEPART(month, abduv.TimeByDay) AS [Month]
,DATENAME(month, DATEADD(month, DATEPART(month, abduv.TimeByDay), - 1)) AS [MonthName]
,ruv.ResourceIsGeneric
,puv.[Project Status] AS [ProjectStatus]
FROM dbo.MSP_EpmResource_UserView ruv
INNER JOIN dbo.MSP_EpmAssignment_UserView auv
INNER JOIN dbo.MSP_EpmAssignmentByDay_UserView abduv
ON auv.AssignmentUID = abduv.AssignmentUID
AND auv.ProjectUID = abduv.ProjectUID
ON ruv.ResourceUID = auv.ResourceUID INNER JOIN dbo.MSP_EpmProject_UserView puv
ON auv.ProjectUID = puv.ProjectUID
AND abduv.ProjectUID = puv.ProjectUID INNER JOIN dbo.MSP_TimeByDay_OlapView tbdov
ON abduv.TimeByDay = tbdov.TimeByDay WHERE abduv.TimeByDay >= @xDate1
AND abduv.TimeByDay < @xDate2
AND ruv.ResourceName <> 'Unassigned Resource'
AND ruv.ResourceName IS NOT NULL
AND abduv.AssignmentWork > 0
GROUP BY ruv.ResourceUID
,puv.ProjectUID
,ruv.ResourceName
,puv.projectname
,ruv.RBS
,DATEPART(year, abduv.TimeByDay)
,DATEPART(month, abduv.TimeByDay)
,ruv.ResourceIsGeneric
,puv.[Project Status]
) TimesheetPlanned
ON TimesheetActual.ResourceUID = TimesheetPlanned.ResourceUID
AND TimesheetActual.[Year] = TimesheetPlanned.[Year]
AND TimesheetActual.[MonthName] = TimesheetPlanned.[MonthName]