Frage

Angenommen, ich habe folgende Daten:

OrderNumber  |  CustomerName  |  CustomerAddress  | CustomerCode
          1  |  Chris         |  1234 Test Drive  |          123
          2  |  Chris         |  1234 Test Drive  |          123

Wie kann ich erkennen, dass die Spalten „Kundenname“, „Customer“ und „CustomerCode“ alles perfekt korrelieren? Ich denke, dass SQL Server Data Mining wahrscheinlich das richtige Werkzeug für den Job ist, aber ich habe nicht zu viel Erfahrung damit.

Vielen Dank im Voraus.

UPDATE:

Mit dem „korrelieren“, ich meine in der Statistik Sinn, dass, wenn Spalte ein x, Spalte b y sein wird. In den obigen Daten, die letzten drei Spalten korrelieren miteinander, und die erste Spalte nicht.

Der Eingang des Betriebes wäre der Name der Tabelle, und der Ausgang wäre so etwas wie:

         Column 1     |    Column 2          | Certainty
      CustomerName    |  CustomerAddress     | 100%
      CustomerAddress |  CustomerCode        | 100%
War es hilfreich?

Lösung

Es gibt einen ‚funktionale Abhängigkeit‘ Test in die Komponente SQL Server Datenprofil gebaut (das ist eine SSIS-Komponente, die im Lieferumfang von SQL Server 2008). Es wird beschrieben, ziemlich gut auf diesem Blog-Eintrag:

http://blogs.conchango.com/jamiethomson/archive/2008/03/03/ssis-data-profiling-task-part-7-functional-dependency.aspx

Ich habe ein wenig mit dem Zugriff auf die Daten-Profiler-Ausgabe über einige gespielt (unter dokumentierten) .NET APIs und es scheint machbar. Da jedoch meine Anforderung mit der Verteilung von Spaltenwerten behandelt, landete ich mit etwas viel einfacher basierend auf der Ausgabe von DBCC STATISTIK steigen. Ich war ziemlich beeindruckt von dem, was ich von der Profiler Komponente sah und die Ausgabe-Viewer.

Andere Tipps

Was meinst du mit Korrelat? Wollen Sie nur um zu sehen, ob sie gleich sind? Sie können das tun in T-SQL, indem Sie die Tabelle mit sich selbst verbinden:

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

Dies würde zurückkehren Sie:

FirstOrderNumber  |  SecondOrderNumber
               1  |                  2

Die Korrelation wird auf metrische Räume definiert sind, und Ihre Werte sind nicht metrisch.

Dies gibt Ihnen Prozent der Kunden, die eindeutig durch customerAddress definiert haben nicht 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

Ersetzen andere Spalten statt customerAddress und customerName in diese Abfrage Diskrepanzen zwischen ihnen zu finden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top