s4/AccountsPayableTurnover.sql (165 lines of code) (raw):

WITH AccountsPayable AS ( SELECT AccountsPayable.Client_MANDT, AccountsPayable.CompanyCode_BUKRS, AccountsPayable.CompanyText_BUTXT, AccountsPayable.AccountNumberOfVendorOrCreditor_LIFNR, AccountsPayable.NAME1, AccountsPayable.AccountingDocumentNumber_BELNR, AccountsPayable.NumberOfLineItemWithinAccountingDocument_BUZEI, AccountsPayable.PostingDateInTheDocument_BUDAT, AccountsPayable.AccountingDocumenttype_BLART, AccountsPayable.AmountInLocalCurrency_DMBTR, AccountsPayable.AmountInTargetCurrency_DMBTR, AccountsPayable.CurrencyKey_WAERS, AccountsPayable.TargetCurrency_TCURR, AccountsPayable.DocFiscPeriod, SUM( IF( ## CORTEX-CUSTOMER: Please add relevant Movement Types. -- Value '101' represents 'GR Goods Receipt' and '501' represents 'Receipt w/o PO' AccountsPayable.AccountType_KOART = 'M' AND AccountsPayable.MovementType__inventoryManagement___BWART IN ('101', '501'), AccountsPayable.POOrderHistory_AmountInLocalCurrency_DMBTR, IF( ## CORTEX-CUSTOMER: Please add relevant Movement Types. -- Value '102' represents 'GR for PO reversal (full or any one of the line item)' -- Value '502' represents 'Return Receipt w/o PO' (Receipt made against movement type 501 document is cancelled.) AccountsPayable.AccountType_KOART = 'M' AND AccountsPayable.MovementType__inventoryManagement___BWART IN ('102', '502'), AccountsPayable.POOrderHistory_AmountInLocalCurrency_DMBTR * -1, 0 ) ) ) OVER ( PARTITION BY AccountsPayable.Client_MANDT, AccountsPayable.CompanyCode_BUKRS, AccountsPayable.TargetCurrency_TCURR, AccountsPayable.DocFiscPeriod ) AS TotalPurchasesInSourceCurrency, SUM( IF( ## CORTEX-CUSTOMER: Please add relevant Movement Types. -- Value '101' represents 'GR Goods Receipt' and '501' represents 'Receipt w/o PO' AccountsPayable.AccountType_KOART = 'M' AND AccountsPayable.MovementType__inventoryManagement___BWART IN ('101', '501'), AccountsPayable.POOrderHistory_AmountInTargetCurrency_DMBTR, IF( ## CORTEX-CUSTOMER: Please add relevant Movement Types. -- Value '102' represents 'GR for PO reversal (full or any one of the line item)' -- Value '502' represents 'Return Receipt w/o PO' (Receipt made against movement type 501 document is cancelled.) AccountsPayable.AccountType_KOART = 'M' AND AccountsPayable.MovementType__inventoryManagement___BWART IN ('102', '502'), AccountsPayable.POOrderHistory_AmountInTargetCurrency_DMBTR * -1, 0 ) ) ) OVER ( PARTITION BY AccountsPayable.Client_MANDT, AccountsPayable.CompanyCode_BUKRS, AccountsPayable.TargetCurrency_TCURR, AccountsPayable.DocFiscPeriod ) AS TotalPurchasesInTargetCurrency, SUM( IF( ## CORTEX-CUSTOMER: Please add relevant Account Type. Value 'K' represents 'Vendor' AccountsPayable.Accounttype_KOART = 'K' ## CORTEX-CUSTOMER: Please add relevant Document Type. Value 'RE' represents 'Invoice - Gross' AND AccountsPayable.InvoiceDocumenttype_BLART = 'RE', AccountsPayable.AmountInLocalCurrency_DMBTR, 0 ) ) OVER ( PARTITION BY AccountsPayable.Client_MANDT, AccountsPayable.CompanyCode_BUKRS, AccountsPayable.TargetCurrency_TCURR, AccountsPayable.DocFiscPeriod ) AS PeriodAPInSourceCurrency, SUM( IF( ## CORTEX-CUSTOMER: Please add relevant Account Type. Value 'K' represents 'Vendor' AccountsPayable.Accounttype_KOART = 'K' ## CORTEX-CUSTOMER: Please add relevant Document Type. Value 'RE' represents 'Invoice - Gross' AND AccountsPayable.InvoiceDocumenttype_BLART = 'RE', AccountsPayable.AmountInTargetCurrency_DMBTR, 0 ) ) OVER ( PARTITION BY AccountsPayable.Client_MANDT, AccountsPayable.CompanyCode_BUKRS, AccountsPayable.TargetCurrency_TCURR, AccountsPayable.DocFiscPeriod ) AS PeriodAPInTargetCurrency, SUM( IF( ## CORTEX-CUSTOMER: Please add relevant Account Type. Value 'K' represents 'Vendor' AccountsPayable.Accounttype_KOART = 'K' ## CORTEX-CUSTOMER: Please add relevant Document Type. Value 'RE' represents 'Invoice - Gross' AND AccountsPayable.InvoiceDocumenttype_BLART = 'RE' -- AND AccountsPayable.PostingDateInTheDocument_BUDAT <= AccountsPayable.DocFiscPeriodEndDate AND AccountsPayable.ClearingDate_AUGDT IS NULL, AccountsPayable.AmountInLocalCurrency_DMBTR, 0 ) ) OVER ( PARTITION BY AccountsPayable.Client_MANDT, AccountsPayable.CompanyCode_BUKRS, AccountsPayable.TargetCurrency_TCURR, AccountsPayable.DocFiscPeriod ) AS UnpaidPeriodAPInSourceCurrency, SUM( IF( ## CORTEX-CUSTOMER: Please add relevant Account Type. Value 'K' represents 'Vendor' AccountsPayable.Accounttype_KOART = 'K' ## CORTEX-CUSTOMER: Please add relevant Document Type. Value 'RE' represents 'Invoice - Gross' AND AccountsPayable.InvoiceDocumenttype_BLART = 'RE' -- AND AccountsPayable.PostingDateInTheDocument_BUDAT <= AccountsPayable.DocFiscPeriodEndDate AND AccountsPayable.ClearingDate_AUGDT IS NULL, AccountsPayable.AmountInTargetCurrency_DMBTR, 0 ) ) OVER ( PARTITION BY AccountsPayable.Client_MANDT, AccountsPayable.CompanyCode_BUKRS, AccountsPayable.TargetCurrency_TCURR, AccountsPayable.DocFiscPeriod ) AS UnpaidPeriodAPInTargetCurrency, SUM( IF( ## CORTEX-CUSTOMER: Please add relevant Account Type. Value 'K' represents 'Vendor' AccountsPayable.Accounttype_KOART = 'K' ## CORTEX-CUSTOMER: Please add relevant Document Type. Value 'RE' represents 'Invoice - Gross' AND AccountsPayable.InvoiceDocumenttype_BLART = 'RE' AND AccountsPayable.ClearingDate_AUGDT IS NULL, AccountsPayable.AmountInLocalCurrency_DMBTR, 0 ) ) OVER ( PARTITION BY AccountsPayable.Client_MANDT, AccountsPayable.CompanyCode_BUKRS, AccountsPayable.TargetCurrency_TCURR ORDER BY AccountsPayable.DocFiscPeriod ) AS ClosingAPInSourceCurrency, SUM( IF( ## CORTEX-CUSTOMER: Please add relevant Account Type. Value 'K' represents 'Vendor' AccountsPayable.Accounttype_KOART = 'K' ## CORTEX-CUSTOMER: Please add relevant Document Type. Value 'RE' represents 'Invoice - Gross' AND AccountsPayable.InvoiceDocumenttype_BLART = 'RE' AND AccountsPayable.ClearingDate_AUGDT IS NULL, AccountsPayable.AmountInTargetCurrency_DMBTR, 0 ) ) OVER ( PARTITION BY AccountsPayable.Client_MANDT, AccountsPayable.CompanyCode_BUKRS, AccountsPayable.TargetCurrency_TCURR ORDER BY AccountsPayable.DocFiscPeriod ) AS ClosingAPInTargetCurrency FROM `{{ project_id_tgt }}.{{ dataset_reporting_tgt }}.AccountsPayable` AS AccountsPayable WHERE AccountsPayable.DocFiscPeriod <= AccountsPayable.KeyFiscPeriod ) SELECT AccountsPayable.Client_MANDT, AccountsPayable.CompanyCode_BUKRS, AccountsPayable.CompanyText_BUTXT, AccountsPayable.AccountNumberOfVendorOrCreditor_LIFNR, AccountsPayable.NAME1, AccountsPayable.AccountingDocumentNumber_BELNR, AccountsPayable.NumberOfLineItemWithinAccountingDocument_BUZEI, AccountsPayable.PostingDateInTheDocument_BUDAT, AccountsPayable.AccountingDocumenttype_BLART, AccountsPayable.AmountInLocalCurrency_DMBTR, AccountsPayable.AmountInTargetCurrency_DMBTR, AccountsPayable.CurrencyKey_WAERS, AccountsPayable.TargetCurrency_TCURR, AccountsPayable.DocFiscPeriod, COALESCE(AccountsPayable.TotalPurchasesInSourceCurrency, 0) AS TotalPurchasesInSourceCurrency, COALESCE(AccountsPayable.TotalPurchasesInTargetCurrency, 0) AS TotalPurchasesInTargetCurrency, COALESCE(AccountsPayable.ClosingAPInSourceCurrency, 0) - COALESCE(UnpaidPeriodAPInSourceCurrency, 0) AS OpeningAPInSourceCurrency, COALESCE(AccountsPayable.ClosingAPInTargetCurrency, 0) - COALESCE(UnpaidPeriodAPInTargetCurrency, 0) AS OpeningAPInTargetCurrency, COALESCE(AccountsPayable.PeriodAPInSourceCurrency, 0) AS PeriodAPInSourceCurrency, COALESCE(AccountsPayable.PeriodAPInTargetCurrency, 0) AS PeriodAPInTargetCurrency, COALESCE(AccountsPayable.ClosingAPInSourceCurrency, 0) - COALESCE(UnpaidPeriodAPInSourceCurrency, 0) + COALESCE(AccountsPayable.PeriodAPInSourceCurrency, 0) AS ClosingAPInSourceCurrency, COALESCE(AccountsPayable.ClosingAPInTargetCurrency, 0) - COALESCE(UnpaidPeriodAPInTargetCurrency, 0) + COALESCE(AccountsPayable.PeriodAPInTargetCurrency, 0) AS ClosingAPInTargetCurrency, SAFE_DIVIDE( AccountsPayable.TotalPurchasesInSourceCurrency, ( (COALESCE(AccountsPayable.ClosingAPInSourceCurrency, 0) - COALESCE(UnpaidPeriodAPInSourceCurrency, 0) + COALESCE(AccountsPayable.PeriodAPInSourceCurrency, 0)) * 2 - COALESCE(AccountsPayable.PeriodAPInSourceCurrency, 0) ) / 2 ) AS AccountsPayableTurnoverInSourceCurrency, SAFE_DIVIDE( AccountsPayable.TotalPurchasesInTargetCurrency, ( (COALESCE(AccountsPayable.ClosingAPInTargetCurrency, 0) - COALESCE(UnpaidPeriodAPInTargetCurrency, 0) + COALESCE(AccountsPayable.PeriodAPInTargetCurrency, 0)) * 2 - COALESCE(AccountsPayable.PeriodAPInTargetCurrency, 0) ) / 2 ) AS AccountsPayableTurnoverInTargetCurrency FROM AccountsPayable