s4/PricingConditions.sql (88 lines of code) (raw):
SELECT
prcd_elements.CLIENT AS Client_MANDT,
prcd_elements.KNUMV AS NumberOfTheDocumentCondition_KNUMV,
prcd_elements.KPOSN AS ConditionItemNumber_KPOSN,
prcd_elements.STUNR AS StepNumber_STUNR,
prcd_elements.ZAEHK AS ConditionCounter_ZAEHK,
prcd_elements.KAPPL AS Application_KAPPL,
prcd_elements.KSCHL AS ConditionType_KSCHL,
prcd_elements.KRECH AS CalculationTypeForCondition_KRECH,
prcd_elements.KAWRT AS Checkbox_KAWRT,
prcd_elements.KBETR AS ConditionAmountOrPercentage_KBETR,
prcd_elements.KKURS AS ConditionExchangeRateForConversionToLocalCurrency_KKURS,
prcd_elements.KPEIN AS ConditionPricingUnit_KPEIN,
prcd_elements.KMEIN AS ConditionUnitInTheDocument_KMEIN,
prcd_elements.KUMZA AS NumeratorForConvertingConditionUnitsToBaseUnits_KUMZA,
prcd_elements.KUMNE AS DenominatorForConvertingConditionUnitsToBaseUnits_KUMNE,
prcd_elements.KNTYP AS ConditionCategory_KNTYP,
prcd_elements.KSTAT AS ConditionIsUsedForStatistics_KSTAT,
prcd_elements.KNPRS AS ScaleType_KNPRS,
prcd_elements.KRUEK AS ConditionIsRelevantForAccrual_KRUEK,
prcd_elements.KRELI AS ConditionForInvoiceList_KRELI,
prcd_elements.KHERK AS OriginOfTheCondition_KHERK,
prcd_elements.KGRPE AS GroupCondition_KGRPE,
prcd_elements.KOUPD AS ConditionUpdate_KOUPD,
prcd_elements.KOLNR AS AccessSequenceAccessNumber_KOLNR,
prcd_elements.KNUMH AS NumberOfConditionRecordFromBatchDetermination_KNUMH,
prcd_elements.KOPOS AS SequentialNumberOfTheCondition_KOPOS,
prcd_elements.KVSL1 AS AccountKey_KVSL1,
prcd_elements.SAKN1 AS GLAccountNumber_SAKN1,
prcd_elements.MWSK1 AS TaxOnSalesPurchasesCode_MWSK1,
prcd_elements.KVSL2 AS AccountKeyAccrualsProvisions_KVSL2,
prcd_elements.SAKN2 AS GLAccountNumber_SAKN2,
prcd_elements.MWSK2 AS WithholdingTaxCode_MWSK2,
prcd_elements.LIFNR AS AccountNumberOfVendorORCreditor_LIFNR,
prcd_elements.KUNNR AS CustomerNumber_KUNNR,
prcd_elements.KDIFF AS RoundingOffDifferenceOfTheCondition_KDIFF,
prcd_elements.KSTEU AS ConditionControl_KSTEU,
prcd_elements.KINAK AS ConditionIsInactive_KINAK,
prcd_elements.KOAID AS ConditionClass_KOAID,
prcd_elements.ZAEKO AS ConditionCounter_ZAEKO,
prcd_elements.KMXAW AS IndicatorForMaximumConditionBaseValue_KMXAW,
prcd_elements.KMXWR AS IndicatorForMaximumConditionAmount_KMXWR,
prcd_elements.KFAKTOR AS FactorForConditionBaseValue_KFAKTOR,
prcd_elements.KDUPL AS StructureCondition_KDUPL,
prcd_elements.KFAKTOR1 AS FactorForConditionBasis_KFAKTOR1,
prcd_elements.KZBZG AS ScaleBasisIndicator_KZBZG,
prcd_elements.KSTBS AS ScaleBaseValueOfTheCondition_KSTBS,
prcd_elements.KONMS AS ConditionScaleUnitOfMeasure_KONMS,
prcd_elements.KONWS AS ScaleCurrency_KONWS,
prcd_elements.KAWRT_K AS UpdatedInformationInRelatedUserDataField_KAWRT_K,
prcd_elements.KWAEH AS ConditionCurrency_KWAEH,
prcd_elements.KWERT_K AS ConditionValue_KWERT_K,
prcd_elements.KFKIV AS ConditionForIntercompanyBilling_KFKIV,
prcd_elements.KVARC AS VariantCond_KVARC,
prcd_elements.KMPRS AS ConditionChangedManually_KMPRS,
prcd_elements.PRSQU AS PriceSource_PRSQU,
prcd_elements.VARCOND AS VariantCondition_VARCOND,
prcd_elements.KTREL AS RelevanceForAccountAssignment_KTREL,
prcd_elements.MDFLG AS IndicatorMatrixMaintenance_MDFLG,
prcd_elements.TXJLV AS TaxJurisdictionCodeLevel_TXJLV,
prcd_elements.KBFLAG AS BitEncryptedFlagsInPricing_KBFLAG,
prcd_elements.CPF_GUID AS IdentifierOfCPFFormulaInDocument_CPF_GUID,
prcd_elements.KAQTY AS AdjustedQuantity_KAQTY,
--##CORTEX-CUSTOMER Consider adding other dimensions from the calendar_date_dim table as per your requirement
CalendarDateDimension_KDATU.CalYear AS YearOfChangeDate_KDATU,
CalendarDateDimension_KDATU.CalMonth AS MonthOfChangeDate_KDATU,
CalendarDateDimension_KDATU.CalWeek AS WeekOfChangeDate_KDATU,
CalendarDateDimension_KDATU.CalQuarter AS QuarterOfChangeDate_KDATU,
PARSE_DATE('%Y%m%d', SUBSTRING(prcd_elements.KDATU, 1, 8)) AS Checkbox_KDATU,
CAST(NULL AS NUMERIC) AS Level_STUFE,
CAST(NULL AS NUMERIC) AS Path_WEGXX,
CAST(NULL AS STRING) AS AccessSequenceAccessNumber_KOLNR3,
--##CORTEX-CUSTOMER If you prefer to use currency conversion, uncomment below
-- currency_conversion.UKURS AS ExchangeRate_UKURS,
-- currency_conversion.conv_date AS Conversion_date,
-- currency_conversion.TCURR AS TargetCurrency_TCURR,
-- COALESCE(prcd_elements.KWERT * currency_decimal.CURRFIX, prcd_elements.KWERT) * currency_conversion.UKURS AS ConditionValueInTargetCurrency_KWERT,
prcd_elements.VAL_ZERO AS ProcessConditionsWithValueEqualToZero_VAL_ZERO,
prcd_elements.IS_ACCT_DETN_RELEVANT AS StatisticalAndRelevantForAccountDetermination_IS_ACCT_DETN_RELEVANT,
prcd_elements.TAX_COUNTRY AS TaxReportingCountry_TAX_COUNTRY,
prcd_elements.WAERK AS SDDocumentCurrency_WAERK,
prcd_elements.DATAAGING AS DataFilterValueForDataAging_DATAAGING,
COALESCE(prcd_elements.WAERS, '') AS CurrencyKey_WAERS,
-- decimal place of amounts for non-decimal-based currencies
COALESCE(prcd_elements.KWERT * currency_decimal.CURRFIX, prcd_elements.KWERT) AS ConditionValue_KWERT
FROM
`{{ project_id_src }}.{{ dataset_cdc_processed_s4 }}.prcd_elements` AS prcd_elements
LEFT JOIN
`{{ project_id_tgt }}.{{ dataset_reporting_tgt }}.currency_decimal` AS currency_decimal
ON
COALESCE(prcd_elements.WAERS, '') = currency_decimal.CURRKEY
--##CORTEX-CUSTOMER If you prefer to use currency conversion, uncomment below
-- LEFT JOIN
-- `{{ project_id_tgt }}.{{ dataset_reporting_tgt }}.currency_conversion` AS currency_conversion
-- ON
-- prcd_elements.CLIENT = currency_conversion.MANDT
-- AND COALESCE(prcd_elements.WAERS, '') = currency_conversion.FCURR
-- AND PARSE_DATE('%Y%m%d', SUBSTRING(prcd_elements.KDATU, 1, 8)) = currency_conversion.conv_date
-- AND currency_conversion.TCURR IN UNNEST({{ sap_currencies }})
--##CORTEX-CUSTOMER Modify the exchange rate type based on your requirement
-- AND currency_conversion.KURST = 'M'
LEFT JOIN
`{{ project_id_src }}.{{ k9_datasets_processing }}.calendar_date_dim` AS CalendarDateDimension_KDATU
ON
CalendarDateDimension_KDATU.Date = PARSE_DATE('%Y%m%d', SUBSTRING(prcd_elements.KDATU, 1, 8))