I_PPM_ProjectCostForecastData

DDL: I_PPM_PROJECTCOSTFORECASTDATA SQL: IPROCSTFRCDTA Type: view COMPOSITE

Project Cost Forecast: ML Training Input

I_PPM_ProjectCostForecastData is a Composite CDS View that provides data about "Project Cost Forecast: ML Training Input" in SAP S/4HANA. It reads from 6 data sources and exposes 45 fields with key field ProjectInternalID.

Data Sources (6)

SourceAliasJoin Type
P_ProjectCostSum ProjCost left_outer
I_ProjectCostDates ProjDates left_outer
I_PPM_ProjectSummaryTask ProjSumTask from
I_PPM_ProjTeamMembersCntNoSt TeamMemberCnt left_outer
I_PPM_ProjTeamStaffingCntNoSt TeamStaffingCnt left_outer
I_ProjectToWBSElementCount WBSCount left_outer

Annotations (12)

NameValueLevelField
AbapCatalog.sqlViewName IPROCSTFRCDTA view
AbapCatalog.compiler.compareFilter true view
AccessControl.authorizationCheck #CHECK view
AccessControl.personalData.blocking #NOT_REQUIRED view
VDM.viewType #COMPOSITE view
EndUserText.label Project Cost Forecast: ML Training Input view
ClientHandling.type #CLIENT_DEPENDENT view
ClientHandling.algorithm #SESSION_VARIABLE view
ObjectModel.usageType.serviceQuality #D view
ObjectModel.usageType.dataClass #MIXED view
ObjectModel.usageType.sizeCategory #L view
VDM.lifecycle.contract.type #SAP_INTERNAL_API view

Fields (45)

KeyFieldSource TableSource FieldDescription
KEY ProjectInternalID I_PPM_ProjectSummaryTask ProjectInternalID
TargetProjectID
WBSElementInternalID I_PPM_ProjectSummaryTask WBSElementInternalID
WBSDescription
WBSElementObject
Project
ActualAmountInGlobalCurrency
ActualCostAmount
CompanyCode
ControllingArea
ProfitCenter
ProjectProfileCode
Plant
FunctionalArea
CostCenter
ProjectType
ProjectProcessingStatus I_PPM_ProjectSummaryTask ProjectProcessingStatus
PlannedStartDate
PlannedEndDate
PlanCostStartDate
PlannedStartByErlstPlannedCost
PlanCostStartYearMonth
PlanCostStartYearMonth
PlannedCostStartYearMonth
PlanCostEndDate
PlannedEndByLtstPlannedCost
PlanCostEndYearMonth
PlanCostEndYearMonth
PlanCostEndYearMonth
PlannedCostEndYearMonth
ActualCostStartDate
ActualStartByErlstActualCost
ActualCostStartYearMonth
ActualCostStartYearMonth
ActualCostEndYearMonth
ActualCostEndYearMonth
ActualCostEndDate
ActualEndByLtstActualCost
CostingSheet
ResponsibleCostCenter
FactoryCalendar
InvestmentProfile
NumberOfWBSElements
TeamMemberCount
TeamMemberRoleStaffingCount
@AbapCatalog.sqlViewName: 'IPROCSTFRCDTA'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@AccessControl.personalData.blocking: #NOT_REQUIRED
@VDM.viewType: #COMPOSITE
@EndUserText.label: 'Project Cost Forecast: ML Training Input'
@ClientHandling: {
  type:      #CLIENT_DEPENDENT,
  algorithm: #SESSION_VARIABLE
}

@ObjectModel: {
   semanticKey:       [ 'Project' ],
   usageType: {
     serviceQuality:  #D,
     dataClass:       #MIXED,
     sizeCategory:    #L
   }
}
@VDM.lifecycle.contract.type:  #SAP_INTERNAL_API

define view I_PPM_ProjectCostForecastData
  as select from    I_PPM_ProjectSummaryTask      as ProjSumTask
    left outer join P_ProjectCostSum              as ProjCost        on ProjCost.ProjectInternalID = ProjSumTask.ProjectInternalID
    left outer join I_ProjectCostDates            as ProjDates       on ProjDates.ProjectInternalID = ProjCost.ProjectInternalID
    left outer join I_ProjectToWBSElementCount    as WBSCount        on WBSCount.ProjectInternalID = ProjDates.ProjectInternalID
    left outer join I_PPM_ProjTeamMembersCntNoSt  as TeamMemberCnt   on TeamMemberCnt.ProjectSummaryTaskUUID = ProjSumTask.ProjectSummaryTaskUUID
    left outer join I_PPM_ProjTeamStaffingCntNoSt as TeamStaffingCnt on TeamStaffingCnt.ProjectSummaryTaskUUID = ProjSumTask.ProjectSummaryTaskUUID

{

       //  key ProjSumTask.ProjectSummaryTaskUUID,


  //key ProjSumTask.ProjectSummaryTaskUUID,

  key  ProjSumTask.ProjectInternalID,
       '1' as TargetProjectID,
//  ProjCost.ProjectInternalID as TargetProjectID,

       ProjSumTask.WBSElementInternalID,
       ProjSumTask._ProjObjRoot.WBSDescription,
       ProjSumTask._ProjObjRoot.WBSElementObject,
       ProjSumTask._ProjObjRoot._Project.Project,
       --cast (ProjCost.ActualAmountInGlobalCurrency as fis_act_ksl)                 as ActualAmountInGlobalCurrency,
       cast (ProjCost.ActualAmountInGlobalCurrency as fis_act_ksl)                 as ActualCostAmount,
       ProjSumTask._ProjObjRoot.CompanyCode,
       ProjSumTask._ProjObjRoot.ControllingArea,
       ProjSumTask._ProjObjRoot.ProfitCenter,
       ProjSumTask._I_Project.ProjectProfileCode,
       ProjSumTask._ProjObjRoot.Plant,
       ProjSumTask._ProjObjRoot.FunctionalArea,
       ProjSumTask._ProjObjRoot.CostCenter,
       ProjSumTask._ProjObjRoot._ProjectType.ProjectType,
       ProjSumTask.ProjectProcessingStatus, //only needed for Training Filters

       //Actual Start/End not in Project and WBS available.

       ProjSumTask._ProjObjRoot._Project.PlannedStartDate, //Planned Date. Not in WBS available. Retrieved from Project

       ProjSumTask._ProjObjRoot._Project.PlannedEndDate,   //Planned Date. Not in WBS available. Retrieved from Project


       // Duration calculated based on Project Dates

       case
          when ProjSumTask._ProjObjRoot._Project.PlannedStartDate > '19000101'
            and ProjSumTask._ProjObjRoot._Project.PlannedEndDate > '19000101'
       --then cast ((dats_days_between(ProjSumTask._ProjObjRoot._Project.PlannedStartDate, ProjSumTask._ProjObjRoot._Project.PlannedEndDate) + 1) as int8_lew )
       --then cast ((dats_days_between(ProjSumTask._ProjObjRoot._Project.PlannedStartDate, ProjSumTask._ProjObjRoot._Project.PlannedEndDate) + 1) as ps_plfaz )
          then cast ((dats_days_between(ProjSumTask._ProjObjRoot._Project.PlannedStartDate, ProjSumTask._ProjObjRoot._Project.PlannedEndDate) + 1) as numberofdays )
          else 0
       end                                                                         as PlannedDuration,

       // Dates based on Planned Cost

       --ProjDates.PlanCostStartDate,
       @Semantics.businessDate.at: true
       // PAI Workaround: Try explicit data element assignment

       cast ((ProjDates.PlannedStartByErlstPlannedCost) as dpr_tv_planstartdate )  as PlannedStartByErlstPlannedCost,
       --ProjDates.PlanCostStartYearMonth,
       --cast (ProjDates.PlanCostStartYearMonth as vdm_yearmonth ) as PlanCostStartYearMonth,
       // PAI Workaround: Try explicit data element assignment

       cast (ProjDates.PlannedCostStartYearMonth as vdm_yearmonth)                 as PlannedCostStartYearMonth,
       --ProjDates.PlanCostEndDate,
       @Semantics.businessDate.at: true
       // PAI Workaround: Try explicit data element assignment

       cast (ProjDates.PlannedEndByLtstPlannedCost as dpr_tv_planfinishdate )      as PlannedEndByLtstPlannedCost,
       --ProjDates.PlanCostEndYearMonth,
       --cast (ProjDates.PlanCostEndYearMonth as vdm_yearmonth ) as PlanCostEndYearMonth,
       --cast (ProjDates.PlanCostEndYearMonth as num6 ) as PlanCostEndYearMonth,
       // PAI Workaround: Try explicit data element assignment

       cast (ProjDates.PlannedCostEndYearMonth as vdm_yearmonth)                   as PlannedCostEndYearMonth,

       // Duration calculated based on Planned Cost

       case
        when ProjDates.PlannedStartByErlstPlannedCost > '19000101' and  ProjDates.PlannedEndByLtstPlannedCost > '19000101'
       --then dats_days_between(ProjDates.PlanCostStartDate,ProjDates.PlanCostEndDate) + 1
       // PAI Workaround: Try explicit data element assignment

        then cast ((dats_days_between(ProjDates.PlannedStartByErlstPlannedCost,ProjDates.PlannedEndByLtstPlannedCost) + 1) as numberofdays )
        else 0
       end                                                                         as PlannedCostErlstToLtstDurn,

       // Dates based on Actual Cost

       --ProjDates.ActualCostStartDate,
       @Semantics.businessDate.at: true
       // PAI Workaround: Try explicit data element assignment

       cast (ProjDates.ActualStartByErlstActualCost as dpr_tv_actual_start)        as ActualStartByErlstActualCost,
       --ProjDates.ActualCostStartYearMonth,
       // PAI Workaround: Try explicit data element assignment

       cast (ProjDates.ActualCostStartYearMonth as vdm_yearmonth )                 as ActualCostStartYearMonth,
       --ProjDates.ActualCostEndYearMonth,
       // PAI Workaround: Try explicit data element assignment

       cast (ProjDates.ActualCostEndYearMonth as vdm_yearmonth )                   as ActualCostEndYearMonth,
       --ProjDates.ActualCostEndDate,
       @Semantics.businessDate.at: true
       // PAI Workaround: Try explicit data element assignment

       cast (ProjDates.ActualEndByLtstActualCost as dpr_tv_actual_finish  )        as ActualEndByLtstActualCost,

       // Duration calculated based on Actual Cost

       case
        when ProjDates.ActualStartByErlstActualCost > '19000101' and  ProjDates.ActualEndByLtstActualCost > '19000101'
       --then dats_days_between(ProjDates.ActualCostStartDate,ProjDates.ActualCostEndDate) + 1
       // PAI Workaround: Try explicit data element assignment

        then cast ((dats_days_between(ProjDates.ActualStartByErlstActualCost, ProjDates.ActualEndByLtstActualCost) + 1) as numberofdays )
        else 0
       end                                                                         as ActualCostErlstToLtstDurn,
       ProjSumTask._ProjObjRoot.CostingSheet,
       ProjSumTask._ProjObjRoot.ResponsibleCostCenter,
       ProjSumTask._ProjObjRoot.FactoryCalendar,
       ProjSumTask._ProjObjRoot.InvestmentProfile,
       cast( WBSCount.NumberOfWBSElements as int4 )                                as NumberOfWBSElements, //WBSCount.NumberOfWBSElements,

       cast( TeamMemberCnt.TeamMemberCount as int4 )                               as TeamMemberCount, //TeamMemberCnt.TeamMemberCount

       cast( TeamStaffingCnt.TeamMemberRoleStaffingCount as int4 )                 as TeamMemberRoleStaffingCount //TeamStaffingCnt.TeamMemberRoleStaffingCount

 
}
where
      ProjSumTask.ProjectInternalID    <> '00000000'
  and ProjSumTask.WBSElementInternalID <> '00000000'
  and ProjSumTask._ProjObjRoot.CompanyCode is not null 
  and ProjSumTask._ProjObjRoot.ControllingArea is not null
/*+[internal] {
"BASEINFO":
{
"FROM":
[
"I_PPM_PROJECTSUMMARYTASK",
"I_PPM_PROJTEAMMEMBERSCNTNOST",
"I_PPM_PROJTEAMSTAFFINGCNTNOST",
"I_PROJECTBASICDATA",
"I_PROJECTCOSTDATES",
"I_PROJECTTOWBSELEMENTCOUNT",
"I_PROJECTTYPE",
"I_WBSELEMENTBASICDATA",
"P_PROJECTCOSTSUM"
],
"ASSOCIATED":
[],
"BASE":
[],
"ANNO_REF":
[],
"SCALAR_FUNCTION":
[],
"VERSION":0,
"ANNOREF_EVALUATION_ERROR":""
}
}*/