@AbapCatalog.sqlViewName: 'PRASCHEDDSTCTITM'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey:true
@ClientHandling.algorithm: #SESSION_VARIABLE
@AccessControl.authorizationCheck: #NOT_REQUIRED
@VDM.viewType: #COMPOSITE
@VDM.private: true
//@EndUserText.label: 'Revenue Schedule: Distinct/Compound POB'
define view P_RASchedDistinctItem
//Cumulative Amount
as select from P_RASchedAllocatedAmtPerPerd as RevAcctgAllocatedAmtPerPerd
//POB
inner join I_RAPerformanceObligation as RAPerformanceObligation
on RAPerformanceObligation.PerformanceObligation = RevAcctgAllocatedAmtPerPerd.PerformanceObligation
and RAPerformanceObligation.RevenueAccountingContract = RevAcctgAllocatedAmtPerPerd.RevenueAccountingContract
//Delta Amount
left outer to one join P_RASchedPerfOblgnAmtPerd as RAPerfOblgnTotalAmtPerPeriod
on RevAcctgAllocatedAmtPerPerd.PerformanceObligation = RAPerfOblgnTotalAmtPerPeriod.PerformanceObligation
and RevAcctgAllocatedAmtPerPerd.FiscalYear = RAPerfOblgnTotalAmtPerPeriod.FiscalYear
and RevAcctgAllocatedAmtPerPerd.FiscalPeriod = RAPerfOblgnTotalAmtPerPeriod.FiscalPeriod
and RevAcctgAllocatedAmtPerPerd.RevenueAccountingContract = RAPerfOblgnTotalAmtPerPeriod.RevenueAccountingContract
//Cumulative Quantity
left outer to one join P_RASchedCumltvPerfOblgnQtyPer as RACumFulfilledQtyPerPerd
on RevAcctgAllocatedAmtPerPerd.PerformanceObligation = RACumFulfilledQtyPerPerd.PerformanceObligation
and RevAcctgAllocatedAmtPerPerd.FiscalYear = RACumFulfilledQtyPerPerd.FiscalYear
and RevAcctgAllocatedAmtPerPerd.FiscalPeriod = RACumFulfilledQtyPerPerd.FiscalPeriod
and RevAcctgAllocatedAmtPerPerd.RevenueAccountingContract = RACumFulfilledQtyPerPerd.RevenueAccountingContract
//Delta Quantity
left outer to one join P_RASchedPerfOblgnQtyPerd as RAInvcAndFulfilledQtyPerPerd
on RAInvcAndFulfilledQtyPerPerd.PerformanceObligation = RevAcctgAllocatedAmtPerPerd.PerformanceObligation
and RAInvcAndFulfilledQtyPerPerd.FiscalYear = RevAcctgAllocatedAmtPerPerd.FiscalYear
and RAInvcAndFulfilledQtyPerPerd.FiscalPeriod = RevAcctgAllocatedAmtPerPerd.FiscalPeriod
and RAInvcAndFulfilledQtyPerPerd.RevenueAccountingContract = RevAcctgAllocatedAmtPerPerd.RevenueAccountingContract
//Posted Amount
left outer to one join P_RASchedPerfOblgnPostdAmtPerd as RAPerfOblgnPostedRevnPerPerd
on RevAcctgAllocatedAmtPerPerd.PerformanceObligation = RAPerfOblgnPostedRevnPerPerd.PerformanceObligation
and RevAcctgAllocatedAmtPerPerd.FiscalYear = RAPerfOblgnPostedRevnPerPerd.FiscalYear
and RevAcctgAllocatedAmtPerPerd.FiscalPeriod = RAPerfOblgnPostedRevnPerPerd.FiscalPeriod
and RevAcctgAllocatedAmtPerPerd.RevenueAccountingContract = RAPerfOblgnPostedRevnPerPerd.RevenueAccountingContract
{
/*======Key===============================================*/
key RevAcctgAllocatedAmtPerPerd.PerformanceObligation,
key RevAcctgAllocatedAmtPerPerd.FiscalYear,
key RevAcctgAllocatedAmtPerPerd.FiscalPeriod,
key RevAcctgAllocatedAmtPerPerd.RevenueAccountingContract,
/*======Associated Key====================================*/
RAPerformanceObligation.RAHigherLevelPerfOblgn,
cast( concat(RevAcctgAllocatedAmtPerPerd.FiscalYear,RevAcctgAllocatedAmtPerPerd.FiscalPeriod) as fis_jahrper_conv ) as FiscalYearPeriod,
cast(
concat(RevAcctgAllocatedAmtPerPerd.FiscalPeriod,concat('.',RevAcctgAllocatedAmtPerPerd.FiscalYear))
as fis_fiscalyearperiod_c) as FiscalYearPeriodCompoundText,
/*======POB Data==========================================*/
RAPerformanceObligation.CompanyCode,
RAPerformanceObligation.PerformanceObligationClass,
RAPerformanceObligation.PerformanceObligationStartDate,
RAPerformanceObligation.PerformanceObligationEndDate,
RAPerformanceObligation.PerfObligationDeferralMethod,
RAPerformanceObligation.PerfOblgnStartDateType,
RAPerformanceObligation.PerfOblgnIsFullyFulfilled,
RAPerformanceObligation.PerfOblgnIsFinallyInvoiced,
RAPerformanceObligation.PerfOblgnEventType,
RAPerformanceObligation.PerfOblgnFulfillmentType,
RAPerformanceObligation.Customer,
// @ObjectModel.foreignKey.association: 'RAPerformanceObligation._PerfOblgnDistinctType'
RAPerformanceObligation.RAPerfOblgnDistinctType,
//UoM
@Semantics.currencyCode: true
RAPerformanceObligation.SalesDocumentCurrency,
@Semantics.unitOfMeasure: true
RAPerformanceObligation.PerfOblgnEffectiveQuantityUnit,
@Semantics.unitOfMeasure: true
RAPerformanceObligation.PerfOblgnContractualQtyUnit,
@Semantics.unitOfMeasure: true
cast('%' as farr_quantity_unit ) as RatioUnit,
//Price and Quantity
@Semantics.amount.currencyCode : 'SalesDocumentCurrency'
RAPerformanceObligation.PerUnitSSPriceInSlsDocCrcy,
@Semantics.amount.currencyCode : 'SalesDocumentCurrency'
RAPerformanceObligation.SSPriceInSalesDocCrcy,
@Semantics.quantity.unitOfMeasure: 'PerfOblgnContractualQtyUnit'
RAPerformanceObligation.PerfOblgnContractualQuantity,
/*======Cumulative Amount==========================================*/
@Semantics.amount.currencyCode : 'SalesDocumentCurrency'
cast(RevAcctgAllocatedAmtPerPerd.TotalEffectiveAmtInSlsDocCrcy as farr_allocated_amt) as AllocatedPriceInSalesDocCrcy,
@Semantics.amount.currencyCode : 'SalesDocumentCurrency'
cast(RevAcctgAllocatedAmtPerPerd.TotalDocAmtContractual as farr_price preserving type) as ContractualPrcInSlsDocCrcy,
@Semantics.amount.currencyCode : 'SalesDocumentCurrency'
cast(RevAcctgAllocatedAmtPerPerd.TotalDocAmtAllocatedEffect as farr_corr_amt preserving type) as CumltvEffectiveAmtInSlsDocCrcy,
@Semantics. amount.currencyCode : 'SalesDocumentCurrency'
cast(RevAcctgAllocatedAmtPerPerd.TotalEffectiveAmtInSlsDocCrcy
- RevAcctgAllocatedAmtPerPerd.TolRecgdAmtCatchupPerPerd
- RevAcctgAllocatedAmtPerPerd.TolRecognizedAmtPerPerd
as farr_open_revenue) as RAOpenRevnInSlsDocCrcy,
//total cost
RevAcctgAllocatedAmtPerPerd.TolEffectiveCostPerPerd,
//Open Cost
@Semantics. amount.currencyCode : 'SalesDocumentCurrency'
cast(RevAcctgAllocatedAmtPerPerd.TolEffectiveCostPerPerd
- RevAcctgAllocatedAmtPerPerd.TolRecognizedCostPerPerd
as farr_open_cost) as RAOpenCostInSlsDocCrcy,
/*======Delta Amount==========================================*/
//Delta Invoiced Amount
@Semantics.amount.currencyCode : 'SalesDocumentCurrency'
cast(RAPerfOblgnTotalAmtPerPeriod.DeltaInvoicedAmtPerPerd as farr_cds_invoiced_amount preserving type) as PerPerdInvoicedAmtInSlsDocCrcy,
//Delta Recognized Amount
@Semantics.amount.currencyCode : 'SalesDocumentCurrency'
cast(RAPerfOblgnTotalAmtPerPeriod.DeltaRecognizedAmtPerPerd + RAPerfOblgnTotalAmtPerPeriod.DeltaRecgdAmtCatchupPerPerd as farr_recog_amt) as DeltaRecognizedAmtInSlsDocCrcy,
//Delta Catch Up Amount
@Semantics.amount.currencyCode : 'SalesDocumentCurrency'
cast(RAPerfOblgnTotalAmtPerPeriod.DeltaRecgdAmtCatchupPerPerd as farr_cds_rev_catchup_amt preserving type) as RecgdCatchUpAmtInSlsDocCrcy,
//Delta Posted Amount
@Semantics.amount.currencyCode : 'SalesDocumentCurrency'
cast(RAPerfOblgnPostedRevnPerPerd.TotalPostgAmtInSlsDocCrcy*-1 as farr_post_price) as PostedRevnInSlsDocCrcy,
//Delta Recognized Cost
@Semantics.amount.currencyCode : 'SalesDocumentCurrency'
cast(RAPerfOblgnTotalAmtPerPeriod.DeltaRecognizedCostPerPerd as farr_recog_cost) as DeltaRecgdCostInSlsDocCrcy,
//Delta Posted Cost
@Semantics.amount.currencyCode : 'SalesDocumentCurrency'
cast(RAPerfOblgnPostedRevnPerPerd.TotalPostgCostInSlsDocCrcy as farr_post_cost) as PostedCostInSlsDocCrcy,
/*======Cumulative Quantity==========================================*/
//Cumulative Fulfilled Quantity
@Semantics.quantity.unitOfMeasure: 'PerfOblgnEffectiveQuantityUnit'
cast(RACumFulfilledQtyPerPerd.PerfOblgnCumltvFulfilledQty as farr_fulfilled_qty_to_cur_perd) as UpToCurPeriodFulfilledQty,
//Cumulative Effective Quantity
@Semantics.quantity.unitOfMeasure: 'PerfOblgnEffectiveQuantityUnit'
cast(RACumFulfilledQtyPerPerd.PerfOblgnCumltvEffectiveQty as farr_cds_effective_quantity) as PerfOblgnEffectiveQuantity,
/*======Delta Quantity==========================================*/
//Delta Fulfilled Quantity
@Semantics.quantity.unitOfMeasure: 'PerfOblgnEffectiveQuantityUnit'
cast(RAInvcAndFulfilledQtyPerPerd.DeltaPerfOblgnFulfilledQty as farr_cds_fulfilled_quantity) as PerfOblgnPerPeriodFulfilledQty,
//Delta Invoiced Quantity
@Semantics.quantity.unitOfMeasure: 'PerfOblgnContractualQtyUnit'
cast(RAInvcAndFulfilledQtyPerPerd.PerfOblgnDeltaInvoicedQuantity as farr_cds_invoiced_quantity) as PerfOblgnDeltaInvoicedQuantity,
/*======Calculated Fields==========================================*/
//Revenue Fulfilled Progress = Recognized Revenue / Total Revenue
@Semantics.quantity.unitOfMeasure: 'RatioUnit'
cast(case RevAcctgAllocatedAmtPerPerd.TotalEffectiveAmtInSlsDocCrcy
when 0 then 100
else 100*round(division(RevAcctgAllocatedAmtPerPerd.TolRecognizedAmtPerPerd + RevAcctgAllocatedAmtPerPerd.TolRecgdAmtCatchupPerPerd, RevAcctgAllocatedAmtPerPerd.TotalEffectiveAmtInSlsDocCrcy, 6), 4)
end as farr_fulfilled_rev_progress) as RecognizedRevnUpToCurPerdPct,
//FulfilledQtyUpToCurPerdRatio = Cumulative Fulfilled Quantity / Effective Quantity
@Semantics.quantity.unitOfMeasure: 'RatioUnit'
cast(
case RACumFulfilledQtyPerPerd.PerfOblgnCumltvEffectiveQty
when 0 then 0
else 100*round(division(RACumFulfilledQtyPerPerd.PerfOblgnCumltvFulfilledQty, RACumFulfilledQtyPerPerd.PerfOblgnCumltvEffectiveQty, 6), 4)
end as farr_fulfilled_qty_progress) as FulfilledQtyUpToCurPerdRatio,
/*======DPC Fields==========================================*/
cast('' as farr_cds_rai_srcco) as RevnAcctgSenderComponent,
cast('' as farr_operational_doc) as RevnAcctgOperationalDocument,
cast('' as farr_item_id) as RAOperationalDocumentItem,
cast(0 as farr_num_of_oprational_doc) as RANumberOfOperationalDocument,
/*======Additional Fields for Consumer==========================================*/
RevAcctgAllocatedAmtPerPerd.TotalEffectiveAmtInSlsDocCrcy,
RevAcctgAllocatedAmtPerPerd.TolRecognizedAmtPerPerd,
RevAcctgAllocatedAmtPerPerd.TolRecgdAmtCatchupPerPerd,
/*======Associated View=====================================*/
// RAPerformanceObligation._RevenueAccountingContract,
RAPerformanceObligation._PerfOblgnStartDateType,
RAPerformanceObligation._PerfObligationEventType,
RAPerformanceObligation._FulfillmentType,
RAPerformanceObligation._Customer,
RAPerformanceObligation._PerfOblgnDistinctType,
RAPerformanceObligation._Currency,
RAPerformanceObligation._PerfOblgnContractualQtyUnit,
RAPerformanceObligation._PerfOblgnEffectiveQtyUnit
}
where RAPerformanceObligation.RAPerfOblgnDistinctType = 'D' //Distinct
and RAPerformanceObligation.PerfOblgnIsSoftDeleted is initial
/*+[internal] {
"BASEINFO":
{
"FROM":
[
"I_RAPERFORMANCEOBLIGATION",
"P_RASCHEDALLOCATEDAMTPERPERD",
"P_RASCHEDCUMLTVPERFOBLGNQTYPER",
"P_RASCHEDPERFOBLGNAMTPERD",
"P_RASCHEDPERFOBLGNPOSTDAMTPERD",
"P_RASCHEDPERFOBLGNQTYPERD"
],
"ASSOCIATED":
[
"I_CURRENCY",
"I_CUSTOMER",
"I_RAPERFOBLGNDISTINCTTYPE",
"I_RAPERFOBLGNFLFMTTYPE",
"I_RAPERFOBLGNSTARTDATETYPE",
"I_RAPERFOBLIGATIONEVENTTYPE",
"I_UNITOFMEASURE"
],
"BASE":
[
"I_RAPERFORMANCEOBLIGATION"
],
"ANNO_REF":
[],
"SCALAR_FUNCTION":
[],
"VERSION":0,
"ANNOREF_EVALUATION_ERROR":""
}
}*/