Tabular Editor 3 内置 表导入向导,可帮助你在模型中创建数据源,并从 SQL Server 数据库等关系型数据源导入表/视图。

TOM 数据源类型
根据你使用的 Analysis Services 版本,在模型元数据中定义数据源的方式也不同:
- 提供程序(又称旧版):在所有 Analysis Services 版本和所有兼容级别中均可用。支持的数据源范围有限,主要通过 OLE DB/ODBC 驱动程序访问关系型数据源。分区通常使用 SQL 语句定义,并以原生方式在数据源上执行。凭据在 Tabular Object Model 的 Provider数据源对象中进行管理,并在服务器端存储和加密。
- 结构化(又称 Power Query):自 SQL Server 2017 起可用(兼容级别 1400+)。支持的数据源范围比旧版提供程序更广。分区通常使用 M(Power Query)表达式定义。凭据在 Tabular Object Model 的 Structured数据源对象中进行管理,并且每次部署到 Analysis Services 时都需要指定。
- 隐式数据源:仅用于 Power BI 语义模型。模型中不会创建显式的数据源对象。取而代之的是,M(Power Query)表达式会隐式定义数据源。凭据不存储在 Tabular Object Model 中,而是由 Power BI Desktop 或 Power BI 服务进行管理。
Note
Tabular Editor 2.x 的“表导入向导”和“更新表架构”功能仅支持包含 SQL 分区的旧版数据源。换句话说,不支持 Power Query 分区。因此,通常建议使用 Legacy 旧版数据源,因为它们能在各类开发者工具之间实现最高程度的互操作性。
导入新表
在导入表时(模型菜单 > 导入表...),Tabular Editor 会显示上面提到的选项(用于创建新的数据源),以及模型中已存在的数据源列表。如果要导入的表在模型中已指定的某个数据源中可用,请避免创建新的数据源。
Tip
语义模型通常被视为关系型 Warehouse 中经过优化、驻留内存的语义缓存。因此,理想情况下,一个模型最好只包含一个数据源,这个数据源指向基于 SQL 的 Warehouse 或数据集市。
创建新的数据源
如果你需要创建新的数据源,Tabular Editor 会提供一份受支持的数据源列表:

请注意,尤其是 Power BI,Analysis Services 和 Power BI 支持的数据源范围要广得多;不过,上面截图中列出的数据源,才是 Tabular Editor 为了自动导入表元数据(即列名和数据类型)而能够连接的数据源。对于不在此列表中的数据源,Tabular Editor 3 仍然可以利用 Analysis Services 更新表架构。
目前,Tabular Editor 3 原生支持以下数据源:
- SQL Server 数据库
- Azure SQL 数据库
- Azure Synapse Analytics(SQL 池和无服务器 SQL 池)
- Oracle
- ODBC
- OLE DB
- Snowflake*
- Power BI Dataflow*
- Databricks*
- Fabric Lakehouse
- Fabric Warehouse
- Fabric SQL 数据库
- Fabric 镜像数据库
*=这些数据源仅在 Power BI Data model 中作为隐式数据源受到支持。它们在 SSAS / Azure AS 中不可用。
Tip
想了解如何连接到 Azure Databricks 的更多信息,可以看看 连接到 Azure Databricks。
从列表中选择某个数据源后,Tabular Editor 会显示一个连接详细信息对话框,让你指定服务器地址、凭据等与要创建的数据源相关的设置。你指定的设置应该是 Tabular Editor 用来建立到该源的本地连接时要用的设置。这些设置会保存在你的 用户选项(.tmuo)文件 中。

如果你希望 Analysis Services 在连接时使用不同的凭据,可以在导入表之后,通过编辑 Tabular Object Model 中的数据源属性来指定。
连接到数据源
每种数据源类型都有自己的连接对话框,可用的身份验证方法也各不相同。这种选择不仅影响首次连接,因为某些身份验证方法需要人工交互,因此无法用于计划刷新。
完整列表请参阅 @connectivity,并查看相应数据源的页面:
- @connect-sql-server,涵盖 Azure SQL 和 Synapse
- @connect-snowflake,包括适用于无人值守场景的密钥对身份验证
- 连接到 Databricks
- 连接到 Oracle
- @connect-odbc,也可用于连接 PostgreSQL、MySQL、MariaDB 和 IBM Db2
- 通过 OLE DB 连接
- 连接到 Fabric 和 OneLake
- 连接到 Power BI Dataflows
凭据按用户和模型分别存储在 用户选项 文件中,使用你的 Windows 帐户密钥加密,且不会写入模型元数据。
选择要导入的对象
定义好数据源后,你可以从列表中选择表/视图,或指定要对该源执行的原生查询。

如果你选择第一个选项,Tabular Editor 将连接到该源并显示表和视图列表,你可以在下一页预览:

你可以在左侧勾选,以一次导入多个表/视图。对于每个表/视图,你都可以取消勾选或勾选要导入的列。
Tip
如果你能控制源系统,我们建议始终在要导入的表之上创建一个视图。在该视图中,确保更正将在语义模型中使用的名称、拼写等,并移除语义模型不需要的列(系统列、时间戳等)。
然后,在模型中从该视图导入所有列(本质上会生成一条 SELECT * FROM ... 语句)。这样更易于维护,因为你只需在 Tabular Editor 中运行 Schema Update,就能判断源端是否有任何更改。

如果你使用左上角的下拉列表将预览模式切换为“Schema only”,就可以为每个源列更改导入的数据类型和列名。例如,如果源数据使用浮点值,但你希望将数据以定点小数的形式导入,这会很有用。

在最后一页,确认你的选择,并选择要创建哪种类型的分区。对于 Provider数据源,默认创建的分区类型是 SQL;而对于 Structured数据源,默认则为 M。

对于 Fabric 数据源,最后一页会显示一个下拉列表,供你选择将所选内容创建为 Direct Lake 或导入模式。
此时,你应该能看到表已导入,并且所有列、数据类型以及源列映射都已应用:

列会按照它们在源表中出现的顺序创建。因此,两次导入同一个表都会得到相同的列顺序。
Note
从 Fabric Lakehouse 或 Fabric Warehouse 创建导入表时,会通过数据源提供的 SQL analytics endpoint 读取表的架构。如果无法确定任何终结点,且导入设置中也未指定,Tabular Editor 会报错并说明需要提供的内容:将 SQL 终结点作为服务器,或提供 Workspace ID 和 item ID。它不会创建一个没有列的表。
更新表架构
如果源中新增或更改了列,或者你最近修改了分区表达式或查询,你可以使用 Tabular Editor 的 更新表架构 功能来更新模型中的列元数据。

此菜单项既可在模型级别调用,也可对一组表甚至单个表分区调用。
使用此选项时,Tabular Editor 会连接到所有相关数据源(必要时会提示你输入凭据),以确定是否需要添加、修改或删除列。列会遵循源表自身的列顺序,因此架构更新不会打乱它们的顺序。
Important
如果之前导入到语义模型中的某个列在源中被删除或重命名,则必须更新语义模型中的表架构。否则,数据刷新操作可能会失败。

在上方的屏幕截图中,Tabular Editor 在源中检测到两个尚未导入的新列(Color 和 Material),并将两个现有列标记为待移除(Colour 和 Substance Type),因为它们的名称已无法与源中的任何列匹配。列重命名的检测仅适用于简单变更;此处名称差异较大,因此 Tabular Editor 会将其报告为删除和新增,而非重命名——实际上,源中的 Colour 已重命名为 Color,Substance Type 已重命名为 Material。
为避免破坏依赖 [Colour] 列的现有 DAX 公式,你可以按住 Ctrl 键,在“架构更改”对话框中点击 Color(导入)和 Colour(删除)两行,然后右键单击,将“删除列”和“新增列”合并为一次 SourceColumn 更新操作:

如果你不希望将名称更改传播到已导入的列(而只是想更新 SourceColumn 属性,以反映数据源中已更改的名称),你可以在下拉列表中取消选择 Name 更新操作:

通过 Analysis Services 更新表架构
默认情况下,Tabular Editor 3 会尝试直接连接到数据源,以便更新已导入表的架构。当然,这只在 Tabular Editor 3 支持该数据源时才有效。如果你需要更新从 Tabular Editor 3 不支持的数据源导入的表的架构,可以在 工具 > 偏好 > 架构比较 下启用 使用 Analysis Services 进行更改检测 选项。当某个分区或共享表达式的 M 表达式过于复杂,以至于 Tabular Editor 3 的内置架构检测功能无法处理时,也同样适用。例如,内置架构检测不支持某些 M 函数。

启用此选项后,当 Tabular Editor 3 连接到 Analysis Services 或 Power BI XMLA endpoint 时,即可更新从 Analysis Services 或 Power BI 支持的任何数据源导入的表的架构。
Note
使用 Analysis Services 进行更改检测 选项仅在 Tabular Editor 3 连接到 Analysis Services 或 Power BI XMLA endpoint 时才会生效。因此,建议你在开发模型时始终使用工作区模式。
启用“使用 Analysis Services 进行更改检测”选项后,当请求更新架构时,Tabular Editor 3 将使用以下技术:
- 针对已连接的 Analysis Services 实例创建一个新的事务
- 向模型添加一个新的临时表。该表使用一个 Power Query 分区表达式,用于返回原始表达式的架构,而该原始表达式已请求更新架构。这是通过
Table.SchemaM 函数 实现的。 - Analysis Services 刷新该临时表。 Analysis Services 负责连接到数据源,以检索更新后的架构。
- Tabular Editor 3 查询临时表的内容,以获取架构元数据。
- 回滚该事务,使 Analysis Services 数据库或 Power BI 语义模型回到步骤 1 之前的原始状态。
- 如果存在任何架构更改,Tabular Editor 3 会显示如上所示的“应用架构更改”对话框。
借助该技术,无论表背后的 M 查询有多复杂、使用了哪些函数,Tabular Editor 3 都可以从原本不受支持的数据源导入并更新表。
Note
如果您的 M 表达式通过 M Table.NestedJoin 函数等方式合并了来自多个数据源的数据,您可能需要在 Power BI 服务中的语义模型上,将 隐私级别 从“私有”更改为“组织”。否则,你可能会看到一条错误提示:<Query> references other queries or steps, so it may not directly access a 数据源。请重建此数据组合。即使未启用“使用 Analysis Services 进行更改检测”,也可能出现此错误,因为当 M 表达式复杂到超出 Tabular Editor 3 内置架构检测能力时,Tabular Editor 3 会自动回退到该检测机制。
通过 Analysis Services 导入新表
若要从原本不受支持的数据源导入表,你只要复制该数据源中的现有表,修改复制出来的表的分区查询里的 M 表达式,然后把更改保存到 Workspace 数据库,并按上文所述更新表架构。