P_PurchaseOrderPriceVariance
Purchase Order Price Variance
P_PurchaseOrderPriceVariance is a Consumption CDS View that provides data about "Purchase Order Price Variance" in SAP S/4HANA. It reads from 3 data sources (I_CalendarDate, I_PurchaseOrder, I_PurchaseOrderItem) and exposes 37 fields with key fields PurchaseOrder, PurchaseOrderItem. It has 1 association to related views. Part of development package ODATA_MM_ANALYTICS.
Data Sources (3)
| Source | Alias | Join Type |
|---|---|---|
| I_CalendarDate | CalendarDate | left_outer |
| I_PurchaseOrder | PurchaseOrder | inner |
| I_PurchaseOrderItem | PurchaseOrderItem | from |
Parameters (4)
| Name | Type | Default |
|---|---|---|
| P_DisplayCurrency | displaycurrency | |
| P_Material | matnr | |
| P_StartDate | vdm_validitystart | |
| P_EndDate | vdm_validityend |
Associations (1)
| Cardinality | Target | Alias | Condition |
|---|---|---|---|
| [0..1] | I_BR_Domain | _DocText | $projection.DocNumber = _DocText.DomainValue and _DocText.Name = 'MM_A_DOCTYPE' and _DocText.Language = $session.system_language |
Annotations (6)
| Name | Value | Level | Field |
|---|---|---|---|
| AbapCatalog.sqlViewName | PMMPOPRICEVAR | view | |
| AbapCatalog.compiler.compareFilter | true | view | |
| AccessControl.authorizationCheck | #CHECK | view | |
| VDM.viewType | #CONSUMPTION | view | |
| VDM.private | true | view | |
| AccessControl.personalData.blocking | #NOT_REQUIRED | view |
Fields (37)
| Key | Field | Source Table | Source Field | Description |
|---|---|---|---|---|
| KEY | PurchaseOrder | I_PurchaseOrder | PurchaseOrder | |
| KEY | PurchaseOrderItem | |||
| PurchaseOrderType | I_PurchaseOrder | PurchaseOrderType | ||
| Supplier | I_PurchaseOrder | Supplier | ||
| PurchasingOrganization | I_PurchaseOrder | PurchasingOrganization | ||
| PurchasingGroup | I_PurchaseOrder | PurchasingGroup | ||
| CompanyCode | I_PurchaseOrder | CompanyCode | ||
| PurchaseOrderDate | I_PurchaseOrder | PurchaseOrderDate | ||
| MaterialGroup | I_PurchaseOrderItem | MaterialGroup | ||
| Material | I_PurchaseOrderItem | Material | ||
| Plant | I_PurchaseOrderItem | Plant | ||
| PurchaseContract | I_PurchaseOrderItem | PurchaseContract | ||
| PurchasingInfoRecord | I_PurchaseOrderItem | PurchasingInfoRecord | ||
| DocNumber | ||||
| PurchaseOrderQuantityUnit | I_PurchaseOrderItem | PurchaseOrderQuantityUnit | ||
| OrderQuantity | I_PurchaseOrderItem | OrderQuantity | ||
| DocumentCurrency | I_PurchaseOrderItem | DocumentCurrency | ||
| DisplayCurrency | ||||
| NetAmount | NetAmount | |||
| OrderQuantityendasQuantityInBaseUnit | ||||
| NetPriceQuantity | I_PurchaseOrderItem | NetPriceQuantity | ||
| OrderPriceUnit | OrderPriceUnit | |||
| _Plant | _Plant | |||
| _PurchasingGroup | _PurchasingGroup | |||
| _PurchasingOrganization | _PurchasingOrganization | |||
| _Supplier | _Supplier | |||
| _CompanyCode | I_PurchaseOrder | _CompanyCode | ||
| _Material | _Material | |||
| _MaterialGroup | _MaterialGroup | |||
| CalendarYear | CalendarYear | |||
| CalendarQuarter | CalendarQuarter | |||
| CalendarMonth | CalendarMonth | |||
| CalendarWeek | CalendarWeek | |||
| YearQuarter | YearQuarter | |||
| YearMonth | YearMonth | |||
| YearWeek | YearWeek | |||
| _DocText | _DocText |
@AbapCatalog.sqlViewName: 'PMMPOPRICEVAR'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@VDM.viewType : #CONSUMPTION
@VDM.private: true
@AccessControl.personalData.blocking: #NOT_REQUIRED
define view P_PurchaseOrderPriceVariance
with parameters
P_DisplayCurrency : displaycurrency,
P_Material : matnr,
P_StartDate : vdm_validitystart,
P_EndDate : vdm_validityend
as select from I_PurchaseOrderItem as PurchaseOrderItem
inner join I_PurchaseOrder as PurchaseOrder on PurchaseOrder.PurchaseOrder = PurchaseOrderItem.PurchaseOrder
left outer join I_CalendarDate as CalendarDate on PurchaseOrderDate = CalendarDate.CalendarDate
association [0..1] to I_BR_Domain as _DocText on $projection.DocNumber = _DocText.DomainValue
and _DocText.Name = 'MM_A_DOCTYPE'
and _DocText.Language = $session.system_language
{
key PurchaseOrder.PurchaseOrder,
key cast( PurchaseOrderItem.PurchaseOrderItem as vdm_purchaseorderitem ) as PurchaseOrderItem,
PurchaseOrder.PurchaseOrderType,
/* Supplier */
PurchaseOrder.Supplier,
/* Org Data */
PurchaseOrder.PurchasingOrganization,
PurchaseOrder.PurchasingGroup,
PurchaseOrder.CompanyCode,
PurchaseOrder.PurchaseOrderDate,
/* Item Data */
PurchaseOrderItem.MaterialGroup,
PurchaseOrderItem.Material,
PurchaseOrderItem.Plant,
PurchaseOrderItem.PurchaseContract,
PurchaseOrderItem.PurchasingInfoRecord,
cast('3' as mm_a_doctype ) as DocNumber,
PurchaseOrderItem.PurchaseOrderQuantityUnit,
PurchaseOrderItem.OrderQuantity,
PurchaseOrderItem.DocumentCurrency,
cast( :P_DisplayCurrency as displaycurrency ) as DisplayCurrency,
// NetPriceAmount,
cast( case when PurchaseOrderItem.DocumentCurrency != '' or PurchaseOrderDate != ''
then cast( currency_conversion(
amount => NetPriceAmount,
source_currency => PurchaseOrderItem.DocumentCurrency,
target_currency => :P_DisplayCurrency,
exchange_rate_date => PurchaseOrderDate,
exchange_rate_type => 'M',
error_handling => 'FAIL_ON_ERROR'
) as purchase_order_net_amount )
else 0
end as mm_pur_ana_mat_avg_price ) as NetPriceAmount,
NetAmount,
// cast( case when PurchaseOrderItem.DocumentCurrency != '' or PurchaseOrder.PurchaseOrderDate != ''
// then cast( currency_conversion(
// amount => NetPriceAmount,
// source_currency => PurchaseOrderItem.DocumentCurrency,
// target_currency => :P_DisplayCurrency,
// exchange_rate_date => PurchaseOrder.PurchaseOrderDate,
// exchange_rate_type => 'M',
// error_handling => 'FAIL_ON_ERROR'
// ) as purchase_order_net_amount )
//
// else 0
// end as purchase_order_net_amount ) as NetPriceAmount,
//
cast(currency_conversion(
amount => NetAmount,
source_currency => PurchaseOrderItem.DocumentCurrency,
target_currency => :P_DisplayCurrency,
exchange_rate_date => PurchaseOrder.PurchaseOrderDate,
exchange_rate_type => 'M',
error_handling => 'FAIL_ON_ERROR'
)
as purchase_order_net_amount ) as PurOrdNetAmountInDisplayCrcy,
case
when OrdPriceUnitToOrderUnitDnmntr = 0
then 0
else DIVISION(OrderPriceUnitToOrderUnitNmrtr, OrdPriceUnitToOrderUnitDnmntr, 1 ) * PurchaseOrderItem.OrderQuantity
end
as QuantityInBaseUnit,
PurchaseOrderItem.NetPriceQuantity,
OrderPriceUnit,
_Plant,
_PurchasingGroup,
_PurchasingOrganization,
_Supplier,
PurchaseOrder._CompanyCode,
_Material,
_MaterialGroup,
/* Dates */
CalendarYear,
CalendarQuarter,
CalendarMonth,
CalendarWeek,
YearQuarter,
YearMonth,
YearWeek,
_DocText
}
where PurchaseOrderItem._PurchaseOrder.PurchasingDocumentDeletionCode = ''
and PurchaseOrderItem._PurchaseOrder.ReleaseIsNotCompleted = ''
and PurchaseOrderItem._PurchaseOrder.PurchasingCompletenessStatus = ''
and PurchaseOrderItem.PurchasingDocumentDeletionCode = ''
and Material = $parameters.P_Material
and PurchaseOrderDate between $parameters.P_StartDate and $parameters.P_EndDate
and not ( PurchaseOrderItem.IsStatisticalItem = 'X' and PurchaseOrderItem.Material= '' )
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