Visual Studio无法打开兼容级别1604的Azure Analysis Services表格立方体
问题背景
Azure Analysis Services支持的最高兼容级别为1604,可通过以下C# API验证:
public int GetMaxCompatibilityLevel() { return ssasServer.SupportedCompatibilityLevels.Split(',') .Where(a => a.ToCharArray().Count() == 4).Select(Int32.Parse).Max(); }
通过C#代码创建该兼容级别的表格立方体可正常运行,但在Visual Studio 2022(17.6.1版本)中尝试连接时会报错,错误详情如下:
无法打开此文件。您只能打开与Microsoft SQL Server 2012 SP1或更高版本兼容的文件。
在工作区数据库上打开模型时出错。原因:无法打开此文件。您只能打开与Microsoft SQL Server 2012 SP1或更高版本兼容的文件。
调用堆栈:
at Microsoft.AnalysisServices.VSHost.VSHostManager.PrepareSandbox(Boolean newProject, Boolean& isRefreshNeeded, Boolean& isImpersonationChanged, Boolean& saveRequired, List`1& truncatedTables, Boolean isRealTimeMode, Int32 clientCompatibilityLevel)at Microsoft.AnalysisServices.VSHost.VSHostManager.PrepareSandbox(Boolean newProject, Boolean& isRefreshNeeded, Boolean& isImpersonationChanged, Boolean& saveRequired, List`1& truncatedTables, Boolean isRealTimeMode, Int32 clientCompatibilityLevel)
at Microsoft.AnalysisServices.VSHost.Integration.EditorFactory.CreateEditorInstance(UInt32 grfCreateDoc, String pszMkDocument, String pszPhysicalView, IVsHierarchy pvHier, UInt32 itemid, IntPtr punkDocDataExisting, IntPtr& ppunkDocView, IntPtr& ppunkDocData, String& pbstrEditorCaption, Guid& pguidCmdUI, Int32& pgrfCDW)============================
目前可通过修改下载的model.bim文件,将"compatibilityLevel": 1604改为1600来解决此问题。
疑问解答
1. 为何会出现该兼容性问题?
这是因为Visual Studio的Analysis Services项目工具(SSDT)版本与Azure Analysis Services服务端的兼容级别更新不同步。服务端已经支持1604级别,但VS 2022 17.6.1版本的SSDT尚未适配这个新级别,导致工具无法识别并处理该兼容级别的模型文件,从而抛出兼容性错误。
2. 是否存在更简便的解决方法?
除了手动修改model.bim文件外,还有两种更简便的方式:
- 升级Visual Studio/SSDT:更新Visual Studio到最新版本,或者单独升级SSDT组件,新版本通常会适配服务端新增的兼容级别;
- 创建模型时指定兼容级别1600:如果不需要1604级别的特定功能,直接在C#代码中创建兼容级别为1600的模型,避免后续工具兼容问题。
3. 微软为何未在官方主页面列出1604这个兼容版本?
1604属于服务端内部迭代的小版本兼容级别,通常这类小版本是为了支持特定的新功能或修复,不会在主页面的公开文档中单独列出。微软一般只会在官方文档中标注主要的兼容级别(如1600),小版本的兼容信息可能仅在内部API或详细的更新日志中体现,或者需要通过技术支持渠道获取。
内容的提问来源于stack exchange,提问作者Dave R

