2011-08-17 55 views
30

Tôi nhận được lỗi sau khi xử lý một Kích thước:"chìa khóa thuộc tính trùng lặp" lỗi khi thuộc tính không phải là một chìa khóa

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

'dự án' là một thuộc tính của kích thước 'Đơn hàng', nhưng không phải là một chìa khóa . Không nơi nào tôi chỉ ra rằng cột Dự án là chìa khóa! Tôi có thể có nhiều bản sao nếu cần, giống như trường tên đầu tiên.

Tôi mới ở dự án Dịch vụ phân tích và thực sự cần vượt qua thực tế là SSAS liên tục phàn nàn về các giá trị trùng lặp khi hoàn toàn OK để có giá trị trùng lặp. Tôi chắc chắn điều này phải là một cái gì đó đơn giản mà tôi nhìn ra.

Chỉnh sửa: Tôi nhận thấy rằng có thể đặt KeyDuplicate = ReportAndContinue/ReportAndStop và cũng có thể đặt KeyColumnsNameColumns. Nhưng quá trình multistep này có vẻ rất cồng kềnh cho những gì có vẻ như là một hoạt động rất bình thường, như thêm Address1, Address2, Address3, Firstname, Zipcode, và các lĩnh vực khác mà thường được nhân đôi. Tôi không thể tin rằng quá trình rườm rà này cần phải được áp dụng cho tất cả các lĩnh vực như vậy?

Xin cảm ơn trước.

Trả lời

33

Đây thường là kết quả của việc có cả khoảng trắng và NULL trong bảng/chế độ xem nguồn.

Về cơ bản, SSAS thực hiện điều này cho tất cả các thuộc tính CHỌN liên hiệp DISTINCT (attr, '') TỪ NGUỒN

dịch vụ Phân tích theo mặc định chuyển đổi NULLs để khoảng trống, dẫn đến khoảng trống giá trị trùng lặp trong thức ăn dẫn - vì thế lỗi .

Tôi đồng ý với điều này và là nỗi đau lớn đối với người chơi mới.

Giải pháp: Xóa tất cả các giá trị rỗng khỏi nguồn dữ liệu, ví dụ bằng cách sử dụng ISNULL/COALESCE ở khắp mọi nơi hoặc lọc ra các hàng có chứa null sử dụng mệnh đề where hoặc chạy câu lệnh cập nhật để thay thế tất cả các giá trị bằng giá trị trước khi xử lý khối.

+0

Tôi bắt đầu nhận được hang của nó. Phải mất một chút luyện tập. Cảm ơn. – Dave

+0

Nó đã giúp tôi tìm thấy một chìa khóa nước ngoài bị hỏng - tôi được cho là đang chèn các giá trị rỗng - không phải là khoảng trống. – JumpingJezza

+2

Vậy giải pháp là gì? – NTDLS

2

tôi đã có một vấn đề tương tự hiện nay (cùng thông báo lỗi), vì lợi ích của bất cứ ai khác nhận được ở đây với cùng một vấn đề tôi đặt một số ghi chú trên wiki của tôi: http://www.david-halliday.co.uk/wiki/doku.php?id=databases:oracle&#select_dates_for_ssas_include_hierarchy

trường hợp của tôi là SQL (giản thể và reworded để bảo vệ người vô tội):

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 

Điều kỳ lạ là lỗi xảy ra đối với một số trường hợp dim_attribute1_name nhưng không phải là dim_attribute2_name. Tuy nhiên trường hợp đặc biệt này thuộc tính giống hệt nhau. Cuối cùng, giải pháp là thay đổi SQL thành:

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 

Sau đó sử dụng trong thứ nguyên (ẩn ID trong danh sách) giá trị id cho thuộc tính và tên cho tên thuộc tính . Tôi chưa từng thấy điều này trước đây nhưng vì một lý do nào đó nó đã xảy ra ở đây. Giải pháp này tôi tin là tốt hơn so với thiết lập các khối lập phương để xử lý bỏ qua các lỗi chính trùng lặp.

Tôi giả sử rằng nếu một người đang xây dựng thứ nguyên tham gia các bảng, điều này sẽ mang lại hiệu suất/độ tin cậy tốt hơn. Nhưng đừng nói với tôi về điều đó.

+0

Cám ơn góp ý của bạn. Đã một thời gian kể từ khi làm việc trong dự án này, nhưng lần sau tôi sẽ thử kỹ thuật của bạn. – Dave

4

Trong khi giải pháp khác của tôi trên trang này hoạt động (và tùy thuộc vào tình huống có thể là lý tưởng hơn), đây là một giải pháp thay thế:

Đây là một mô hình lên một phần lỗi của tôi:

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

tôi đã làm một tìm kiếm nhanh cho:

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

Nó chỉ ra rằng đã có hai mục khác nhau cho dim_attribute1.name mà phù hợp này:

  1. Tìm kiếm Chuỗi
  2. chuỗi tìm kiếm

Các giải pháp đầu tiên chia chúng mà không vấn đề, vì vậy nó là một giải pháp làm việc (cộng với tiền thưởng hiệu suất). Tuy nhiên, một thay thế (nếu một người muốn giữ các giá trị văn bản dưới dạng khóa) là thay đổi Bản sao:

Key Columns → Column Name → Source → Collation 

Để bao gồm 'phân biệt chữ hoa chữ thường'.

Các sự cố tương tự khác có thể là ký tự khoảng trắng và không dễ nhận ra các thay đổi nhỏ trong văn bản.

+0

Điểm cuối cùng của ký tự khoảng trắng là vấn đề đối với tôi. Tôi đã phải nối một ống để kết quả "mô tả" text để thấy rằng đã có một vài không gian thêm ... nhiều hơn một kết quả của một bảng thiết kế kém. – scrawny

1

Tôi đã gặp vấn đề tương tự và tôi đã tìm thấy giải pháp thay thế cho nó.

Right Click vào "Cube" => "Process" => "Change Settings" => "Dimension lỗi Key"

hoạt động "người dùng tùy chỉnh Lỗi Configuration"

Set "Bỏ qua lỗi" cho việc này bốn danh sách "Key Not Found" "Nhân đôi Key" "chìa khóa Null chuyển đổi sang không rõ" "chìa khóa Null không được phép"

vấn đề với các phím sẽ bị bỏ qua thả xuống.

13

Nhấp chuột phải vào thuộc tính và chọn "Thuộc tính". Tìm "KeyColumn" nằm trong danh mục "Nguồn" trong Cửa sổ thuộc tính. Chỉnh sửa thuộc tính "KeyColumn", nó sẽ hiển thị một cửa sổ thân thiện với người dùng.

Xóa thuộc tính từ bên phải (Cột chính) bên cửa sổ và thay thế nó bằng cột id thực tế từ bên trái (Cột có sẵn).

Sau đó, chỉnh sửa thuộc tính "Tên cột", cùng một cửa sổ sẽ xuất hiện. Di chuyển cột thuộc tính (dữ liệu thực tế bạn muốn hiển thị) từ bên trái sang phải.

Đã kiểm tra trong VS 2010 Shell SSDT.

+2

Điều này sẽ dẫn đến trùng lặp hiển thị cho thuộc tính đó. Ví dụ cho một chiều hướng then chốt "Id" với các giá trị 1,2,3,4,5 nhưng một thuộc tính với các giá trị Blue và Green, thuộc tính có thể hiển thị màu xanh, màu xanh, màu xanh, màu xanh lá cây, xanh –

+0

này đã thoát khỏi những lỗi nhưng cũng giống như Aaron nói kết quả trùng lặp. – speedinfusion

0

Tôi đã giải quyết bằng cách chỉ định COLLATION trên các chế độ xem của tôi trên cơ sở dữ liệu quan hệ như sau.

liên hiệp ([Miêu tả da Transação], '') đối chiếu Latin1_General_CI_AI

0

Nếu dữ liệu của bạn chứa cả NULLs và '' SSAS đưa ra chìa khóa thuộc tính trùng lặp, bởi vì nó coi NULLs phải được ''. Bạn không cần phải chạm vào dữ liệu của mình để sửa lỗi này.Bạn có thể chuyển đến chế độ xem nguồn dữ liệu của mình và thêm phép tính được đặt tên có biểu thức COALESCE (cột màu, ''), sau đó sử dụng tính năng đó trong thứ nguyên của bạn thay vì cột gốc. Điều này sẽ khắc phục sự cố ở cấp chế độ xem nguồn dữ liệu và thứ nguyên sẽ xử lý tốt.

0

Lemme cung cấp cho bạn một cách giải quyết nếu bạn vẫn muốn tiếp tục với việc triển khai & duyệt khối. Trong cửa sổ 'khối xử lý', thay đổi cài đặt lỗi khóa thứ nguyên thành tùy chỉnh. Bạn có thể triển khai liền mạch & duyệt khối lập phương. thương mại-off ở đây là bạn có thể không nhận được kết quả mà bạn mong đợi.

0

một số thời điểm đó cần chìa khóa composite trong keyColumns để giải quyết trùng lặp thuộc tính quan trọng

4

Chỉ có điều này xảy ra với tôi ngày hôm nay và gãi đầu của tôi trong một thời gian như không ai trong số các giải pháp ở đây làm việc. Cuối cùng giải quyết nó và nghĩ rằng tôi muốn thêm giải pháp của tôi cho bất cứ ai khác googling lỗi này và đến đây cũng giống như tôi đã làm.

Trong trường hợp của tôi, nó không phải là NULL và các chuỗi trống khi tôi có giá trị [NullProcessing] đã được đặt thành "UnknownMember". Thay vào đó là giá trị [Cắt tỉa], trong trường hợp của tôi nó được đặt thành "Đúng".

Trong khi tôi biết cách tôi giải quyết (?), Tôi không 100% là tại sao, nhưng tôi giả sử khi SQL Server thực hiện SELECT DISTINCT(col) FROM source và giá trị [Cắt tỉa] được đặt như vậy, máy chủ phân tích sau đó sẽ loại bỏ các ký tự tab từ cuối (ví dụ: RTRIM trong SQL Server) và kết thúc bằng các bản sao.

Vì vậy, đặt [Cắt] thành "Không" có thể giải quyết, vì các tab là dữ liệu tôi không cần (dữ liệu của tôi được phân tích cú pháp/đọc/nhập từ nguồn bên ngoài), tôi chỉ cần thay thế các tab trong cột và sau khi xử lý của khối lập phương là tốt một lần nữa.

+0

2 năm sau và vẫn hữu ích. –

2

Tôi gặp sự cố sau khi tôi đã chơi xung quanh với việc thêm ID vào cột khóa của thuộc tính. Tôi đã loại bỏ khóa nhưng thấy rằng câu lệnh chọn trong quá trình xử lý vẫn đề cập đến ID, làm cho thuộc tính không phải là duy nhất. Tôi không thể tìm cách giải quyết vấn đề này thông qua thuộc tính thuộc tính, vì vậy tôi đã xóa toàn bộ Tham số và tạo lại nó. Điều này đã khắc phục được sự cố.

2

Tôi gặp vấn đề tương tự và không có giá trị trống hoặc NULL trong thuộc tính. Sau một số phân tích, tôi thấy rằng một số chuỗi có ký tự ngắt dòng ở cuối. Vì vậy, nếu 2 giá trị của thuộc tính gần như giống nhau, nhưng một trong số chúng có ký tự ngắt dòng ở cuối và thuộc tính kia thì không, thì SSAS tăng lỗi “Khóa thuộc tính trùng lặp”.
Có thể khắc phục bằng cách xóa ký tự ngắt dòng khỏi thuộc tính.
Tôi tạo ra cột tính toán với định nghĩa sau đây:

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

tôi đã sử dụng cột tính toán này trong khối, và lỗi biến mất.

+1

Tôi cũng có cùng CHAR (9) nguồn cấp dữ liệu tab –

Các vấn đề liên quan