我有一个资源规划查询,它应该显示当前年度每个会计月的每个资源的实际工作,剩余工时和总工作量。
但是,所有这些行都有剩余工作 - 即当前月或未来月,但不一个过去月 - 显示出太高的工作价值。
即。对于2016年1月,所有值(剩余,实际和总工作)都是正确的。 2016年2月至12月,没有一个值是正确的。
太高的值不会乘以相同的因子,并且没有为所有错误值添加常数。 这就是为什么我怀疑可能存在一些扇出问题(某些列乘以另一个列或一个项目出现的次数)由多个连接引起。
我想知道这是否是语法问题或者我是否在查询错误的字段。如果你能告诉我,如果我的查询中有什么东西导致汇总汇总有问题,那么如果你能让我知道那就太好了。)
还有可能需要注意的重要信息:
工作是从项目,作业和任务聚合而来的,因为查询旨在显示此级别的详细信息。但是,我已将其从SELECT和GROUP中删除,以便将查询缩小一点,以便找到错误。
最初,工作是按时间而非财政时间记录的。因此,查询中有一部分将工作时间框架连接到一个表,该表包含正常日历和财务日历。 在查询的那一点,我遇到了'扇出'的问题,这就是为什么我将单独的SELECT语句放在LEFT JOIN中。然而,在那时,所有价值(而不仅仅是现在/未来的价值)都显着过高。 子SELECT语句修复了这个问题,但仍然存在错误的值......
SELECT
MSP_EpmResource_UserView.ResourceName,
totals.[FiscalMemberKeyPeriod] AS FiscalMonth,
SUM(MSP_EpmAssignmentByDay_UserView.AssignmentWork) AS Work,
SUM(MSP_EpmAssignmentByDay_UserView.AssignmentActualWork) AS ActualWork,
SUM(MSP_EpmAssignmentByDay_UserView.AssignmentRemainingWork) AS RemainingWork
FROM MSP_EpmResource_UserView
INNER JOIN ((MSP_EpmTask_UserView
INNER JOIN MSP_EpmProject_UserView
ON MSP_EpmTask_UserView.ProjectUID = MSP_EpmProject_UserView.ProjectUID)
INNER JOIN MSP_EpmAssignment ON MSP_EpmTask_UserView.ProjectUID = MSP_EpmAssignment.ProjectUID
AND MSP_EpmTask_UserView.TaskUID = MSP_EpmAssignment.TaskUID)
ON MSP_EpmResource_UserView.ResourceUID = MSP_EpmAssignment.ResourceUID
INNER JOIN MSP_EpmAssignmentByDay_UserView
ON MSP_EpmAssignment.AssignmentUID = MSP_EpmAssignmentByDay_UserView.AssignmentUID
LEFT JOIN (SELECT MSP_TimeByDay_OlapView.CalendarMemberKeyMonth, MSP_TimeByDay_OlapView.FiscalMemberKeyPeriod, MSP_TimeByDay_OlapView.CalendarMemberKeyYear
FROM MSP_TimeByDay_OlapView
GROUP BY CalendarMemberKeyMonth, FiscalMemberKeyPeriod, CalendarMemberKeyYear)
AS totals
ON MONTH (MSP_EpmAssignmentByDay_UserView.TimeByDay) = totals.CalendarMemberKeyMonth
WHERE (MSP_EpmAssignmentByDay_UserView.TimeByDay BETWEEN '2016-01-01' AND '2016-12-31')
AND totals.CalendarMemberKeyYear='2016'
GROUP BY
MSP_EpmResource_UserView.ResourceName,
totals.[FiscalMemberKeyPeriod]
ORDER BY
MSP_EpmResource_UserView.ResourceName