Błąd "Duplicate attribute key", gdy atrybut nie jest kluczem

Otrzymuję następujący błąd podczas przetwarzania wymiaru:

Błędy w silniku pamięci OLAP: duplikat klucza atrybutu został znalezione podczas przetwarzania: Table: 'dbo_Orders', Column: 'Project', Value: "Obsługa klienta". Atrybutem jest 'Project'.

'Project' jest atrybutem wymiaru 'Orders' , ale nie kluczem. Nigdzie nie wskazałem, że kolumna projektu jest kluczem! Powinienem mieć tyle duplikatów ile potrzeba, tak jak pole Imię.

Jestem nowy w Analysis Services project I naprawdę muszę zapomnieć o tym, że SSAS ciągle narzeka na zduplikowane wartości, kiedy powinno być idealnie OK, aby mieć zduplikowane wartości. Jestem pewien, że to musi być coś prostego, czego nie dostrzegam.

Edit: zdaję sobie sprawę, że można ustawić KeyDuplicate = ReportAndContinue/ReportAndStop i można również ustawić KeyColumns i NameColumns. Ale ten wieloetapowy proces wydaje się bardzo uciążliwy dla tego, co wydaje się być bardzo normalną operacją, jak dodawanie pól Address1, Address2, Address3, Firstname, Zipcode i innych, które normalnie są zduplikowane. Nie mogę uwierzyć, że ten uciążliwy proces musi być stosowany do wszystkich takich dziedzin?

Z góry dzięki.
 36
Author: Josien, 2011-08-18

15 answers

Jest to zwykle wynikiem posiadania zarówno spacji, jak i Null w tabeli/widoku źródłowym.

Zasadniczo SSAS robi to dla każdego atrybutu SELECT DISTINCT COALESCE (attr,") FROM SOURCE

Usługi analizy domyślnie konwertują wartości Null na spacje, co skutkuje duplikatami spacji wartości w wynikowym kanale-stąd błąd.

Zgadzam się, że to jest do bani i jest wielkim bólem dla nowych graczy.

Rozwiązanie: Usuń wszystkie null ze źródła danych, na przykład za pomocą ISNULL / Łączenie wszędzie lub filtrowanie wierszy zawierających null za pomocą klauzuli where, lub uruchamianie instrukcji update, aby zastąpić wszystkie null wartościami przed przetworzeniem sześcianu, itp.

 37
Author: WOPR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-11 23:22:18

Kliknij prawym przyciskiem myszy atrybut i wybierz "Właściwości". Znajdź "KeyColumn", który znajduje się w kategorii "źródło" w oknie Właściwości. Edytuj właściwość "KeyColumn", wyświetli przyjazne dla użytkownika okno.

Usuń atrybut z prawej (kolumny klawiszy) strony okna i zastąp go rzeczywistą kolumną id z lewej (Dostępne kolumny) strony.

Następnie Edytuj właściwość "NameColumn", pojawi się to samo okno. Przesunięcie kolumny atrybutów (rzeczywista dane, które chcesz wyświetlić) od lewej strony do prawej.

Testowane w VS 2010 Shell SSDT.

 12
Author: Eric W.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-13 20:52:49

Miałem ten sam problem i nie było pustych lub NULL wartości w atrybucie. Po analizie okazało się, że niektóre ciągi mają znak podziału linii na końcu. Tak więc, jeśli 2 wartości atrybutu są prawie takie same, ale jedna z nich ma znak podziału linii na końcu, a druga nie, to SSAS podnosi błąd "Duplicate attribute key".
Można to naprawić, usuwając znak łamania linii z atrybutu.
Utworzyłem kolumnę kalkulacyjną z następującym definicja:

REPLACE(REPLACE(ISNULL([AttributeColumn], ''), CHAR(13), ''), CHAR(10), '')

Użyłem tej obliczonej kolumny w sześcianie i błąd zniknął.

 7
Author: Pavel Sinkevich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-23 12:08:56

Po prostu zdarzyło mi się to dzisiaj i przez chwilę podrapałem się po głowie, ponieważ żadne z rozwiązań tutaj nie zadziałało. W końcu go rozwiązałem i pomyślałem, że dodam moje rozwiązanie dla każdego, kto googluje ten błąd i przybywa tutaj tak, jak ja.

W moim przypadku nie było to NULL i puste ciągi znaków, ponieważ miałem już wartość [NullProcessing] ustawioną na "UnknownMember". Raczej była to wartość [przycinanie], w moim przypadku została ustawiona na "prawo".

While I know how I solved(?) nie jestem w 100% pewien dlaczego, ale Zakładam, że gdy SQL Server robi to SELECT DISTINCT(col) FROM source i wartość [przycinanie] jest ustawiona jako taka, Analysis server później usuwa między innymi znaki tabulacji z końca (które RTRIM w SQL Server na przykład nie) i kończy się duplikatami.

Więc ustawienie [przycinanie] na "brak" może to rozwiązać, ponieważ tabulatory były danymi, których nie potrzebowałem (moje dane są przetwarzane/odczytywane/wprowadzane z zewnętrznych źródeł) po prostu wymieniłem tabulatory w kolumnie i po tym przetwarzanie kostki jest znowu w porządku.

 6
Author: Don,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-29 11:10:39

Podczas gdy moje inne rozwiązanie na tej stronie działa (i w zależności od sytuacji może być bardziej idealne), jest to alternatywne rozwiązanie:

Oto makieta części mojego błędu:

Column: 'attribute1_name', Value: 'Search String'

Szukałam szybko:

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')

Okazuje się, że były dwa różne wpisy dla dim_attribute1.name które pasują do tego:

  1. Ciąg Wyszukiwania
  2. ciąg wyszukiwania

Pierwsze rozwiązanie dzieli je bez problemu, więc jest to rozwiązanie robocze (plus premia za wykonanie). Jednak alternatywą (jeśli chcemy zachować wartości tekstowe jako klucze) jest zmiana zestawienia:

Key Columns → Column Name → Source → Collation

Aby włączyć "rozróżnianie wielkości liter".

Inne podobne problemy mogą być białe znaki spacji i inne łatwe do zauważenia subtelne zmiany w tekście.

 5
Author: David Halliday,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-02 14:39:07

Miałem dziś podobny problem (ten sam komunikat o błędzie), dla każdego kto się tu pojawi z tym samym problemem wrzuciłem kilka notek na moją wiki: http://www.david-halliday.co.uk/wiki/doku.php?id=databases:oracleselect_dates_for_ssas_include_hierarchy

Mój przypadek był SQL (uproszczony i przerobiony, aby bronić niewinnych):

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

Dziwną rzeczą było to, że wystąpił błąd w niektórych przypadkach dim_attribute1_name, ale nie dim_attribute2_name. Jednak ten szczególny case atrybut był dokładnie taki sam. W końcu rozwiązaniem było zmienić SQL na:

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

Następnie użyj w wymiarze (ukrywając ID na liście) wartości id dla klucza atrybutu i nazwy dla nazwy atrybutu. Nie widziałem tego wcześniej, ale z jakiegoś powodu stało się to tutaj. Uważam, że to rozwiązanie jest lepsze niż ustawienie kostki do przetwarzania ignorowania duplikatów kluczowych błędów.

Zakładam, że jeśli buduje się wymiar łączący tabele to zapewnij lepszą wydajność/niezawodność. Ale nie Cytuj mnie w tym.

 2
Author: David Halliday,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-02 12:37:48

Miałem ten sam problem i znalazłem obejście tego problemu.

Kliknij prawym przyciskiem myszy w "Cube" => "proces" => "zmień ustawienia" => "błędy klucza wymiarowego"

Active "Konfiguracja Błędów Użytkownika"

Ustaw "Ignoruj Błędy" dla tych czterech rozwijanej listy "Nie Znaleziono Klucza" "Duplikowany Klucz" "Klucz Null konwertowany na Nieznany" "Null key not allowed"

Problem z kluczami zostanie zignorowany.

 2
Author: Jeferson Tenorio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-08 09:47:14

Mam problem po tym, jak bawiłem się dodawaniem ID do kolumny klucza atrybutu. Od tego czasu usunąłem klucz, ale okazało się, że instrukcja select podczas przetwarzania nadal odnosi się do identyfikatora, dzięki czemu atrybut nie jest unikalny. Nie mogłem znaleźć sposobu na rozwiązanie tego za pomocą właściwości atrybutu, więc usunąłem cały wymiar i odtworzyłem go. To naprawiło problem.

 2
Author: Lesley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-03 12:18:45

Proszę przeczytać ten blog: znaleziono zduplikowany klucz atrybutu.... Spójrz na długie Wyjaśnienie powodu 1. To wyjaśni, dlaczego tak się dzieje.

Thanks guys

Ned

 1
Author: Ned,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-30 22:11:06

Rozwiązałem, określając zestawienie moich widoków na relacyjnej bazie danych w następujący sposób.

COALESCE([Descrição da Transação],") COLLATE Latin1_General_CI_AI

 0
Author: Vinicius Paluch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-06 19:18:13

Jeśli Twoje dane zawierają zarówno null, jak i "SSAS dają duplicate atrybut key, ponieważ uważa, że null jest". Nie musisz dotykać swoich danych, aby to naprawić. Możesz przejść do widoku źródła danych i dodać nazwane obliczenia z wyrażeniem COALESCE (mycolumn,"), a następnie użyć tego w swoim wymiarze zamiast oryginalnej kolumny. Naprawi to problem na poziomie widoku źródła danych, a wymiar będzie działał poprawnie.

 0
Author: Stefanos Demetriou,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-19 14:06:16

Lemme daje obejście, jeśli nadal chcesz iść do przodu z wdrażania & przeglądanie kostki . W oknie "process cube" zmień ustawienia błędu klucza Dimension na niestandardowe . Będziesz mógł bezproblemowo wdrożyć i przeglądać kostkę . kompromis polega na tym, że możesz nie uzyskać wyników, których się spodziewałeś.

 0
Author: Nim J,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-22 17:37:06

Jakiś czas, który wymaga klucza złożonego w keyColumns, aby rozwiązać klucz duplikatu

 0
Author: Abdeloihab Bourassi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-23 17:36:04

Napotkałem ten błąd wiele razy z różnych powodów, ale ostatnio napotkałem raczej niejasną przyczynę: obecność znaku Beta ß w kolumnie tekstowej. Pomimo faktu, że tysiące unikalnych słów w kolumnie używało hodgepodge każdego niejasnego kodu ASCII pod słońcem, SSAS dławił się tylko podczas przetwarzania wartości kolumn, które zawierały symbol ß. Nulle, duplikaty, przycinanie i tym podobne były systematycznie wykluczane. Jest to najprawdopodobniej związane z niezgłębionym i nierozwiązany problem omówiony w wątku MSDN SSAS 2012 duplicate key error with ' ss ' and ' ß ', w którym SSAS zinterpretował wartości ß jako' ss ' z jakiegoś niezrozumiałego powodu, nawet gdy ustawienia zestawiania były poprawne. W moim przypadku ustawienie kolacji we właściwościach kolumny SSAS tak, aby pasowała do kolacji kolumny źródłowej sql_latin1_general_cp1_cs_as po stronie relacyjnej nie naprawiło tego; musiałem również zmienić kolację dla całego serwera. To obejście może być bolesne w niektóre środowiska, w których inne kolumny zależą od różnych zestawień, ale ominęło to ten problem w moim przypadku i pozwoliło mi bez problemu przetworzyć wymiar. Mam nadzieję, że to pomoże następnej osobie potknąć się o to samo " mam cię."

 0
Author: SQLServerSteve,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-23 04:44:14

Żadne z powyższych nie rozwiązało mnie. To, co zadziałało, było podobne do tego, co zasugerował Eric W.

Musiałem ustawić wiele kolumn kluczowych dla moich atrybutów. Na przykład atrybut "City" potrzebuje kluczowych kolumn "Country", "State"i " City".

Więcej informacji tutaj: https://www.mssqltips.com/sqlservertip/3271/sql-server-analysis-server-ssas-keycolumn-vs-namecolumn-vs-valuecolumn/

 0
Author: MrM1k4d0,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-16 13:37:36