2011-01-26 8 views
1

私は、データウェアハウスを見て、タイプ2の変化は、私は、行の日付にvaildが同じであることを確認する必要がありトン-SQLテスト・データウェアハウスタイプ2は

正しく動作することを確認する必要があります変更します次の行の日付からvaild。

このチェックは行が終了したことを確認することですが、以下は、キンボールタイプ2次元のテーブルに関連正しく

おかげで、マルク・

+0

がどのように次の行が何であるかを知っているのですか?これまでに何を試しましたか? – LittleBobbyTables

+0

私は同じ顧客番号を持っていますが、ETLでは新しいIDを取得します。だから私は同じ顧客番号に基づいてテストする必要があります –

答えて

1

を開始されました。これは、現在のエントリのための遠い将来の日付として

  1. 3000-01-01を前提としてい

    注意。

  2. CustomerKeyは、自動インクリメント整数です。

この例では、次のエントリが見つからないか見つからない行のリストを表示する必要があります。

; 
with 
q_00 as (
select 
     CustomerKey 
    , CustomerBusinessKey 
    , rw_ValidFrom 
    , rw_ValidTo 
    , row_number() over (partition by CustomerBusinessKey order by CustomerKey asc) as rn 
from dimCustomer 
) 
select 
     a.CustomerKey 
    , a.CustomerBusinessKey 
    , a.rw_ValidFrom 
    , a.rw_ValidTo 
    , b.CustomerKey   as b_key 
    , b.CustomerBusinessKey as b_bus_key 
    , b.rw_ValidFrom   as b_ValidFrom 
    , b.rw_ValidTo   as b_ValidTo 
from  q_00 as a 
left join q_00 as b on b.CustomerBusinessKey = a.CustomerBusinessKey and (b.rn = a.rn + 1) 
where a.rw_ValidTo < '3000-01-01' 
    and a.rw_ValidTo != b.rw_ValidFrom ; 

また、有用な

-- Make sure there are no nulls 
-- for rw_ValidFrom, rw_ValidTo 
select 
     CustomerKey 
    , rw_ValidFrom 
    , rw_ValidTo 
from dimCustomer 
where rw_ValidFrom is null 
    or rw_ValidTo is null ; 

-- make sure there are no duplicates in rw_ValidFrom 
-- for the same customer 
select 
     CustomerBusinessKey 
    , rw_ValidFrom 
    , count(1) as cnt 
from dimCustomer 
group by CustomerBusinessKey, rw_ValidFrom 
having count(1) > 1 ; 

-- make sure there are no duplicates in rw_ValidTo 
-- for the same customer 
select 
     CustomerBusinessKey 
    , rw_ValidTo 
    , count(1) as cnt 
from dimCustomer 
group by CustomerBusinessKey, rw_ValidTo 
having count(1) > 1 ;