【问题标题】:SSAS Processing cube failed to duplicate attribute key BUT running the raw sql shows no dupsSSAS 处理多维数据集无法复制属性键但运行原始 sql 显示没有重复
【发布时间】:2020-02-25 04:38:37
【问题描述】:

我正在尝试处理一个多维数据集,但由于属性键重复而失败。奇怪的是,当从进程多维数据集对话框运行原始 sql 时,我在查询中看不到重复项。

处理多维数据集时的确切错误是:

Errors in the OLAP storage engine: A duplicate attribute key has been found when processing: Table: 'dbo_vw_DimDRG', Column: 'DRGCode', Value: '743'. The attribute is 'DRG Code'.

从我的数据库中的进程多维数据集对话框运行生成的 sql 时,我没有得到任何重复。这条sql如下:

/*raw sql query used in SSAS dimension processing*/
SELECT DISTINCT

[dbo_vw_DimDRG].[DRGCode] AS [dbo_vw_DimDRGDRGCode0_0]

  FROM [dbo].[vw_DimDRG] AS [dbo_vw_DimDRG]

--WHERE DRGCode = '743' /*I added this to filter results*/

值得注意的是数据是VARCHAR。还值得注意的是,数据中有多个“743”值,但这是故意的,并且多维数据集查询使用的是 DISTINCT,所以这不应该是一个问题。这个列不是我的主键,主键列处理就好了。

我尝试过的:

  1. 使用 Len() 确保所有 '743' 值都相同(可能有尾随空格?)
  2. 确认数据中不存在 NULL 和 '' 值。
  3. 导入了其他客户端,它们使用完全相同的关系结构(并具有多个 '743' 值)并且工作正常。

你能想到我在这里可能遗漏的任何东西吗?我觉得这与 VARCHAR 数据不是真正的“唯一”有关,但我对 SSAS 了解不足,无法确定问题。

【问题讨论】:

标签: sql-server ssas cube


【解决方案1】:

如果有人发现这个:

使用 DATALENGTH() 不会显示隐藏字符。我最终通过将此逻辑添加到我的专栏来解决此问题。

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

这样做可以使多维数据集成功处理。我想一定有隐藏的字符不是由 datalength() 实际拾取的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多