2009-06-04 7 views
1

Supposons que je les données suivantes:Colonnes dans Corrélés Détection des données

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

Comment puis-je détecter que les colonnes « CustomerName », « CustomerAddress » et « CustomerCode » tout en parfaite corrélation? Je pense que Sql Server data mining est probablement le bon outil pour le travail, mais je n'ai pas trop d'expérience avec ça.

Merci d'avance.

MISE À JOUR:

Par « corrélat », je veux dire au sens statistique, que chaque fois que la colonne est un x, colonne b y sera. Dans les données ci-dessus, les trois dernières colonnes sont en corrélation les unes avec les autres, et la première colonne ne le fait pas.

L'entrée de l'opération serait le nom de la table, et la sortie serait quelque chose comme:

  Column 1  | Column 2   | Certainty 
     CustomerName | CustomerAddress  | 100% 
     CustomerAddress | CustomerCode  | 100% 
+0

Vous voulez dire 'statistiques' comme dans le coefficient de corrélation de Pearson 'r'? –

+0

Et btw oui, DM est le meilleur match pour cela car il vous permettra d'identifier rapidement des groupes d'éléments avec des attributs similaires –

Répondre

0

Il existe un test de dépendance fonctionnelle intégré au composant SQL Server Data Profiling (qui est un composant SSIS fourni avec SQL Server 2008). Il est décrit assez bien sur ce blog:

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

Je l'ai joué un peu avec l'accès à la sortie de profileur de données par certains (sous-documenté) API .NET et il semble faisable. Cependant, puisque mon exigence traitait de la distribution des valeurs de colonne, j'ai fini par aller avec quelque chose de beaucoup plus simple basé sur la sortie de DBCC STATISTICS. J'ai été très impressionné par ce que j'ai vu du composant profileur et de la visionneuse de sortie.

+0

Merci mec ... Je savais que j'avais déjà vu quelque chose comme ça, je ne pouvais pas me souvenir où. –

0

Que voulez-vous dire par corrélat? Voulez-vous juste voir s'ils sont égaux? Vous pouvez le faire dans T-SQL en se joignant à la table elle-même:

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 

Cela vous retourner:

FirstOrderNumber | SecondOrderNumber 
       1 |     2 
0

La corrélation est définie sur les espaces métriques et vos valeurs ne sont pas métrique.

Cela vous donnera pour cent des clients qui ne disposent pas customerAddress unique défini par 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 

autres colonnes de substitution au lieu de customerAddress et customerName dans cette requête pour trouver des divergences entre eux.

Questions connexes