Ssas &引用;重复属性键“;属性不是键时出错

Ssas &引用;重复属性键“;属性不是键时出错,ssas,Ssas,处理维度时,我遇到以下错误: OLAP存储引擎中的错误:已创建重复的属性键 处理时找到:表:“dbo_订单”,列:“项目”,值: “客户服务人员”。属性为“Project” “项目”是“订单”维度的属性,但不是键。我没有指出项目栏是关键!我应该能够根据需要有尽可能多的副本,就像名字字段一样 我是AnalysisServices项目的新手,我真的需要克服这样一个事实,即SSAS经常抱怨重复值,而拥有重复值应该是完全可以的。我相信这一定是我忽略的简单的事情 编辑:我意识到可以设置keydeplica

处理维度时,我遇到以下错误:

OLAP存储引擎中的错误:已创建重复的属性键 处理时找到:表:“dbo_订单”,列:“项目”,值: “客户服务人员”。属性为“Project”

“项目”是“订单”维度的属性,但不是键。我没有指出项目栏是关键!我应该能够根据需要有尽可能多的副本,就像名字字段一样

我是AnalysisServices项目的新手,我真的需要克服这样一个事实,即SSAS经常抱怨重复值,而拥有重复值应该是完全可以的。我相信这一定是我忽略的简单的事情

编辑:我意识到可以设置
keydeplicate=ReportAndContinue/ReportAndStop
,也可以设置
KeyColumns
namecoumns
。但是这个多步骤的过程似乎非常麻烦,因为这似乎是一个非常正常的操作,比如添加Address1、Address2、Address3、Firstname、Zipcode和其他通常重复的字段。我不敢相信这个繁琐的过程需要应用到所有这些领域


提前感谢。

这通常是源表/视图中同时包含空格和null的结果

本质上,SSAS对每个属性都这样做 从源中选择不同的合并(属性“”)

默认情况下,AnalysisServices会将空值转换为空值,从而在生成的提要中产生重复的值空值,从而导致错误

我同意这很糟糕,对新球员来说是一个很大的痛苦


解决方案:从数据源中删除所有空值,例如使用ISNULL/COALESCE everywhere,或使用where子句过滤包含空值的行,或在处理多维数据集之前运行update语句以值替换所有空值,等等。

我今天遇到了类似的问题(相同的错误消息),为了让其他人也遇到同样的问题,我在我的维基上做了一些注释:

我的案例是SQL(经过简化和改写以保护无辜):

奇怪的是,有些情况下发生了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值和属性名称的名称。我以前没见过这种情况,但出于某种原因,它发生在这里。我认为,这种解决方案比将多维数据集设置为忽略重复键错误进行处理要好


我认为,如果要构建一个维度连接表,这将提供更好的性能/可靠性。但请不要引用我的话。

虽然我在本页上的其他解决方案可行(并且根据情况可能更理想),但这是另一种解决方案:

以下是我的部分错误的模型:

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有两个不同的条目与此匹配:

  • 搜索字符串
  • 搜索字符串
  • 第一个解决方案将它们分开,没有问题,因此它是一个有效的解决方案(加上性能奖金)。但是,另一种方法(如果希望将文本值保留为键)是更改排序规则:

    Key Columns → Column Name → Source → Collation
    
    包括“区分大小写”


    其他类似的问题可能是空白字符和文本中其他不易察觉的细微变化

    我也遇到了同样的问题,我找到了解决办法

    右键单击“多维数据集”=>“处理”=>“更改设置”=>“维度键错误”

    活动“用户自定义错误配置”

    为此四个下拉列表设置“忽略错误” “找不到密钥” “重复密钥” “空密钥已转换为未知” “不允许使用空密钥”


    键的问题将被忽略。

    右键单击属性并选择“属性”。查找“属性”窗口中“源”类别下的“KeyColumn”。编辑“KeyColumn”属性,它将显示一个用户友好的窗口

    从窗口的右侧(键列)删除属性,并将其替换为左侧(可用列)的实际id列

    然后编辑“NameColumn”属性,将出现相同的窗口。将属性列(要显示的实际数据)从左侧移到右侧


    在VS 2010 Shell SSDT中测试。

    我通过在关系数据库上指定我的视图的排序规则来解决问题,如下所示


    合并([Descriptionão da Transação],'')如果您的数据同时包含Null和''SSA'发出重复的属性键,则整理Latin1_General_CIçu AI

    ,因为它认为Null为'。您不必触摸数据来修复此问题。您可以转到数据源视图,使用表达式COALESCE(mycolumn“”)添加命名计算,然后在维度中使用该计算,而不是原始列。这将解决数据源视图级别的问题,维度将正常处理。

    请阅读此博客:。请看原因1的详细解释。这将解释为什么会发生这种情况

    谢谢各位


    Ned

    如果您仍想继续部署和多维数据集浏览,请让我为您提供一个解决方案。 在“process cube”窗口下,将维度键错误设置更改为自定义。 您将能够无缝地部署和浏览多维数据集。
    这里的权衡是,您可能无法获得预期的结果

    有一段时间,需要在keyColumns中使用复合键来解析重复的属性键

    我今天遇到了这种情况,一时摸不着头脑,因为这里的解决方案都不起作用。最终解决了这个问题,我想我应该为其他人添加我的解决方案,谷歌搜索这个错误,然后像我一样到达这里

    在我的情况下是这样的
    Key Columns → Column Name → Source → Collation
    
    REPLACE(REPLACE(ISNULL([AttributeColumn], ''), CHAR(13), ''), CHAR(10), '')