Ошибка "дублировать ключ атрибута", когда атрибут не является ключом
Я получаю следующую ошибку при обработке измерения:
ошибки в механизме хранения OLAP: дубликат ключа атрибута был найдено при обработке: таблица: 'dbo_Orders', столбец: 'Project', значение: клиент обслуживающего персонала'. Атрибут "проект".
'Project 'является атрибутом измерения' Orders', но не ключом. Нигде я не указывал, что столбец Project является ключевым! У меня должно быть столько дубликатов, сколько ... необходимо, как и поле имени.
Я новичок в проекте служб Analysis Services и действительно должен пройти мимо того факта, что SSAS постоянно жалуется на повторяющиеся значения, когда должно быть совершенно нормально иметь повторяющиеся значения. Я уверен, что это должно быть что-то простое, что я упускаю из виду.
Edit: я понимаю, что можно установить KeyDuplicate = ReportAndContinue/ReportAndStop и также можно установить KeyColumns и NameColumns. Но этот многоступенчатый процесс кажется очень громоздким для того, что бы seem должна быть очень нормальной операцией, такой как добавление Address1, Address2, Address3, Firstname, Zipcode и других полей, которые обычно дублируются. Я не могу поверить, что этот громоздкий процесс нужно применять ко всем таким полям?
спасибо заранее.
15 ответов
обычно это результат наличия как пробелов, так и нулей в исходной таблице/представлении.
по существу, SSAS делает это для каждого атрибута Выберите DISTINCT COALESCE (attr,") из источника
службы Analysis services по умолчанию преобразуют нули в пробелы, что приводит к дублированию пробелов значений в результирующем канале - отсюда и ошибка.
Я согласен, что это отстой и большая боль для новых игроков.
решение : удалить все нули из источника данных, для пример использования ISNULL / COALESCE everywhere или фильтрации строк, содержащих null, с помощью предложения where или выполнения инструкции update для замены всех нулей значениями перед обработкой Куба и т. д.
щелкните правой кнопкой мыши атрибут и выберите "Свойства". Найдите "KeyColumn", который находится в категории" Source " в окне свойств. Отредактируйте свойство" KeyColumn", оно отобразит удобное для пользователя окно.
удалите атрибут с правой (ключевые столбцы) стороны окна и замените его фактическим столбцом id с левой (доступные столбцы) стороны.
затем отредактируйте свойство "NameColumn", появится то же окно. Переместить атрибут столбец (фактические данные, которые вы хотите отобразить) слева направо.
протестировано в VS 2010 Shell SSDT.
У меня была та же проблема, и в атрибуте не было пустых или нулевых значений.
После некоторого анализа я обнаружил, что некоторые строки имеют символ разрыва строки на конце. Таким образом, если 2 значения атрибута почти одинаковы, но один из них имеет символ разрыва строки в конце, а другой нет, то SSAS вызывает ошибку "дублировать ключ атрибута".
Его можно исправить, удалив символ разрыва строки из атрибута.
Я создал вычисляемый столбец с определение:
REPLACE(REPLACE(ISNULL([AttributeColumn], ''), CHAR(13), ''), CHAR(10), '')
я использовал этот вычисляемый столбец в кубе, и ошибка исчезла.
просто это случилось со мной сегодня и почесал голову некоторое время, поскольку ни одно из решений здесь не работало. Наконец решил это и подумал, что я добавлю свое решение для всех, кто гуглит эту ошибку и прибывает сюда так же, как и я.
В моем случае это не было NULL и пустые строки, поскольку у меня было значение [NullProcessing], уже установленное в "UnknownMember". Скорее это было значение [обрезки], в моем случае оно было установлено в "Right".
пока я знаю, как я решил(?) это не я 100% о том, почему, но я предполагаю, когда SQL Server делает это SELECT DISTINCT(col) FROM source и значение [Trimming] устанавливается как таковое, Analysis server позже удаляет, среди прочего, символы табуляции с конца (которые RTRIM в SQL Server, например, нет) и заканчивается дубликатами.
таким образом, установка [обрезка] на "нет" может решить эту проблему, так как вкладки были данными, которые мне не нужны (мои данные анализируются / читаются / вводятся из внешних источников), я просто заменил вкладки в столбце, и после этого обработка Куба снова хорошо.
хотя мое другое решение на этой странице работает (и в зависимости от ситуаций может быть более идеальным), это альтернативное решение:
вот макет части моей ошибки:
Column: 'attribute1_name', Value: 'Search String'
Я сделал быстрый поиск для:
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')
получается, что есть две разные записи dim_attribute1.название которой соответствует это:
- Поиск Строки
- поиск строки
первое решение разделить их без проблем, поэтому это рабочее решение (плюс бонус за производительность). Однако альтернативой (если вы хотите сохранить текстовые значения в качестве ключей) является изменение параметров сортировки:
Key Columns → Column Name → Source → Collation
включить "чувствительный к регистру".
другие подобные проблемы могут быть пробелами и другими легко не заметить тонкие изменения в тексте.
у меня была аналогичная проблема сегодня (то же сообщение об ошибке), ради кого-то еще, кто попал сюда с той же проблемой, я поместил некоторые заметки на мою Вики: http://www.david-halliday.co.uk/wiki/doku.php?id=databases:oracleselect_dates_for_ssas_include_hierarchy
мой случай был SQL (упрощенный и переформулированный для защиты невинных):
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
странная вещь была ошибка происходила для некоторых случаев dim_attribute1_name, но не dim_attribute2_name. Однако в этом конкретном случае атрибут был точно таким же. В конце концов решение состояло в том, чтобы изменить SQL на:
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
затем используйте в измерении (скрывая идентификаторы в списке) значение идентификатора для ключа атрибута и имя для имени атрибута. Я не видел этого раньше, но по какой-то причине это произошло здесь. Это решение, я считаю, лучше, чем установка Куба для обработки игнорирования повторяющихся ошибок ключа.
Я полагаю, что если один строит таблицы соединения размеров это даст лучшую производительность / надежность. Но не цитируй меня.
У меня была такая же проблема и я нашел решение для этого.
щелкните правой кнопкой мыши в "Cube" = > "Process" = > "Change Settings" = > "Dimension Key Errors"
Активна "Нестандартная" Конфигурация Пользователя "Ошибка"
установить "игнорировать ошибки" для этого четырех выпадающего списка "Ключ Не Найден" "дублирующийся ключ" "Нулевой ключ, преобразованный в неизвестный" "Null ключ не допускается"
проблема с ключами будет проигнорирована.
Я получил проблему после того, как я играл с добавлением идентификатора в ключевой столбец атрибута. С тех пор я удалил ключ, но обнаружил, что оператор select во время обработки все еще ссылается на идентификатор, делая атрибут не уникальным. Я не мог найти способ решить это с помощью свойств атрибута, поэтому я удалил все измерение и воссоздал его. Это исправило проблему.
пожалуйста, читайте этот блог: найден дубликат ключа атрибута.... Посмотрите на длинное объяснение причины 1. Это объяснит, почему именно это происходит.
Спасибо, ребята!--3-->
Нед
Я решил, указав параметры сортировки моих представлений о реляционной базе данных следующим образом.
COALESCE ([Descrição da Transação],") COLLATE Latin1_General_CI_AI
Если ваши данные содержат как нули, так и "SSAS выдают дубликат ключа атрибута, потому что он считает нули". Вам не нужно прикасаться к своим данным, чтобы исправить это. Вы можете перейти к представлению источника данных и добавить именованный расчет с выражением COALESCE(mycolumn, "), а затем использовать его в измерении вместо исходного столбца. Это устранит проблему на уровне представления источника данных, и измерение будет работать нормально.
позвольте мне дать вам обходной путь, если вы все еще хотите продолжить развертывание и просмотр Куба . В окне "куб процесса" измените параметры ошибки ключа измерения на пользовательские . Вы сможете легко развернуть и просмотреть куб. компромисс здесь заключается в том, что вы можете не получить ожидаемых результатов.
Я сталкивался с этой ошибкой много раз по разным причинам, но недавно столкнулся с довольно неясной причиной: наличием символа beta ß в текстовом столбце. Несмотря на то, что тысячи уникальных слов в столбце использовали мешанину каждого непонятного кода ASCII под солнцем, SSAS задыхался только при обработке значений столбца, которые включали символ ß. Нули, дубликаты, обрезки и тому подобное систематически исключались. Это, по всей вероятности, связано с непостижимый и нерешенный вопрос, обсуждаемый в MSDN поток SSAS 2012 дубликат ключа ошибка с "ss" и "ß", в котором SSAS интерпретировал значения ß как " ss " по какой-то непостижимой причине, даже если параметры сортировки были правильными. В моем случае установка параметров сортировки в свойствах столбца SSAS в соответствии с параметрами сортировки исходного столбца SQL_Latin1_General_CP1_CS_AS на реляционной стороне не исправила это; мне также пришлось изменить параметры сортировки для всего сервера. Это временное решение может быть болезненно в некоторых средах, где другие столбцы зависят от разных параметров сортировки, но это обошло эту проблему в моем случае и позволило мне обрабатывать измерение без заминки. Надеюсь, это поможет следующему человеку наткнуться на то же самое "gotcha."
ничего из вышеперечисленного не решено для меня. Сработало нечто похожее на то, что предложил Эрик У.
Мне пришлось настроить несколько ключевых столбцов для моих атрибутов. Например, для атрибута " город "нужны ключевые столбцы" страна"," государство "и"город".
дополнительная информация здесь: https://www.mssqltips.com/sqlservertip/3271/sql-server-analysis-server-ssas-keycolumn-vs-namecolumn-vs-valuecolumn/