ssas - ssrs - Error "duplicar clave de atributo" cuando el atributo no es una clave
ssas tutorial (15)
Recibo el siguiente error al procesar una dimensión:
Errores en el motor de almacenamiento OLAP: se ha encontrado una clave de atributo duplicada al procesar: Tabla: ''dbo_Orders'', Column: ''Project'', Value: ''customer service stuff''. El atributo es ''Proyecto''.
''Proyecto'' es un atributo de la dimensión ''Pedidos'', pero no una clave. ¡En ninguna parte indiqué que la columna Proyecto es una clave! Debería poder tener tantos duplicados como sea necesario, como un campo de primer nombre.
Soy nuevo en el proyecto de Analysis Services y realmente necesito pasar el hecho de que SSAS se queja constantemente de valores duplicados cuando debería estar perfectamente bien tener valores duplicados. Estoy seguro de que esto debe ser algo simple que estoy pasando por alto.
Editar: me doy cuenta de que es posible configurar KeyDuplicate = ReportAndContinue/ReportAndStop
y también es posible establecer KeyColumns
y NameColumns
. Pero este proceso de varios pasos parece muy engorroso para lo que parecería ser una operación muy normal, como agregar Dirección1, Dirección2, Dirección3, Nombre, Código postal y otros campos que normalmente están duplicados. No puedo creer que este proceso engorroso deba aplicarse a todos esos campos.
Gracias por adelantado.
Acabo de pasarme esto hoy y me rasqué la cabeza por un tiempo ya que ninguna de las soluciones aquí funcionaba. Finalmente lo resolví y pensé en agregar mi solución para cualquier otra persona que buscara este error y llegue aquí tal como lo hice.
En mi caso, no era NULL
y cadenas en blanco ya que tenía el valor [NullProcessing] ya establecido en "UnknownMember". Más bien fue el valor de [Recorte], en mi caso se configuró en "Derecha".
Aunque sé cómo lo resolví (?), No estoy al 100% en cuanto a por qué, pero supongo que cuando SQL Server selecciona SELECT DISTINCT(col) FROM source
y el valor [Trimming] se establece como tal, Analysis Server más tarde elimina entre otras cosas tab chars desde el final (que RTRIM
en SQL Server, por ejemplo, no) y termina con duplicados.
Por lo tanto, ajustar [Recortar] a "Ninguno" podría resolverlo, ya que las pestañas eran datos que no necesitaba (mis datos son analizados / leídos / ingresados de fuentes externas) Simplemente reemplacé las pestañas en la columna y luego de ese procesamiento del cubo bien otra vez.
Déjame darte una solución alternativa si aún deseas seguir adelante con la implementación y la exploración de cubos. En la ventana ''cubo de proceso'', cambie la configuración de error de clave de dimensión a personalizada. Podrías desplegar y explorar el cubo sin inconvenientes. la compensación aquí es que puede que no obtenga los resultados que esperaba.
Esto suele ser el resultado de tener tanto espacios en blanco como NULL en la tabla / vista fuente.
Esencialmente, SSAS hace esto para cada atributo SELECT DISTINCT COALESCE (attr, '''') FROM SOURCE
Los servicios de análisis de forma predeterminada convierten los NULL en espacios en blanco, lo que da como resultado espacios en blanco duplicados en el feed resultante, de ahí el error.
Estoy de acuerdo en que esto es una mierda y es un gran dolor para los nuevos jugadores.
Solución: elimine todos los valores nulos de la fuente de datos, por ejemplo, utilizando ISNULL / COALESCE en todas partes o filtrando filas que contengan null usando la cláusula where o ejecutando la declaración de actualización para reemplazar todos los nulos con valores antes de procesar el cubo, etc.
Haga clic derecho en el atributo y seleccione "Propiedades". Busque "KeyColumn" que se encuentra en la categoría "Fuente" dentro de la Ventana de Propiedades. Edite la propiedad "KeyColumn", se mostrará una ventana fácil de usar.
Elimine el atributo del lado derecho (Columnas clave) de la ventana y reemplácelo con la columna de identificación real del lado izquierdo (Columnas disponibles).
Luego edite la propiedad "NameColumn", aparecerá la misma ventana. Mueva la columna de atributos (los datos reales que desea visualizar) del lado izquierdo al derecho.
Probado en VS 2010 Shell SSDT.
Hoy tuve un problema similar (el mismo mensaje de error), por el bien de cualquiera que llegue aquí con el mismo problema, coloqué algunas notas en mi wiki: http://www.david-halliday.co.uk/wiki/doku.php?id=databases:oracle&#select_dates_for_ssas_include_hierarchy
Mi caso fue SQL (simplificado y redactado de nuevo para defender a los inocentes):
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
Lo extraño fue que el error estaba ocurriendo para algunos casos de dim_attribute1_name pero no de dim_attribute2_name. Sin embargo, este caso en particular, el atributo era exactamente el mismo. Al final, la solución fue cambiar el SQL a:
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
A continuación, utilice en la dimensión (que oculta las ID en la lista) el valor de id para la clave del atributo y el nombre para el nombre del atributo. No he visto esto antes, pero por alguna razón sucedió aquí. Creo que esta solución es mejor que configurar el cubo para que procese ignorando los errores clave duplicados.
Supongo que si uno está construyendo una dimensión uniendo tablas esto le dará un mejor rendimiento / confiabilidad. Pero no me cites sobre eso.
Lea este blog: se ha encontrado una clave de atributo duplicada ... Mira la larga explicación de la razón 1. Explicará por qué exactamente esto está sucediendo.
Gracias chicos
Ned
Lo resolví especificando la COLLACIÓN en mis puntos de vista en la base de datos relacional de la siguiente manera.
COALESCE ([Descripción de la transacción], '''') COLLATE Latin1_General_CI_AI
Me he encontrado con este error muchas veces por varias razones, pero recientemente encontré una causa bastante oscura: la presencia del carácter beta ß en una columna de texto. A pesar del hecho de que las miles de palabras únicas en la columna usaban una mezcolanza de todos los códigos ASCII oscuros bajo el sol, SSAS se bloqueaba solo al procesar valores de columna que incluían el símbolo ß. Nulos, duplicados, recorte y similares fueron sistemáticamente descartados. Esto con toda probabilidad se relaciona con un problema insondable y no resuelto discutido en MSDN thread SSAS 2012 error de clave duplicada con ''ss'' y ''ß'' , en el que SSAS interpretó valores ß como ''ss'' por alguna razón inescrutable, incluso cuando la configuración de intercalación fueron correctos En mi caso, establecer la intercalación en las propiedades de la columna SSAS para que coincida con la intercalación de SQL_Latin1_General_CP1_CS_AS de la columna fuente en el lado relacional no solucionó esto; También tuve que cambiar la clasificación para todo el servidor. Esta solución alternativa puede ser dolorosa en ciertos entornos donde otras columnas dependen de diferentes intercalaciones, pero eludió este problema en mi caso y me permitió procesar la dimensión sin problemas. Espero que esto ayude a la siguiente persona a tropezar con el mismo "gotcha".
Mientras que mi otra solución en esta página funciona (y dependiendo de las situaciones podría ser más ideal), esta es una solución alternativa:
Aquí hay un simulacro de parte de mi error:
Column: ''attribute1_name'', Value: ''Search String''
Hice una búsqueda rápida para:
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'')
Resultó que había dos entradas diferentes para dim_attribute1.name que coincidía con esto:
- Cadena de búsqueda
- cadena de búsqueda
La primera solución los divide sin problemas, por lo que es una solución de trabajo (más la bonificación de rendimiento). Sin embargo, una alternativa (si uno quiere mantener los valores de texto como claves) es cambiar la intercalación:
Key Columns → Column Name → Source → Collation
Para incluir ''distinción entre mayúsculas y minúsculas''.
Otros problemas similares pueden ser los espacios en blanco y otros fáciles de detectar cambios sutiles en el texto.
Ninguno de los anteriores resolvió para mí. Lo que funcionó fue algo similar a lo que sugirió Eric W.
Tuve que configurar varias columnas clave para mis atributos. Por ejemplo, el atributo "Ciudad" necesita las columnas clave "País", "Estado" y "Ciudad".
Más información aquí: https://www.mssqltips.com/sqlservertip/3271/sql-server-analysis-server-ssas-keycolumn-vs-namecolumn-vs-valuecolumn/
Obtuve el problema después de haber estado jugando con la adición de una identificación en la columna clave de un atributo. Desde entonces, eliminé la clave, pero descubrí que la declaración de selección durante el procesamiento todavía se refería a la ID, lo que hace que el atributo no sea único. No pude encontrar una forma de resolver esto a través de las propiedades de los atributos, así que eliminé toda la Dimensión y la recreé. Esto solucionó el problema.
Si sus datos contienen tanto NULL como '''' SSAS, proporcione una clave de atributo duplicada, porque considera que los NULL son ''''. No tiene que tocar sus datos para arreglar esto. Puede ir a la vista de su fuente de datos y agregar un cálculo con nombre con la expresión COALESCE (mycolumn, ''''), luego usar eso en su dimensión en lugar de la columna original. Esto solucionará el problema en el nivel de vista de fuente de datos y la dimensión se procesará correctamente.
Tuve el mismo problema y encontré una solución para ello.
Haga clic con el botón derecho en "Cubo" => "Proceso" => "Cambiar configuración" => "Errores de clave de dimensión"
Activa "Configuración de error personalizado del usuario"
Establezca "Ignorar errores" para esta lista desplegable de cuatro "Clave no encontrada" "Clave duplicada" "Clave nula convertida a desconocida" "Clave nula no permitida"
El problema con las llaves será ignorado.
Tuve el mismo problema, y no había valores en blanco ni NULL en el atributo. Después de algunos análisis, descubrí que algunas cadenas tenían un carácter de salto de línea al final. Entonces, si 2 valores del atributo son casi iguales, pero uno de ellos tiene un carácter de salto de línea al final y el otro no, entonces SSAS genera el error de "Tecla de atributo duplicado".
Se puede solucionar eliminando el carácter de salto de línea del atributo.
Creé una columna calculada con la siguiente definición:
REPLACE(REPLACE(ISNULL([AttributeColumn], ''''), CHAR(13), ''''), CHAR(10), '''')
Usé esta columna calculada en el cubo, y el error desapareció.
un tiempo que necesita clave compuesta en keyColumns para resolver la clave de atributo duplicado