質問
私は、次のデータがあるとします:
OrderNumber | CustomerName | CustomerAddress | CustomerCode
1 | Chris | 1234 Test Drive | 123
2 | Chris | 1234 Test Drive | 123
どのように私は、列「顧客名」、「CustomerAddress」、および「CustomerCodeは」すべては完全に相関していることを検出することができますか?私は、SQL Serverのデータマイニングは、おそらく仕事のための適切なツールであることを考えていますが、私はそれであまりにも多くの経験を持っていない。
事前に感謝します。
UPDATE:
「相関」により、Iは、列AがXであるときはいつでも、列BがYであろうこと、統計的な意味で意味します。上記データにおいて、最後の3つの列は互いに相関し、最初の列はありません。
操作の入力は、テーブルの名前になり、出力は次のようなものになるだろう。
Column 1 | Column 2 | Certainty
CustomerName | CustomerAddress | 100%
CustomerAddress | CustomerCode | 100%
解決
(SQL Server 2008のに付属SSISの構成要素である)SQL Serverのデータ・プロファイリング・コンポーネントに組み込ま「関数従属性」の試験があります。それは、このブログの記事にかなりよく説明されます:
<のhref = "http://blogs.conchango.com/jamiethomson/archive/2008/03/03/ssis-data-profiling-task-part-7-functional-dependency.aspx" のrel = "nofollowをnoreferrer "> http://blogs.conchango.com/jamiethomson/archive/2008/03/03/ssis-data-profiling-task-part-7-functional-dependency.aspx の
私はいくつかの(下の文書化).NET APIを介してデータプロファイラ出力へのアクセスに少しを果たしてきたし、それはなんとかようです。私の要件は、列の値の分布を扱っているのでしかし、私は、DBCC STATISTICSの出力に基づいて、はるかに簡単な何か一緒に行くことになりました。私はかなり私は、プロファイラコンポーネントと出力ビューアで見たものに感銘を受けました。
他のヒント
あなたは相関とはどういう意味ですか?あなたはちょうど彼らが同じなら見たいですか?あなたは自分自身に、テーブルを結合してT-SQLでそれを行うことができます:
select distinct
case when a.OrderNumber < b.OrderNumber then a.OrderNumber
else b.OrderNumber
end as FirstOrderNumber,
case when a.OrderNumber < b.OrderNumber then b.OrderNumber
else a.OrderNumber
end as SecondOrderNumber
from
MyTable a
inner join MyTable b on
a.CustomerName = b.CustomerName
and a.CustomerAddress = b.CustomerAddress
and a.CustomerCode = b.CustomerCode
このはあなたを返します。
FirstOrderNumber | SecondOrderNumber
1 | 2
の相関は距離空間上で定義され、自分の価値観は、メトリックではありませんされます。
このはあなたにcustomerAddress
が独自にcustomerName
で定義されていない顧客のパーセントを与えるます:
SELECT AVG(perfect)
FROM (
SELECT
customerName,
CASE
WHEN COUNT(customerAddress) = COUNT(DISTINCT customerAddress)
THEN 0
ELSE 1
END AS perfect
FROM orders
GROUP BY
customerName
) q
それらの間の矛盾を見つけるために、このクエリに代わりcustomerAddress
とcustomerName
の他の列を代入します。