SSAS表格模型大小写敏感维度导入重复值问题求助
解决方案:保留大小写唯一值导入SSAS维度表
核心问题分析
SSAS在读取SQL Server数据源时,可能会优先沿用数据库/服务器级的不区分大小写排序规则,而非列级的区分大小写规则,导致trEE、PlAnT这类大小写差异的数值被判定为重复。
具体解决方法
方法1:在数据源查询中显式指定排序规则
在SSAS的数据源视图(DSV)中,修改目标表的查询语句,强制返回的字符串按列级区分大小写规则处理:
SELECT YourColumn COLLATE SQL_Latin1_General_CP1_CS_AS AS YourColumn FROM YourTable
通过显式指定排序规则,确保SSAS接收到的结果集保留大小写唯一性。
方法2:修改SSAS数据源连接字符串
在SSAS的数据源连接设置中,给连接字符串添加排序规则参数,强制SQL Server返回符合区分大小写规则的数据:
Data Source=YourSQLServer;Initial Catalog=YourDatabase;Collation=SQL_Latin1_General_CP1_CS_AS;Integrated Security=SSPI;
该参数会覆盖数据库级的排序规则设置,让SSAS获取到带大小写差异的原始数据。
方法3:配置SSAS维度属性的排序规则
打开SSAS维度设计器,找到目标属性(即你的单列),在属性窗口中找到Collation选项,设置为SQL_Latin1_General_CP1_CS_AS。此设置会让SSAS在处理维度数据时,用区分大小写规则判断成员唯一性。
方法4:添加哈希辅助列(兜底方案)
如果上述方法无效,可在OTLP表中添加计算列,生成区分大小写的哈希值作为SSAS维度的唯一键:
ALTER TABLE YourTable ADD YourColumn_Hash AS BINARY_CHECKSUM(YourColumn COLLATE SQL_Latin1_General_CP1_CS_AS) PERSISTED
在SSAS维度中,将哈希列设为键属性,原列设为名称属性,通过哈希值的差异保证维度成员唯一性。
内容的提问来源于stack exchange,提问作者Jason Cheung
相关产品推荐
相关产品推荐

