SSAS 2022多维模型大小写敏感功能是否失效?
问题背景
原有SSAS 2014多维项目连接采用Latin_1_General_CS_AS排序规则的大小写敏感SQL Server数据库,维度属性已设为大小写敏感,运行正常。部署到SSAS 2022后,当维度属性值仅大小写不同时,处理维度会触发「重复属性键」错误。
最小复现环境:
CREATE DATABASE CaseSensitiveColumnDB COLLATE Latin1_General_CS_AS; GO USE CaseSensitiveColumnDB; CREATE TABLE MyDimension(Id INT, Name VARCHAR(100)); INSERT MyDimension VALUES (1, 'SOMENAME'); INSERT MyDimension VALUES (2, 'somename');
基于此表创建维度部署到SSAS 2022后处理报错:
处理时发现重复属性键:表'MyDimension',列'Name',值'SOMENAME'。属性为'Name'
且已尝试在属性、维度、数据库、实例层面设置大小写敏感,均无效果。
关键排查与修复步骤
SSAS 2022对维度键的比较逻辑相比2014有调整,需确保键列本身的排序规则明确设置为大小写敏感,而非仅依赖上层属性开关,具体操作如下:
数据源视图(DSV)列排序规则设置
打开项目的数据源视图,找到MyDimension表的Name列,在属性窗口中将Collation属性设置为Latin1_General_CS_AS。维度属性KeyColumns的排序规则设置
打开维度设计器,选中Name属性,展开KeyColumns节点,选中对应的Name列,在属性窗口设置Collation为Latin1_General_CS_AS,同时确认该属性的CaseSensitive已设为True。验证SSAS数据库与实例的排序规则
- SSAS数据库属性:在SSMS中连接目标实例,右键对应数据库→属性,确认
Collation为Latin1_General_CS_AS; - SSAS实例属性:右键实例→属性→高级,确认
CollationName为Latin1_General_CS_AS。
- SSAS数据库属性:在SSMS中连接目标实例,右键对应数据库→属性,确认
原理说明
SSAS 2022在处理维度键时,优先使用键列自身配置的排序规则进行比较。即使上层属性或数据库设置了大小写敏感,若键列未明确指定大小写敏感的排序规则,仍会默认使用不区分大小写的逻辑对比键值,导致仅大小写不同的键被判定为重复。
内容的提问来源于stack exchange,提问作者Andrej Kuklin

