【问题标题】:Referential Integrity error with dimension processing for cube多维数据集的维度处理的参照完整性错误
【发布时间】:2013-07-22 11:02:48
【问题描述】:

我们的一个生产多维数据集失败并显示以下错误消息:

来源:Analysis Services Execute DDL 任务 Analysis Services Execute DDL 任务描述:OLAP 存储引擎中的错误: 处理时找不到属性键:表: 'dbo_vw_FACT_OperationalTimeSheetData',列:'CurrentHomeLaborOrg', 值:'117-MARKETPLACE-38'。该属性是“KeyOrganisation”。结尾 警告 警告:2013-07-22 06:26:07.51 代码:0x811F0002
来源:Analysis Services Execute DDL 任务 Analysis Services Execute DDL 任务描述:OLAP 存储引擎中的错误: 属性键已转换为未知成员,因为该属性 未找到密钥。维度的属性 KeyOrganisation:当前 来自数据库的主页组织:LadbrokesReporting2005,多维数据集:MIS 克隆,度量组:Kronos 时间表,分区:201307,记录: 179774. 结束警告

在对上述错误消息的广泛谷歌搜索中,我了解到这是由于参照完整性,即事实表中的某些行无法链接到维度表。在我之前的分析中,我发现对于事实表中错误消息“117-MARKETPLACE-38”中给出的某些值,维度表中的格式为“117_Marketplace_38”。但是,我发现了一些惊人的事实:-

  1. 对填充事实的视图的查询将数据转换为“117-MARKETPLACE-38”格式。源表中的数据格式为“117_Marketplace_38”。

  2. 还有许多其他格式为“117-Marketplace-38”的条目。但是,该错误似乎仅针对该条目存在。那么为什么其他人被接受而这不是呢?

我的想法已经用完了。因此,如果有人可以帮助我解决这个问题,那就太好了。

【问题讨论】:

  • 检查空白。
  • 会考虑到这一点,但很可能这不是问题所在。还有什么建议吗?

标签: sql sql-server-2008-r2 ssas cube cube-dimension


【解决方案1】:

您确定已处理维度吗?请记住,当它将事实链接到维度时,它是在 SSAS 维度上这样做的,而不是在基础 SQL 表上。尝试先在维度上运行进程(更新)?

在您的原始帖子中,您混合了大写和小写、MARKETPLACE 和 Marketplace。这是它在源代码中的样子吗?可能是它没有将它们视为相同。我看到 SSAS 在“Id”与“ID”之间存在问题

ssas attribute key cannot be found even though it exists and is not due to duplicates的可能亲属

接受后将 cmets 编辑为答案。

【讨论】:

  • 我会在这里添加一个我错过的点。我尝试使用忽略错误计数来处理多维数据集分区(试图即使在引用完整性的情况下,它也会至少将其分组为未知)。但是,它失败并出现相同的错误。维度处理成功。
  • @Sparky - 在您的原始帖子中,您混合了大小写、MARKETPLACE 和 Marketplace。这是它在源代码中的样子吗?可能是它没有将它们视为相同。我已经看到 SSAS 在“Id”与“ID”之间存在问题:/
  • 是的,Melf,源代码就是这样。我会尽量考虑到这一点。
  • @Sparky 与 stackoverflow.com/questions/13974559/… 的这个家伙看起来有类似的问题,这与 SQL Server 对待 ABC 和 abc 相同,但 SSAS 没有:(
  • 谢谢梅尔夫。这可能只是解决问题。我会测试一下,让你知道:)
【解决方案2】:

我收到了同样的错误消息,但在我的情况下必须以不同的方式处理它:以下为遇到相同问题的其他人的详细信息。

在我的场景中,我通过桥接表将我的事实表连接到另一个事实表。这个桥接表是通过INNER JOIN 形成的,所以它只有在两者中都匹配的记录;合法地,那么FactTableA 中的某些行不在BrgTable 中加入FactTableB

为了让FactTableA 在没有指向BrgTable 的有效链接时也能处理,我关注了these instructions from TechNet

事实表中的参照完整性问题

sales 事实表包含 product_id 不存在的记录 在产品尺寸表中。服务器将产生一个 KeyNotFound 分区处理期间出错。默认情况下,KeyNotFound 错误是 记录并计入关键错误限制,该限制为零 默认。因此,处理将在第一个错误时失败。

解决方法是修改度量组上的ErrorConfiguration 或分区。以下是两种选择:

 Set KeyNotFound=IgnoreError.

 Set KeyErrorLimit to a sufficiently large number.

KeyNotFound 错误的默认处理是分配事实 记录给未知成员。另一种选择是设置 KeyErrorAction=DiscardRecord,丢弃事实表记录 完全一致。

对我来说,我必须转到与失败的度量值组关联的分区,打开 Properties 窗格,将 ErrorConfiguration 设置为 Custom,然后展开自定义并将 KeyNotFound 设置为 IgnoreError

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    相关资源
    最近更新 更多