尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

SSAS创建数据源全流程:连接配置、模拟身份与部署排查

SSAS创建数据源全流程:连接配置、模拟身份与部署排查 做了好几年BI项目SSAS的Cube、维度和数据源我创建过很多次。如果有人问我SSAS开发里最简单的步骤是什么我可能也会第一个想到创建数据源——打开向导、填服务器、选数据库、测试连接、点完成看起来就是五分钟的事。但真正到了项目里你会发现这个“简单步骤”恰恰是部署失败的高发区处理Cube时连不上库、权限不足、连接串里的Provider不兼容来回来去排查大半天最后定位到根源就是当初创建数据源时某个选项没选对。SSAS项目的完整链路一般是新建项目→创建数据源→建数据源视图→设计维度→设计Cube→部署处理。第二步是创建数据源它解决的是一件很具体的事告诉SSASOLAP分析要读取的原始数据到底放在哪台服务器、哪个数据库以及用什么身份去连。这篇文章就从这里展开把数据源的定位、关键配置选项、完整实操步骤和一些只有实际踩过坑才会知道的细节一次讲清。适合刚接触SSAS的BI开发也适合那些已经能点完向导但没搞懂每个选项背后逻辑的读者。1. 创建数据源之前先看清它在SSAS项目里的位置1.1 SSAS开发流程中数据源是承上启下的第二步在SSAS多维模型的开发顺序里数据源的位置排得很靠前项目创建之后紧接着就是数据源。这不是因为多维模型无关紧要而是因为后面的所有工序都依赖它。数据源视图需要从它读取表结构元数据维度设计里如果用到命名查询处理时也要通过它访问源库Cube的度量值组一旦进入处理阶段完整数据抽取都是以数据源为入口来做的。我之前参与过一个项目模型结构、维度关系都设计得挺完善结果一到生产部署就报“无法创建连接管理器”。排查了很久发现是当初接生产库时把数据源里的服务器名写成了开发库地址而Cube元数据和连接串之间的映射又因为继承关系变得很绕最后只能回头修改数据源然后全面重处理。这件事让我理解了一个道理数据源在SSAS项目里是地基地基偏一寸上面的楼层看起来再漂亮也住不了人。1.2 数据源和数据源视图一字之差却是完全两回事新手特别容易把“数据源”和“数据源视图”混在一起因为英文缩写里都带DS。数据源Data Source保存的是连接信息数据源视图Data Source View则是基于这个连接把你需要的表、视图、命名查询、逻辑主键、表关系组织起来的一个逻辑模型。打个比方数据源是门禁卡数据源视图是进门之后看到的楼层导览图。门禁卡只解决“你能不能进去”的问题根本不关心楼里有多少房间导览图解决的是“你进去之后要看到哪些房间、房间之间怎么连通”。在SSDT里数据源是“数据源”文件夹下一个.ds文件数据源视图是“数据源视图”文件夹下一个.dsv文件两者的作用和内容都不一样。你在数据源视图里添加表时系统会先通过数据源的连接串去源库读取元数据如果数据源本身有问题数据源视图这一步就会开始报错。所以理解这两者的区别是避免后面走弯路的前提。1.3 数据源的本质一张写有连接信息的XML名片如果你把数据源文件用“查看代码”打开会发现内容就是一个XML文件核心是ConnectionString节点。里面的键值对包括Data Source、Initial Catalog、Provider、Integrated Security、User ID、Password等。换句话说SSAS里的数据源本质上就是“一张名片”上面写清楚服务器地址、数据库名、身份验证方式。理解这一点有什么实际意义第一你以后如果希望用脚本批量创建数据源直接生成XML文件再加载进项目是可行的第二它提醒你一个安全问题——.ds文件里的连接字符串是明文如果用SQL Server身份验证并选择了保存密码密码就写在文件里。这个文件如果被提交到公共代码仓库等于把数据库密码公开了。我习惯避免在项目文件里出现任何高权限密码改用Windows身份验证或把密码放到部署配置中。这个习惯在团队协作项目里尤其重要。2. 配置数据源前必须想清楚的三件事2.1 身份验证二选一Windows身份验证还是SQL Server身份验证在连接管理器里身份验证方式通常只有两个选项Windows身份验证和SQL Server身份验证。很多教程里只是一笔带过但实际项目里这个选择会影响后面的一切。Windows身份验证对应连接字符串里的Integrated SecuritySSPI意思是使用调用者的Windows身份。开发阶段在本地测试非常友好不需要额外记密码只要当前Windows用户在SQL Server里有权限就行。SQL Server身份验证对应User ID和Password好处是不依赖域账户关系跨域、跨服务器场景也能连缺点是密码需要维护如果写在.ds文件里还有安全风险。我的选择标准很简单能走Windows身份验证就优先走Windows身份验证只有当源库和目标SSAS所在的Windows账户体系确实不互通或者项目规范要求使用SQL账户时才考虑SQL Server身份验证。在生产环境里我更愿意用Windows集成身份验证配合一个只读域账户这样既能满足安全审计又不会因为密码过期导致处理作业半夜失败。2.2 模拟模式处理数据时到底以谁的身份去访问源库创建数据源向导里有一页叫“模拟信息”这是很多人连续点“下一步”跳过去的地方。这个选项解决的是“SSAS去源库读数据时以谁的身份敲门”。常见选项有三种使用服务账户、使用特定Windows用户名和密码、使用当前用户的凭据。用服务账户意味着SSAS以自身服务的启动账户去访问源库用特定账户意味着你指定一个Windows用户用当前用户凭据则是在操作执行时用发起操作的用户的身份但这个选项在多维模型的处理任务里往往受限不建议在生产上依赖它。我把这几个选项整理成一张表方便对比模拟选项实际访问身份建议场景使用服务账户SSAS服务启动账户单机开发、本地测试、权限简单使用特定Windows用户指定的Windows账户生产环境、需要权限可控和审计使用当前用户凭据当前操作者的身份多维项目中处理任务通常不适用默认值等同于服务账户不确定时先看实际效果再改为什么这个选项这么容易埋雷因为“SSAS服务账户”和“源库授权账户”是两个概念。你在一台服务器上装了SSAS服务启动账户可能是某个内置账户但源数据库里这个内置账户可能只给了public权限完全没有select表的权限。这时测试连接可能都正常因为向导页面用的是你当前开发机的身份但等到服务器上处理Cube时SSAS以服务账户身份去读源库就会因为权限不足直接失败。最稳妥的做法是单独创建一个用于BI读取的Windows只读账户在源库授予db_datareader角色然后在数据源模拟方式里指定这个账户。2.3 Provider与连接字符串几个会折磨你一整天的细节连接管理器的窗口看起来只是填服务器名和数据库名但后台拼出来的连接字符串每一项都有讲究。先看一段典型的连接字符串Data Sourcelocalhost;Initial CatalogAdventureWorksDW;ProviderSQLNCLI11.1;Integrated SecuritySSPI;Persist Security InfoFalse;其中Data Source是服务器和实例名Initial Catalog是目标数据库Provider是数据访问接口类型Integrated SecuritySSPI表示Windows验证Persist Security Info控制连接成功后是否继续保留密码信息。每个Key的具体作用可以参考这张表连接串Key作用典型值Data Source服务器和实例名localhost、server01\sql2019Initial Catalog目标数据库AdventureWorksDWProvider数据访问接口SQLNCLI11.1Integrated Security是否使用Windows集成身份验证SSPIUser ID / PasswordSQL身份验证的用户名密码BI_Read_UserPersist Security Info连接成功后是否保留密码True / FalseProvider最容易踩坑同一套Server用SQL Native Client 11.0正常换成旧的SQLOLEDB在某些新版SQL Server上就可能出现“无法连接”或者元数据读出异常的报错。如果项目迁过SQL Server版本或者从一台机器搬到另一台机器这类问题会突然冒出来。遇到这种情况不要急着怀疑网络先在连接字符串里把Provider统一成和源库版本匹配的版本。Persist Security Info这个参数也很隐蔽。如果你用SQL身份验证向导有时候会提示“不允许保存密码”原因就是Persist Security InfoFalse。它背后的逻辑是当连接对象被重复使用时是否允许从连接对象中再次取出密码。设置为False时首次连接成功后再访问连接属性密码字段已经没了后续某些需要再次使用连接字符串的场景就会报错。所以SQL身份验证场景下建议把Persist Security Info设为True后再保存。3. SSDT逐步实操跟着向导走完创建数据源全流程3.1 环境准备SSDT版本与项目类型实操之前环境要先就位。我以Visual Studio 2019加SQL Server Data Tools为例其他版本界面可能稍有差别但流程一致。打开VS后新建项目在模板里找到“Analysis Services多维和数据挖掘项目”。这里有一个特别容易被忽略的细节如果你安装的是VS 2022之后的版本模板名字可能只显示“Analysis Services项目”创建时会细分为多维模型和表格模型。多维模型和表格模型虽然共用同一套数据源概念但向导页面略有不同选定之前先确认自己属于哪种模型类型。后面的内容按多维模型来讲这也是传统SSAS项目里最经典的一种。项目创建完成后解决方案资源管理器里会出现几个文件夹数据源、数据源视图、多维数据集、维度、挖掘结构等。其中“数据源”文件夹现在还是空的我们要做的就是往里面添加第一个数据源对象。3.2 打开数据源向导入口和欢迎页在“数据源”文件夹上右键选择“新建数据源”数据源向导就会弹出。也可以点菜单栏“项目”下的“新建数据源”效果一样。第一次打开会有一个欢迎页提示“使用此向导可以创建数据源”直接点“下一步”。这个欢迎页唯一有用的是告诉你数据源向导的大致流程选择定义方式、配置连接、设置模拟信息、检查完成信息。后面实际也就是这四个环节。从效率角度熟悉之后直接一路下一步但第一次做还是建议每页都看一眼再继续。3.3 连接管理器配置服务器名、数据库与测试连接向导第二步是“选择如何定义连接”通常出现两个选项“基于现有连接创建数据源”和“创建基于新连接的数据源”。“基于现有连接”指的是你在Visual Studio的服务器资源管理器里已经注册过的数据库连接。如果你之前用服务器资源管理器查过数据这里下拉框里就会显示没有现成连接时选第二项。选好后点“新建”会弹出一个标准的“连接管理器”对话框。需要关注三个地方服务器名本机可以填“.”或localhost远程服务器填机器名、IP或“机器名\实例名”命名实例一定要带反斜杠。跨端口场景可以写tcp:IP,端口号的格式。身份验证按前面2.1讲的原则选Windows身份验证就直接选上SQL身份验证要确认SQL Server允许混合模式登录。数据库名称在“选择或输入数据库名称”下拉框里选择目标库这一步别选错很多后续“表找不到”的问题根源就是库选错了。填完后点左下角“测试连接”出现“测试连接成功”的提示再点确定。很多人跳过测试直接确定结果后面处理时才发现问题。测试连接这一步相当于把门禁卡提前试刷一次成本极低收益很大。3.4 模拟信息页四个选项的实际效果连接管理器配置完成后向导进入模拟信息页。这一页是创建数据源时最容易被忽略但最需要认真对待的。在多维模型的向导里中文版通常显示这几个选项使用特定Windows用户名和密码、使用服务账户、使用当前用户的凭据、默认值。我翻译成人话使用服务账户SSAS以后台服务账户身份访问源库。适合单机开发和权限简单的场景因为它不需要额外配置账户。使用特定Windows用户名和密码你指定一个账户SSAS以这个身份访问源库。生产环境推荐权限可控。使用当前用户的凭据以当前操作者的身份访问多维模型里的处理任务大多不支持这种模式一般不选。默认值按SSAS默认策略走实际效果基本等同于服务账户。我的选择方法开发学习环境直接选“使用服务账户”部署到服务器之前再新建一个BI只读账户把模拟方式改成指定账户。这样做的好处是源库权限和SSAS服务权限分离开了某个用户没了不影响Cube处理就算源库需要切换也只需要重新配置这一个账户。3.5 完成页与.ds文件检查这两项再点完成模拟信息确定后进入完成页这页显示“数据源名称”和“连接字符串”。完成页的目的不是让你直接点完成而是让你做两个检查名称是否清晰连接串是否符合预期。名称我习惯用“业务含义DataSource”的结构比如“DW_Sales_DataSource”。当项目里存在多个数据源时名称就是最好的区分方式。不要保留默认的“Adventure Works.ds”这种名字更不要让所有数据源都叫“数据源.ds”后期维护会非常痛苦。连接字符串检查就好办多了重点看几个KeyData Source的服务器名、Initial Catalog的库名、身份验证方式对应的参数对不对。确认无误后点“完成”解决方案资源管理器的数据源文件夹下就出现了一个.ds文件。右键选“查看代码”简化来看文件里大概是这样的结构我顺手把无关属性略掉了DataSource xsi:typeRelationalDataSource nameDW_Sales_DataSource ConnectionString Data Sourcelocalhost;Initial CatalogAdventureWorksDW;ProviderSQLNCLI11.1;Integrated SecuritySSPI; /ConnectionString /DataSource看到这个文件说明数据源已经创建完成。它接下来会作为SSAS项目的独立对象参与部署后续的每一个处理动作都会以它作为连接入口。4. 部署之后的实战问题测试连接失败与处理报错的排查4.1 测试连接失败的经典原因与解决顺序创建数据源时最常见的一个拦路虎就是“测试连接失败”。报错只是结果原因却五花八门。我建议按下述顺序排查基本能覆盖绝大多数场景。顺序检查项操作1SQL Server服务状态配置管理器里确认服务启动2服务器名/实例名本机用 . 或 localhost 验证3身份验证方式确认SQL Server登录名和混合模式4网络与防火墙telnet IP 1433 测试端口通不通5Provider版本兼容性调整连接串中的Provider类型第一确认SQL Server服务真的在运行。打开SQL Server配置管理器看服务状态没有启动就先启动。第二服务器名写对。本机先用“.”或localhost试试别一上来写复杂地址。命名实例写法是“机器名\实例名”反斜杠别丢。第三确认身份验证方式。Windows身份验证的话当前Windows用户必须在SQL Server里有登录名SQL身份验证的话SQL Server要开混合模式而且用户名密码正确。第四网络层面。用telnet 目标IP 1433 看看端口通不通不通就查防火墙规则。第五检查Provider版本老库配新Provider发生的兼容问题并不罕见。把这五步走完95%的测试连接失败都能解决。剩下那5%大多和连接字符串里某个字符、密码里特殊字符、或者DNS解析有关系需要结合具体报错去现场看。4.2 向导测通了但部署处理报错问题基本出在权限比测试连接失败更气人的是创建数据源时测试都正常但是把SSAS项目部署到生产服务器处理Cube时报“拒绝访问”或“无法为数据库创建连接管理器”。这其实是前面模拟模式挖下的坑。关键区别在于向导里的测试连接使用的是你当前开发机的身份而部署后真正连接源库的是SSAS服务所在服务器上、严格按照数据源模拟信息决定的身份。如果模拟方式选了“使用服务账户”就以生产SSAS服务账户身份连源库如果选了“使用特定账户”就以指定的Windows账户连源库。无论如何源库里必须给这个身份授予读取权限。排查动作我一般走三步先看SSAS的数据源属性里当前模拟方式是什么再到源库所在服务器上确认这个账户存在、密码正确、登录名已创建最后在源库里执行授权脚本把db_datareader角色加给这个账户或者至少对相关表授予SELECT。三步做完再重新处理一次绝大多数处理报错立刻消失。不要试图通过把SSAS服务账户改成“管理员”来绕过问题生产环境这种操作只会带来更大的风险。4.3 我在创建数据源这件事上踩过的三个坑最后聊几个只有实际操作才会碰到的坑。第一个坑是库名选错。有一回项目里好几个测试库名字特别接近我在连接管理器下拉框里选了长得像生产的那一个结果后面数据源视图里缺表、维度处理数据对不上折腾了一天才反应过来。现在我的习惯是建立数据源之前先把目标库里的表数量和数据量看一眼做到心里有数再继续。第二个坑是密码被写进.ds文件。用SQL身份验证并在向导里保存密码后密码会明文出现在项目文件里。如果项目通过Git协作这个文件很容易被同步出去。从那以后我做到两个原则尽量不用SQL身份验证实在要用时密码走部署配置不进模型文件。第三个坑是部署时数据源被覆盖。项目从开发环境部署到生产环境时如果不注意部署配置数据源里的连接字符串很可能被开发库地址覆盖导致生产Cube处理时去连开发库。后来我习惯在部署之前单独检查一下数据源属性必要时通过部署配置文件为不同环境维护不同的连接串而不是等项目被覆盖后再去改。创建数据源这件事说到底是“门禁卡”问题。只要门禁卡配好了后面的数据源视图、维度、Cube才能一路畅通。我个人现在的习惯是新建数据源之前先把访问身份、权限、库名写清楚再动手点向导整个创建过程不会超过五分钟。如果这篇文章能帮你把这里看得更透后面在数据源视图环节你会发现一切都顺了不少。我最后再分享一个小技巧在项目里维护两个数据源对象一个叫Dev_Source指向开发库一个叫Prod_Source指向生产库通过部署配置切换。这样即使连接串经常变动也不会污染模型的元数据。步骤二讲到这里差不多可以收工了。
返回列表