質問

私は、次のデータがあるとします:

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

それらの間の矛盾を見つけるために、このクエリに代わりcustomerAddresscustomerNameの他の列を代入します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top