P_TimeShtHrsAnlysForProjects
Staffing - Timesheet Analysis of Hours spent in Projects
P_TimeShtHrsAnlysForProjects is a Composite CDS View that provides data about "Staffing - Timesheet Analysis of Hours spent in Projects" in SAP S/4HANA. It reads from 2 data sources (I_TimeSheetRecord, I_WBSElementBasicData) and exposes 24 fields. Part of development package CPD_CDS.
Data Sources (2)
| Source | Alias | Join Type |
|---|---|---|
| I_TimeSheetRecord | A | from |
| I_WBSElementBasicData | B | inner |
Annotations (13)
| Name | Value | Level | Field |
|---|---|---|---|
| AbapCatalog.sqlViewName | PTSANLYS4PROJ | view | |
| AbapCatalog.preserveKey | true | view | |
| AbapCatalog.compiler.compareFilter | true | view | |
| AccessControl.authorizationCheck | #NOT_REQUIRED | view | |
| AccessControl.personalData.blocking | #BLOCKED_DATA_EXCLUDED | view | |
| ClientHandling.algorithm | #SESSION_VARIABLE | view | |
| Metadata.ignorePropagatedAnnotations | true | view | |
| ObjectModel.usageType.serviceQuality | #B | view | |
| ObjectModel.usageType.sizeCategory | #XL | view | |
| ObjectModel.usageType.dataClass | #TRANSACTIONAL | view | |
| VDM.private | true | view | |
| VDM.lifecycle.contract.type | #NONE | view | |
| VDM.viewType | #COMPOSITE | view |
Fields (24)
| Key | Field | Source Table | Source Field | Description |
|---|---|---|---|---|
| TimeSheetRecord | I_TimeSheetRecord | TimeSheetRecord | ||
| PersonWorkAgreement | I_TimeSheetRecord | PersonWorkAgreement | ||
| ActivityType | I_TimeSheetRecord | ActivityType | ||
| WorkItem | I_TimeSheetRecord | WorkItem | ||
| WBSElementInternalID | I_TimeSheetRecord | WBSElementInternalID | ||
| FiscalYearPeriod | ||||
| FiscalYear | ||||
| FiscalPeriod | ||||
| TimeSheetDate | I_TimeSheetRecord | TimeSheetDate | ||
| PurchaseOrder | I_TimeSheetRecord | PurchaseOrder | ||
| PurchaseOrderItem | I_TimeSheetRecord | PurchaseOrderItem | ||
| ServiceDocumentType | I_TimeSheetRecord | ServiceDocumentType | ||
| ServiceDocument | I_TimeSheetRecord | ServiceDocument | ||
| ServiceDocumentItem | I_TimeSheetRecord | ServiceDocumentItem | ||
| TimeSheetStatus | I_TimeSheetRecord | TimeSheetStatus | ||
| TimeSheetPredecessorRecord | I_TimeSheetRecord | TimeSheetPredecessorRecord | ||
| AccountingIndicatorCode | I_TimeSheetRecord | AccountingIndicatorCode | ||
| HoursUnitOfMeasure | I_TimeSheetRecord | HoursUnitOfMeasure | ||
| quan82endasRecordedHours | ||||
| quan82endasUnapprovedHours | ||||
| quan82endasApprovedHours | ||||
| WBSElement | I_WBSElementBasicData | WBSElement | ||
| Project | ||||
| ProjectProfileCode |
@AbapCatalog: {
sqlViewName: 'PTSANLYS4PROJ',
preserveKey: true,
compiler.compareFilter: true
}
@AccessControl: {
authorizationCheck: #NOT_REQUIRED,
personalData.blocking: #BLOCKED_DATA_EXCLUDED
}
@ClientHandling.algorithm: #SESSION_VARIABLE
//@EndUserText.label: 'Staffing - Timesheet Analysis of Hours spent in Projects'
@Metadata.ignorePropagatedAnnotations: true
@ObjectModel.usageType: {
serviceQuality: #B,
sizeCategory: #XL,
dataClass: #TRANSACTIONAL
}
@VDM: {
private: true,
lifecycle.contract.type: #NONE,
viewType: #COMPOSITE
}
define view P_TimeShtHrsAnlysForProjects as select from I_TimeSheetRecord as A
// left outer join I_PurchaseOrderItemAPI01 as C
// on A.PurchaseOrder = C.PurchaseOrder
// and A.PurchaseOrderItem = C.PurchaseOrderItem
inner join I_WBSElementBasicData as B
on A.WBSElementInternalID = B.WBSElementInternalID {
A.TimeSheetRecord,
A.PersonWorkAgreement,
//case when A.ActivityType = '' then C.Material,
//else A.ActivityType end as ActivityType,
A.ActivityType,
A.WorkItem,
A.WBSElementInternalID,
concat(left(A.TimeSheetDate, 4), concat('0', substring(A.TimeSheetDate, 5, 2))) as FiscalYearPeriod,
left(A.TimeSheetDate, 4) as FiscalYear,
concat('0', substring(A.TimeSheetDate, 5, 2)) as FiscalPeriod,
A.TimeSheetDate,
A.PurchaseOrder,
A.PurchaseOrderItem,
A.ServiceDocumentType,
A.ServiceDocument,
A.ServiceDocumentItem,
A.TimeSheetStatus,
A.TimeSheetPredecessorRecord,
A.AccountingIndicatorCode,
A.HoursUnitOfMeasure,
case when A.TimeSheetStatus = '10' or A.TimeSheetStatus = '20' or A.TimeSheetStatus = '30' then A.RecordedHours
else cast(0 as abap.quan( 8, 2 )) end as RecordedHours,
case when A.TimeSheetStatus = '20' then A.RecordedHours
else cast(0 as abap.quan( 8, 2 )) end as UnapprovedHours,
case when A.TimeSheetStatus = '30' then A.RecordedHours
else cast(0 as abap.quan( 8, 2 )) end as ApprovedHours,
B.WBSElement,
B._Project.Project,
B._Project.ProjectProfileCode
} where ( A.TimeSheetStatus = '10' or A.TimeSheetStatus = '20' or A.TimeSheetStatus = '30' )
and A.ServiceDocumentType = ''
and A.ServiceDocument = '' and A.ServiceDocumentItem = '000000'
// and ( B._Project.ProjectProfileCode = 'P001' or B._Project.ProjectProfileCode = 'P002' )
Learn More
- What Is a CDS View in SAP S/4HANA?
- Types of CDS Views: Basic, Composite, Consumption, and Transactional
- SAP Tables vs CDS Views — Key Differences
- Understanding Data Lineage in SAP S/4HANA
- VDM (Virtual Data Model) in SAP S/4HANA Explained
- CDS View Annotations — A Complete Guide
- CDS View Field Mapping and Associations
- Understanding the SAP S/4HANA Data Model
- CDS View Extensions and Custom Fields in SAP S/4HANA
- Released APIs and Stability Contracts in SAP S/4HANA