MS SQL Server T-SQL で SQL スクリプトを作成して、Sales Invoice Revenue メジャーを次の 4 つのメジャーに分割しようとしました。
- トランザクション販売収益 = 元の通貨での収益
- 住宅販売収入 = 現地部門通貨 (自国通貨) で表される収入
- CAD での連結売上高 = カナダ通貨にすべて連結された売上高
- 米ドルでの連結売上高 = すべて米国通貨に連結された売上高
上記の要件を満たすためにコーディングを試みたのは次のとおりです。
Main_InvoiceTable AS
( --This is the root query, retrieving rows from OrderHeader Table
select frhkrg.* ,
convert(money, isnull(x.rate_exchange, 1)) as TMP_ExchangeRate,
coalesce(source_currency,'NA') as TMP_SourceTransactionCurrencyType,
coalesce(target_currency,'NA') as TMP_TargetTransactionCurrencyType
from frhkrg
LEFT OUTER JOIN rates x --Note, the rate here is to convert FROM USD to CAD (USD * RATE = CAD)
on CONVERT(varchar(6), frhkrg.fakdat, 112) = convert(varchar(4),year(x.date_l)) +
case
when convert(varchar(2), month(x.date_l)) < 10 then '0' + convert(varchar(2), month(x.date_l))
else convert(varchar(2), month(x.date_l)) end
),
,Home_Currency as
(
SELECT Entity.[Legal Entity Code] as EntityCode,
Entity.[Legal Entity Desc] as EntityName,
Entity.[Local Currency] as EntityCurrency
from dbo.tmpBU Entity
group by
Entity.[Legal Entity Code],
Entity.[Legal Entity Desc],
Entity.[Local Currency]
),
Main_Query as
(
select
Main_InvoiceTable.faknr as [Invoice Num]
,Main_InvoiceTable.fakdat as [Invoice Date]
,Main_InvoiceTable.ordernr as [Sales Order Number]
,InvoiceDetail.esr_aantal as [Sales Revenue]
,Home_Currency.EntityCurrency as [Home Currency Cd]
,Main_InvoiceTable.TMP_SourceTransactionCurrencyType as [Source Transaction Currency Cd]
,Main_InvoiceTable.TMP_TargetTransactionCurrencyType as [Target Transaction Currency Cd]
,Main_InvoiceTable.TMP_ExchangeRate as [US/CDN Exchange Rate]
--If the transaction currency Code is different than the Home Currency Code then do the following conditional logic
,case when Home_Currency.EntityCurrency = 'USD' AND Main_InvoiceTable.TMP_SourceTransactionCurrencyType = 'USD'
then 1 --SourceCurrency and Homecurrency are the same, no need to convert.
when Home_Currency.EntityCurrency = 'USD' AND Main_InvoiceTable.TMP_SourceTransactionCurrencyType= 'CAD'
then 1 / Main_InvoiceTable.TMP_ExchangeRate --convert from CAD to USD, use the reverse of the conversion rate
when Home_Currency.EntityCurrency = 'CAD' AND Main_InvoiceTable.TMP_SourceTransactionCurrencyType = 'USD'
then Main_InvoiceTable.TMP_ExchangeRate --if we need to convert from USD to CAD, use the "direct" conversion rate
when Home_Currency.EntityCurrency = 'CAD' AND Main_InvoiceTable.TMP_SourceTransactionCurrencyType = 'CAD'
then 1 --SourceCurrency and Homecurrency are the same, no need to convert.
else 1
end as TMP_Convert_To_Entity_Currency,
case when Main_InvoiceTable.TMP_SourceTransactionCurrencyType <> 'CAD'
then Main_InvoiceTable.TMP_ExchangeRate --to convert FROM USD to CAD
else 1 --consolidated Currency should be either CAD or in USD (currently, the logic dictates that consolidated is always in CAD)
end as TMP_Convert_To_Consolidated_Currency
from Main_InvoiceTable
join Home_Currency on Main_InvoiceTable.[Division Code] = Home_Currency.EntityCode
join dbo.frhsrg InvoiceDetail on Main_InvoiceTable.faknr = InvoiceDetail.faknr
)
select
[Invoice Num]
,[Invoice Date]
,[Sales Order Number]
,[Sales Revenue] as [Transaction Sales Revenue]
,[Sales Revenue] * TMP_Convert_To_Entity_Currency as [Entity Sales Revenue]
,[Sales Revenue] * TMP_Convert_To_Consolidated_Currency as [Consolidated Sales Revenue]
from Main_Query
group by
[Invoice Num]
,[Invoice Date]
,[Sales Order Number]
,[Sales Revenue]
,TMP_Convert_To_Entity_Currency
,TMP_Convert_To_Consolidated_Currency
いくつかのテーブルのサンプル データを次に示します。 メインの請求書ヘッダー、自国通貨、および為替レート テーブルのサンプル日付
Main Invoice Table Header Query
-------------------------------
Invoice Num | Invoice Date | Order Num | Order Date | Division Code | Warehouse | Exchange Rate | Source Currency | Target Currency
5000001 | July-20-18 | 50052 | June-18-18 | 859 | _MTL | 1.3017 | USD | CAD
5000001 | July-20-18 | 50052 | June-18-18 | 859 | _MTL | 1.5239 | EUR | CAD
6000001 | October-30-18 | 60033 | August-22-18 | 952 | _ARIZONA | 1.0000 | USD | USD
6000001 | October-30-18 | 60033 | August-22-18 | 952 | _ARIZONA | 1.1502 | EUR | USD
Home Currency Query
-------------------
Division Code | Division Name | Home Currency
199 | T Reliable Manufacturing Inc. | USD
200 | C Verification Technologies Inc. | USD
330 | T France SARL | EUR
400 | LauchWorks LLC | CAD
859 | C Industries (2007) ULC -MTL | CAD
889 | C (2007) ULC -VCR | CAD
952 | DDL LLC | USD
999 | N Petrochemicals | CAD
Exchange Rate Table
-------------------
source_currency | target_currency | date_l | rate_exchange | Division
CAD | EUR | September-02-12 | 1 | 859
CAD | GBP | September-02-12 | 1 | 859
CAD | USD | August-30-12 | 1 | 859
EUR | ATS | January-01-99 | 13.7603 | NULL
EUR | BEF | January-01-99 | 40.3399 | NULL
EUR | CAD | May-31-07 | 1.4536 | 859
EUR | CAD | June-08-07 | 1.4173 | 859
USD | CAD | August-31-18 | 1.3055 | 859
USD | CAD | September-30-18 | 1.2945 | 859
私は正しい軌道に乗っていると信じています。ただし、特に連結 CAD および連結 USD 売上高の取得に関しては、スクリプトがすべての要件を満たしているとは言えません。
誰かが私を元に戻すことができれば、それは素晴らしいことです!