2011-08-17 153 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)的标签饲料相同 –