导入表并进行 Data model 建模
本文介绍如何使用 Tabular Editor 3 的 表导入向导,将新表添加到模型中。此外还会介绍如何更新现有表的表结构。最后,我们将介绍如何使用关系图工具来定义并编辑表之间的关系。
表导入向导
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 数据库,并按上文所述更新表架构。
使用关系图
在 Tabular Editor 3 中,关系图是一种文档,可用于直观显示并编辑模型中表之间的关系。你可以按需创建任意数量的关系图,用于可视化模型的特定区域。图表可以另存为独立文件。更多信息详见 支持的文件类型。
Note
我们建议创建多个较小的图表,而不是少数几个大型图表。当关系图包含 20 张以上的表时,很快就会变得过于复杂,难以理解。
在 Tabular Editor 3 中加载模型后,选择 文件 > 新建 > 关系图 菜单选项以创建新的关系图。
添加表
可通过以下任一方式将初始表添加到关系图中:
- 在 TOM Explorer 中(多选)选择表,然后右键单击并选择 添加到关系图。
- 在 TOM Explorer 中(单选或多选)表,然后将表拖到关系图上
- 选择菜单 图表 > 添加表...,然后在弹出的对话框中(可多选)选择要添加的表。

要向关系图添加更多表,可以再次使用上述方法;或者在关系图中右键单击现有表,并选择以下选项之一:
- 添加筛选此表的表:将所有可能直接筛选当前选中表,或通过其他表间接筛选当前选中表的表添加到关系图中。从事实表开始时很有用。
- 添加所有相关表:将所有与当前选中表直接相关的表添加到关系图中。从维度表开始时很有用。

在继续之前,先按你的偏好重新排列并调整关系图中的表大小;或者使用 关系图 > 自动排列 功能,让 Tabular Editor 3 自动布局这些表。
使用关系图修改关系
要在两张表之间添加新关系,请找到该关系中事实表(多方)上的列,并将该列拖到维度表(单方)上对应的列。确认关系设置,然后单击 确定。

要编辑现有关系,右键单击它并选择 编辑关系。右键菜单中还提供了反转或删除关系的快捷命令,如下图所示。

Note
你也可以不使用关系图,而是通过 TOM Explorer 创建关系。找到关系应从其开始的列(多端/事实表端),右键单击并选择 创建 > 从此列创建关系。在随后出现的“创建关系”对话框中指定目标列。
选择与导航
图表与 TOM Explorer 会始终保持选中同一对象。在图表中单击表、列或关系时,会在树形视图中选中它,同时不会将焦点从图表移开。反过来,在树形视图中选择表或列时,它会在所有打开的图表中高亮显示,并在其表框内将该列滚动到可见位置。
对于不是在树形视图中手动完成的导航也同样适用:例如 转到 操作和搜索结果,也会在图表中高亮显示。
如果某个选择无法解析为单个表或列——无论是选中了多个对象,还是未选中任何对象——都会清除图表中的高亮,而不会保留过时的高亮。
Note
在 TOM Explorer 中选择对象时,不会将活动文档切换到图表。如果某个图表在后台处于打开状态,它会静默更新,而你可以继续在原来的位置工作。
双击某个关系即可打开 编辑关系。
保存关系图
要保存图表,使用 文件 > 保存(Ctrl+S)即可。如果图表有未保存的更改,而你此时关闭文档或应用程序,Tabular Editor 3 会提示你保存该图表。
Tip
同一个关系图文件可以用于不同的 Data model。图表通过表名来引用表。加载图表时,凡是模型中不存在的表,都会直接从图表中移除。
Note
每次添加或修改关系后,都需要先对 Data model 运行一次“计算”刷新,然后才能在查询模型时使用这些关系。
后续步骤
- @刷新、预览与查询
- 添加度量值和其他计算对象