none
В кубе не работает связь корпоративного поля с расписанием RRS feed

  • Вопрос

  • Добрый день!

    Имеем MS Project Server 2010.


    Учет трудозатрат ведем через расписания. Нужно, с помощью куба сделать отчет: сколько фактических трудозатрат списано на контракт.

    Создали корпоративное поле "Контракт" для задачи, данные берутся из таблицы подстановки. Таблица подстановки имеет два уровня иерархии.
    В планах проектов для задач заполнили поле "Контракт".
    В представление "Мое расписание" добавили столбец "Контракт"
    Сотрудники отчитываются о фактических трудозатратах через расписание, руководители ресурсов расписание утвердили.


    В кубе "Задача" добавили измерение "Контракт_задача"
    Открыли подключение к кубам "РасписаниеПроектаOLAP". В подключении отсутствует поле "Контракт".

    Дополнительно в куб "Назначение" добавили поле "Контракт_Задача"
    Открыли подключение к кубам "РасписаниеПроектаOLAP". В подключении есть поле "Контракт". НО, когда выводим отчет с полями: Контракт и Фактические оплачиваемые трудозатраты, то для каждого контракта выводится общая сумма трудозатрат, списанная на все контракты.

    Пример неправильного отчета (на каждый контракт одинаковая сумма, хотя на самом деле это не так): 



    Подскажите пожалуйста, что я делаю не так и как правильно сделать настройки, чтобы увидеть сколько трудозатрат списал исполнитель на контракт?



        
    • Изменено Slava Shamak 1 апреля 2013 г. 7:14
    1 апреля 2013 г. 7:09

Ответы

  • Т.к. куб в 2010ом Проджекте не работает с кастомными полями, то сделал запрос к базе, для получения необходимых данных.

    SQL-запрос: выборка подробных данных о фактических трудозатратах сотрудников из расписаний. Плюс, подтягиваем кастомные поля. 

    ------------------------------------------------- 
    use SLSHP2010_ProjectServer_Reporting 

    select 
    Projects.ProjectName as Проект,
    IsNull(task.TaskName, ADMtask.TaskName) as Задача, 
    dt.TimeYear as Год, 
    dt.TimeQuarter as Квартал, 
    dt.TimeMonthOfTheYear as Месяц, 
    dt.TimeWeekOfTheYear as Неделя, 
    dt.TimeDayOfTheMonth as День, 
    convert(date, Per.StartDate, 101) as [Дата начала недели], 
    convert(date, Per.EndDate, 101) as [Дата окончания недели], 
    TSLine.Comment as [Что сделано за неделю], 
    IsNull(CFValue1.MemberValue, ISNULL(CFValue2.MemberValue, '-')) as Контракт,
    case when CFValue1.MemberValue is null then '-' else CFValue2.MemberValue end as [Доп_соглашение], 
    Resources2.ResourceName as Сотрудник, 
    Resources2.ResourceGroup as Отдел, 
    replace(convert(varchar,tz.ActualWorkBillable),'.',',') as [Фактические трудозатраты] -- заменяем . на , т.к. при copy&past в Excel он не понимает разделитель - "," 
    ,TSStatus.Description as [Статус расписания] 
    ,Boss.ResourceName as Руководитель 
    ,case when CFValue2.MemberValue is null then 'Административная' else 'Производственная' end as [Тип задачи] 
    ,case when Proizvod.Capacity = 0 then tz.ActualWorkBillable else tz.ActualWorkBillable/Proizvod.Capacity end as Утилизация 

    from dbo.MSP_TimesheetLine as TSLine 
    left outer join dbo.MSP_Timesheet as TS on TS.TimesheetUID = TSLine.TimesheetUID 
    left outer join dbo.MSP_TimesheetPeriod as Per on Per.PeriodUID = TS.PeriodUID 
    left outer join dbo.MSP_TimesheetStatus as TSStatus on TSStatus.TimesheetStatusID = TS.TimesheetStatusID
    left outer join [MSP_TimesheetActual] as tz on tz.TimesheetLineUID = TSLine.TimesheetLineUID 
    left outer join dbo.MSP_TimeByDay as dt on dt.TimeByDay = tz.TimeByDay 
    left outer join dbo.MSP_TimesheetTask as ADMtask on ADMtask.TaskNameUID = TSLine.TaskNameUID 
    left outer join dbo.MSP_EpmAssignment as assignment on (assignment.AssignmentUID = TSLine.AssignmentUID or assignment.TaskUID = ADMtask.TaskUID) 
    left outer join dbo.MSP_EpmTask as task on task.TaskUID = assignment.TaskUID
    left outer join dbo.MSP_TimesheetResource as ADMResources on ADMResources.ResourceNameUID = TS.OwnerResourceNameUID -- 
    left outer join dbo.MSP_EpmResource as Resources2 on ADMResources.ResourceUID = Resources2.ResourceUID --left outer join dbo.MSP_EpmResource as Resources2 on assignment.ResourceUID = Resources2.ResourceUID 
    left outer join dbo.MSP_EpmResource as Boss on Resources2.ResourceTimesheetManagerUID = Boss.ResourceUID 
    left outer join dbo.MSP_TimesheetProject Projects on Projects.ProjectNameUID = TSLine.ProjectNameUID 
    left outer join dbo.MSP_EpmCPTaskUid0 as con on con.EntityUID = task.TaskUID 
    left outer join [dbo].[MSP_EpmLookupTable] as CFValue2 on CFValue2.MemberUID = con.CFVal2 --Номер столбца, содержащего значение поля Объект затрат определяется только опытным путем. На тестовом сервере это столбец №1 CFVal1 
    left outer join [dbo].[MSP_EpmLookupTable] as CFValue1 on CFValue1.MemberUID = CFValue2.ParentMemberUID 
    left outer join dbo.MSP_EpmResourceByDay as Proizvod on (Proizvod.ResourceUID = ADMResources.ResourceUID and Proizvod.TimeByDay = tz.TimeByDay) 
    where --Projects.ProjectName = 'Административный' and 
    tz.ActualWorkBillable > 0 
    and Resources2.ResourceGroup like '%143%' -- Только департамент 1430 и подчиненные отделы 
    order by ProjectName, task.TaskName, Resources2.ResourceName

    -----------------

    После переноса или восстановления базы проджект может поменять имена полей, в которых хранятся кастомные справочники. Чтобы восстановить запрос нужно изменить имя поля "CFVal2", поставив ему другой порядковый номер (CFVal1 или CFVal3 и т.д.). 

    • Помечено в качестве ответа Slava Shamak 15 апреля 2013 г. 11:43
    15 апреля 2013 г. 11:43

Все ответы

  • OLAP кубы в данном случае не показывают связь данных полей.

    Вам нужен или Reporting Services или PowerPivot

    • Предложено в качестве ответа Oleksiy Prosnitskyy 15 апреля 2013 г. 7:40
    15 апреля 2013 г. 7:39
  • Т.к. куб в 2010ом Проджекте не работает с кастомными полями, то сделал запрос к базе, для получения необходимых данных.

    SQL-запрос: выборка подробных данных о фактических трудозатратах сотрудников из расписаний. Плюс, подтягиваем кастомные поля. 

    ------------------------------------------------- 
    use SLSHP2010_ProjectServer_Reporting 

    select 
    Projects.ProjectName as Проект,
    IsNull(task.TaskName, ADMtask.TaskName) as Задача, 
    dt.TimeYear as Год, 
    dt.TimeQuarter as Квартал, 
    dt.TimeMonthOfTheYear as Месяц, 
    dt.TimeWeekOfTheYear as Неделя, 
    dt.TimeDayOfTheMonth as День, 
    convert(date, Per.StartDate, 101) as [Дата начала недели], 
    convert(date, Per.EndDate, 101) as [Дата окончания недели], 
    TSLine.Comment as [Что сделано за неделю], 
    IsNull(CFValue1.MemberValue, ISNULL(CFValue2.MemberValue, '-')) as Контракт,
    case when CFValue1.MemberValue is null then '-' else CFValue2.MemberValue end as [Доп_соглашение], 
    Resources2.ResourceName as Сотрудник, 
    Resources2.ResourceGroup as Отдел, 
    replace(convert(varchar,tz.ActualWorkBillable),'.',',') as [Фактические трудозатраты] -- заменяем . на , т.к. при copy&past в Excel он не понимает разделитель - "," 
    ,TSStatus.Description as [Статус расписания] 
    ,Boss.ResourceName as Руководитель 
    ,case when CFValue2.MemberValue is null then 'Административная' else 'Производственная' end as [Тип задачи] 
    ,case when Proizvod.Capacity = 0 then tz.ActualWorkBillable else tz.ActualWorkBillable/Proizvod.Capacity end as Утилизация 

    from dbo.MSP_TimesheetLine as TSLine 
    left outer join dbo.MSP_Timesheet as TS on TS.TimesheetUID = TSLine.TimesheetUID 
    left outer join dbo.MSP_TimesheetPeriod as Per on Per.PeriodUID = TS.PeriodUID 
    left outer join dbo.MSP_TimesheetStatus as TSStatus on TSStatus.TimesheetStatusID = TS.TimesheetStatusID
    left outer join [MSP_TimesheetActual] as tz on tz.TimesheetLineUID = TSLine.TimesheetLineUID 
    left outer join dbo.MSP_TimeByDay as dt on dt.TimeByDay = tz.TimeByDay 
    left outer join dbo.MSP_TimesheetTask as ADMtask on ADMtask.TaskNameUID = TSLine.TaskNameUID 
    left outer join dbo.MSP_EpmAssignment as assignment on (assignment.AssignmentUID = TSLine.AssignmentUID or assignment.TaskUID = ADMtask.TaskUID) 
    left outer join dbo.MSP_EpmTask as task on task.TaskUID = assignment.TaskUID
    left outer join dbo.MSP_TimesheetResource as ADMResources on ADMResources.ResourceNameUID = TS.OwnerResourceNameUID -- 
    left outer join dbo.MSP_EpmResource as Resources2 on ADMResources.ResourceUID = Resources2.ResourceUID --left outer join dbo.MSP_EpmResource as Resources2 on assignment.ResourceUID = Resources2.ResourceUID 
    left outer join dbo.MSP_EpmResource as Boss on Resources2.ResourceTimesheetManagerUID = Boss.ResourceUID 
    left outer join dbo.MSP_TimesheetProject Projects on Projects.ProjectNameUID = TSLine.ProjectNameUID 
    left outer join dbo.MSP_EpmCPTaskUid0 as con on con.EntityUID = task.TaskUID 
    left outer join [dbo].[MSP_EpmLookupTable] as CFValue2 on CFValue2.MemberUID = con.CFVal2 --Номер столбца, содержащего значение поля Объект затрат определяется только опытным путем. На тестовом сервере это столбец №1 CFVal1 
    left outer join [dbo].[MSP_EpmLookupTable] as CFValue1 on CFValue1.MemberUID = CFValue2.ParentMemberUID 
    left outer join dbo.MSP_EpmResourceByDay as Proizvod on (Proizvod.ResourceUID = ADMResources.ResourceUID and Proizvod.TimeByDay = tz.TimeByDay) 
    where --Projects.ProjectName = 'Административный' and 
    tz.ActualWorkBillable > 0 
    and Resources2.ResourceGroup like '%143%' -- Только департамент 1430 и подчиненные отделы 
    order by ProjectName, task.TaskName, Resources2.ResourceName

    -----------------

    После переноса или восстановления базы проджект может поменять имена полей, в которых хранятся кастомные справочники. Чтобы восстановить запрос нужно изменить имя поля "CFVal2", поставив ему другой порядковый номер (CFVal1 или CFVal3 и т.д.). 

    • Помечено в качестве ответа Slava Shamak 15 апреля 2013 г. 11:43
    15 апреля 2013 г. 11:43