"Double clé d'attribut" erreur lors de l'attribut n'est pas une clé
j'obtiens l'erreur suivante lors du traitement d'une Dimension:
erreurs dans le moteur de stockage OLAP: une double clé d'attribut a été trouvé lors du traitement: Table: 'dbo_Orders', colonne: 'Project', valeur: 'service à la clientèle affaires". L'attribut est "Projet".
' Project 'est un attribut de la dimension' Orders', mais pas une clé. Nulle part je n'ai indiqué que la colonne projet est une clé! Je devrais pouvoir avoir autant de copies que nécessaire, tout comme un premier nom de domaine.
je suis nouveau au Projet des services D'analyse et j'ai vraiment besoin de passer outre le fait que les SSA se plaignent constamment des valeurs dupliquées alors qu'il devrait être parfaitement correct d'avoir des valeurs dupliquées. Je suis sûr que c'est quelque chose de simple que j'oublie.
Edit: je me rends compte qu'il est possible de définir KeyDuplicate = ReportAndContinue/ReportAndStop
et il est également possible de définir KeyColumns
et NameColumns
. Mais ce processus en plusieurs étapes semble très lourd pour ce qui seem devrait être une opération très normale, comme ajouter Address1, Address2, Address3, Firstname, Zipcode, et d'autres champs qui sont normalement dupliqués. Je ne peux pas croire que ce processus lourd doit être appliqué à tous ces domaines?
Merci d'avance.
15 réponses
ceci est habituellement le résultat d'avoir à la fois des blancs et des Nuls dans la table/vue source.
essentiellement, les SSAS font cela pour chaque attribut Choisir des COALESCENCES distinctes(attr,") à partir de la SOURCE
les services D'analyse par défaut convertissent les NULLs en blancs, ce qui donne des blancs de valeur en double dans le flux résultant - d'où l'erreur.
je suis d'accord ça craint et c'est une grande douleur pour les nouveaux joueurs.
Solution: supprimer tous les nulls de la source de données, pour exemple en utilisant ISNULL / COALESCE everywhere, ou en filtrant les lignes contenant null en utilisant la clause where, ou en exécutant UPDATE statement pour remplacer tous les null par des valeurs avant de traiter le cube, etc.
clic Droit sur l'attribut et sélectionnez "Propriétés". Trouvez " KeyColumn "qui se trouve sous la catégorie" Source " dans la fenêtre des propriétés. Éditez la propriété "KeyColumn", elle affichera une fenêtre conviviale.
Supprimer l'attribut du côté droit (colonnes clés) de la fenêtre et le remplacer par la colonne id actuelle du côté gauche (Colonnes disponibles).
puis éditez la propriété "NameColumn", la même fenêtre apparaîtra. Déplacer l'attribut colonne (les données réelles que vous voulez afficher) du côté gauche vers la droite.
testé dans VS 2010 Shell SSDT.
j'ai eu le même problème, et il n'y avait pas de valeurs vides ou nulles dans l'attribut.
Après quelques analyses, j'ai trouvé que certaines cordes avaient le caractère line break À la fin. Ainsi, si 2 valeurs de l'attribut sont à peu près les mêmes, mais que l'une d'elles a le caractère line break À la fin, et que l'autre ne le fait pas, alors SSAS soulève l'erreur "Duplicate attribut key".
Il peut être corrigé en supprimant le caractère line break de l'attribut.
J'ai créé la colonne calculée avec la suivante définition:
REPLACE(REPLACE(ISNULL([AttributeColumn], ''), CHAR(13), ''), CHAR(10), '')
j'ai utilisé cette colonne calculée dans le cube, et l'erreur a disparu.
cela M'est arrivé aujourd'hui et m'a griffé la tête pendant un moment car aucune des solutions ici n'a fonctionné. J'ai finalement résolu le problème et j'ai pensé que je pourrais ajouter ma solution pour quiconque googlant cette erreur et arrivant ici comme je l'ai fait.
dans mon cas, ce n'était pas NULL
et des chaînes vides car j'avais déjà la valeur de [NullProcessing] définie à "UnknownMember". Il s'agissait plutôt de la valeur [de L'élagage], dans mon cas elle était fixée à "droite".
tandis que je sais comment j'ai résolu(?) je ne suis pas 100% de pourquoi, mais je suppose que quand SQL Server fait il est SELECT DISTINCT(col) FROM source
et [Parage] valeur est définie en tant que telle, l'Analyse server supprime ensuite, entre autres choses, onglet caractères à partir de la fin (qui RTRIM
dans SQL Server par exemple ne le fait pas) et finit avec des doublons.
donc mettre [Trimming] à "None" pourrait le résoudre, puisque les onglets étaient des données dont je n'avais pas besoin (mes données sont analysées / lues / entrées à partir de sources externes) j'ai simplement remplacé les onglets dans la colonne et après que le traitement du cube est bien à nouveau.
alors que mon autre solution sur cette page fonctionne (et selon les situations pourrait être plus idéal), c'est une solution alternative:
Voici une maquette d'une partie de mon erreur:
Column: 'attribute1_name', Value: 'Search String'
j'ai fait une rapide recherche de:
SELECT dim_id,
dim_name,
dim_attribute1.id,
dim_attribute1.name,
dim_attribute2.id,
dim_attribute2.name
FROM dim_table
INNER JOIN dim_attribute1 ON dim.attribute1_id = dim_attribute1.id
INNER JOIN dim_attribute2 ON dim.attribute2_id = dim_attribute2.id
WHERE UPPER(dim_attribute1.name) = UPPER('Search String')
Il s'avère qu'il y avait deux entrées différentes pour dim_attribute1.nom qui correspondait à ceci:
- Chaîne De Recherche
- chaîne de recherche
la première solution les divise sans problème, il est donc une solution de travail (plus la prime de performance). Cependant une alternative (si l'on veut garder les valeurs du texte sous forme de touches) est de changer la Collation:
Key Columns → Column Name → Source → Collation
à inclure "sensible à la casse".
D'autres problèmes similaires peuvent être des caractères blancs et d'autres changements subtils faciles à ne pas repérer dans le texte.
j'ai eu un problème similaire aujourd'hui (même message d'erreur), pour le bien de n'importe qui d'autre venant ici avec le même problème j'ai mis quelques notes sur mon wiki: http://www.david-halliday.co.uk/wiki/doku.php?id=databases:oracleselect_dates_for_ssas_include_hierarchy
Mon cas était SQL (simplifié et reformulé pour défendre les innocents):
SELECT dim_id,
dim_name,
dim_attribute1.name,
dim_attribute2.name
FROM dim_table
INNER JOIN dim_attribute1 ON dim.attribute1_id = dim_attribute1.id
INNER JOIN dim_attribute2 ON dim.attribute2_id = dim_attribute2.id
la chose étrange était que l'erreur se produisait pour certains cas de dim_attribute1_name mais pas dim_attribute2_name. Toutefois, dans ce cas précis, l'attribut était exactement le même. En fin de compte, la solution a été de changer le SQL en:
SELECT dim_id,
dim_name,
dim_attribute1.id,
dim_attribute1.name,
dim_attribute2.id,
dim_attribute2.name
FROM dim_table
INNER JOIN dim_attribute1 ON dim.attribute1_id = dim_attribute1.id
INNER JOIN dim_attribute2 ON dim.attribute2_id = dim_attribute2.id
puis utiliser dans la dimension (Cacher les ID dans la liste) la valeur id pour la touche de l'attribut et le nom pour le nom de l'attribut. Je n'ai jamais vu ça avant, mais pour une raison quelconque, c'est arrivé ici. Je crois que cette solution est meilleure que de configurer le cube pour traiter en ignorant les erreurs clés dupliquées.
je suppose que si l'on construit un les tables de jointures dimensionnelles offrent une meilleure performance / fiabilité. Mais ne me cite pas là-dessus.
j'ai eu le même problème et j'ai trouvé une solution de contournement.
clic droit dans "Cube" = > "processus" = > "Modifier les paramètres" = > "erreurs de clés de Dimension"
Active "De L'Utilisateur Configuration D'Erreur Personnalisée"
définir "ignorer les erreurs" pour cette liste déroulante "Touche Pas Trouvé" "De Clés Dupliquées" "Clé nulle convertie en inconnue" "Clé Null non autorisée"
Le problème avec les clés seront ignorés.
j'ai eu le problème après avoir joué avec l'ajout d'un ID dans la colonne clé d'un attribut. J'avais depuis enlevé la clé mais j'ai trouvé que l'instruction select pendant le traitement se référait toujours à L'ID, ce qui rend l'attribut non unique. Je n'ai pas pu trouver de solution via les propriétés des attributs, donc j'ai supprimé toute la Dimension et je l'ai recréée. Cela a réglé le problème.
Merci de lire ce blog: une clé d'attribut dupliquée a été trouvée.... Regardez la longue explication de la raison 1. Cela expliquera pourquoi exactement cela se produit.
Merci les gars
Ned
j'ai résolu en spécifiant la COLLATION sur mes vues sur la base de données relationnelle comme suit.
COALESCE ([Descrição da Transação],") COLLATE Latin1_General_CI_AI
Si vos données contient à la fois les valeurs Null et " SSAS donner les doublons attribut clé, car il considère les valeurs Null ". Vous n'avez pas besoin de toucher vos données pour réparer ça. Vous pouvez aller à votre vue de la source de données et Ajouter un calcul nommé avec L'expression COALESCE(mycolumn, "), puis l'utiliser dans votre dimension à la place de la colonne d'origine. Cela réglera le problème au niveau de la vue de la source de données et la dimension se traitera très bien.
laissez-moi vous donner une solution si vous voulez toujours aller de l'avant avec le déploiement et la navigation cube . Dans la fenêtre "process cube", changez les paramètres d'erreur de la clé de dimension pour custom . Vous seriez en mesure de déployer et parcourir le cube de façon transparente . le compromis ici est que vous pourriez ne pas obtenir les résultats que vous espériez.
un certain temps qui nécessite une clé composite dans keyColumns pour résoudre la clé d'attribut dupliqué
j'ai rencontré cette erreur plusieurs fois pour diverses raisons, mais j'ai récemment rencontré une cause plutôt obscure: la présence du caractère bêta ß dans une colonne de texte. Malgré le fait que les milliers de mots uniques dans la colonne ont utilisé un mélange de tous les codes ASCII obscurs sous le soleil, SSAS étouffé seulement pendant le traitement des valeurs de colonne qui ont inclus le symbole ß. Nulls, duplicates, trimming, etc. ont été systématiquement écartés. C'est dans toute la probabilité liée à insondable et la question non résolue discutée dans le MSDN fil SSAS 2012 erreur de clé en double avec le " ss " et "ß"
Aucun résolu pour moi. Ce qui a fonctionné est quelque chose de similaire à ce Qu'Eric W. a suggéré.
j'ai dû configurer plusieurs colonnes clés pour mes attributs. Par exemple, l'attribut "City" nécessite les colonnes clés "Country", "State", et "City".
plus d'info ici: https://www.mssqltips.com/sqlservertip/3271/sql-server-analysis-server-ssas-keycolumn-vs-namecolumn-vs-valuecolumn/