2011-08-17 151 views
30

處理維度時,我收到以下錯誤:「重複屬性鍵」的錯誤時,屬性不是關鍵

Errors in the OLAP storage engine: A duplicate attribute key has been found when processing: Table: 'dbo_Orders', Column: 'Project', Value: 'client service stuff'. The attribute is 'Project'.

「項目」是「訂單」維度的屬性,但不是關鍵。我沒有任何地方表明項目欄是關鍵!根據需要,我應該能夠擁有儘可能多的重複項目,就像名字字段一樣。

我是分析服務項目的新成員,真的需要擺脫這樣一個事實,即當應用程序完全可以重複使用值時,SSAS會不斷抱怨重複值。我確信這一定是我忽略的簡單事情。

編輯:我意識到可以設置KeyDuplicate = ReportAndContinue/ReportAndStop,也可以設置KeyColumnsNameColumns。但是這個多步驟過程似乎非常麻煩,看起來應該是一個非常正常的操作,例如添加Address1,Address2,Address3,Firstname,Zipcode和其他通常是重複的字段。我不敢相信這個繁瑣的過程需要應用於所有這些領域?

在此先感謝。

回答

33

這通常是在源表/視圖中同時具有空白和空白的結果。

從本質上講,SSAS默認情況下做到這一點每個屬性 SELECT DISTINCT COALESCE(ATTR,「」)從源代碼

分析服務轉換的NULL爲空格,導致重複值坯導致飼料中 - 因此錯誤。

我認爲這很糟糕,並且是新玩家的一大痛苦。

解決方案:從數據源中刪除所有空值,例如在任何地方使用ISNULL/COALESCE,或者在處理多維數據集之前使用where子句過濾掉包含null的行,或者運行update語句以替換所有具有值的空值等。

+0

我已經開始掌握它了。這需要一點練習。謝謝。 – Dave

+0

它幫助我找到一個破損的外鍵 - 我應該插入空值 - 不是空白。 – JumpingJezza

+2

那麼最新的解決方案? – NTDLS

2

我今天(同樣的錯誤消息)也有類似的問題,爲別人同樣的問題讓這裏的緣故,我把一些注意事項對我的wiki:http://www.david-halliday.co.uk/wiki/doku.php?id=databases:oracle&#select_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 

然後在尺寸使用(隱藏的ID列表)的id值的屬性爲屬性的名稱鍵和名稱。我之前沒有看到過,但由於某種原因,它發生在這裏。我相信這個解決方案比設置多維數據集處理忽略重複鍵錯誤要好。

我認爲如果建立一個連接表的維度,這將會提供更好的性能/可靠性。但請不要在此引用我的意見。

+0

感謝您的建議。自從這個項目開始工作已經有一段時間了,但下次我會嘗試一下你的技術。 – Dave

4

雖然我此頁面上的其他解決方案的工作(並視情況可能會更理想的),這是一個替代的解決方案:

這是一個模擬了我的錯誤的一部分:

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.name它符合這個:

  1. 搜索字符串
  2. 搜索字符串

第一個解決方案拆分他們沒有問題,所以它是一個可行的解決方案(加績效獎金)。但是替代(如果想保持文本值作爲密鑰)是改變歸類:

Key Columns → Column Name → Source → Collation 

要包括「區分大小寫」。

其他類似的問題可以是空白字符和其他很容易在文本中發現微妙的變化。

+0

您對空白字符的最後一點是我的問題。我不得不連接一個管道到產生的「描述」文本,看看有幾個空間增加了...更多的設計不佳的表結果。 – scrawny

1

我有同樣的問題,我找到了解決辦法。

右鍵單擊「魔方」 =>「程序」 =>「更改設置」 =>「維鍵錯誤」

活動「用戶自定義錯誤配置」

集「忽略錯誤」此四個分下拉列表 「鍵未找到」 「複製的關鍵」 「空鍵轉換爲未知」 「空鍵不允許」

的帶有按鍵的問題將被忽略。

13

右鍵單擊屬性並選擇「屬性」。找到屬於「屬性」窗口中「源」類別下的「KeyColumn」。編輯「KeyColumn」屬性,它將顯示一個用戶友好的窗口。

刪除窗口右側(Key Columns)側的屬性,並用左側(Available Columns)一側的實際id列替換它。

然後編輯「NameColumn」屬性,將出現相同的窗口。將屬性列(您要顯示的實際數據)從左側移到右側。

在VS 2010 Shell SSDT中測試。

+2

這將導致重複顯示該屬性。例如,對於具有值1,2,3,4,5的維度鍵「Id」,但是具有值Blue和Green的屬性,該屬性可以顯示藍色,藍色,藍色,綠色,綠色 –

+0

這樣就消除了錯誤,但卻像亞倫說造成了重複。 – speedinfusion

0

我通過在關係數據庫的視圖上指定COLLATION來解決問題,如下所示。

COALESCE([Descrição達Transação], '')COLLATE Latin1_General_CI_AI

0

如果您的數據同時包含空值和'SSAS給出了重複屬性的關鍵,因爲它認爲空值是 ''。您無需觸摸數據即可解決此問題。您可以轉到數據源視圖並使用表達式COALESCE(mycolumn,'')添加命名計算,然後將其用於維度而不是原始列。這將解決數據源視圖級別的問題,並且維度可以正常處理。

0

還是讓我給你一個解決辦法,如果你仍然想繼續與部署&立方體瀏覽。 在'流程立方體'窗口下,將維度關鍵錯誤設置更改爲自定義。 您將能夠無縫地部署&瀏覽多維數據集。 此處的權衡是,您可能無法獲得您所期望的結果。

0

一段時間,需要在KeyColumns內複合鍵來解決重複的屬性鍵

4

剛剛有了今天這發生在我身上,劃傷了我的頭一會兒因爲沒有一個解決方案在這裏工作。最後解決了這個問題,並認爲我會爲其他任何人使用googling這個錯誤添加我的解決方案,並像我一樣到達這裏。

對我來說,這不是NULL和空白字符串作爲我有[NullProcessing]值已經被設置爲「UnknownMember」。相反,它是[修剪]值,在我的情況下它被設置爲「正確」。雖然我知道我如何解決(?)它,但我並不是100%,但我假設當SQL Server執行它時,SELECT DISTINCT(col) FROM source和[Trimming]值被設置爲這樣,分析服務器稍後會刪除其他內容(例如SQL Server中的RTRIM沒有),並以重複結束。

因此,將[Trimming]設置爲「None」可能會解決它,因爲選項卡是我不需要的數據(我的數據被解析/讀取/從外部源輸入)我只是替換列中的選項卡,的立方體再次罰款。

+0

2年後,仍然有幫助。 –

2

我得到了我一直在玩弄添加到ID屬性的鍵列後的問題。之後,我刪除了密鑰,但發現處理過程中的select語句仍然指向ID,從而使該屬性不唯一。我找不到通過屬性屬性解決此問題的方法,因此我刪除了整個維度並重新創建了它。這解決了這個問題。

2

我有同樣的問題,並且屬性中沒有空值或NULL值。 經過一番分析,我發現一些字符串在結尾處有換行符。因此,如果屬性的2個值幾乎相同,但其中一個最後有換行符,另一個不是,則SSAS會引發「重複屬性鍵」錯誤。
可以通過從屬性中刪除換行符來修復它。
我創建計算列,定義如下:

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

我的立方體使用該計算列,並且錯誤消失。

+1

我也有與CHAR(9)的標籤飼料相同 –