You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过TOM API在Analysis Services Tabular 2022中创建Dual模式数据库并解决表创建报错问题

如何通过TOM API在Analysis Services Tabular 2022中创建Dual模式数据库并解决表创建报错问题

我太懂你这种卡壳的感觉了——用TOM API折腾兼容级别1600的Dual模式Tabular数据库,建库、加Import表都顺风顺水,结果一尝试添加DirectQuery模式的表就弹出那个摸不着头脑的分区错误,属实让人头疼。

问题根源拆解

你遇到的错误提示核心是:分区的类型必须和表的查询模式严格匹配。在Dual模式数据库中,虽然允许表在Import和DirectQuery模式间切换,但DirectQuery模式的表不能使用常规的Import分区,必须配置为DirectQuery专属的分区类型,同时确保数据视图是完整的(非采样)。

具体解决步骤(附代码示例)

1. 正确创建Dual模式数据库

首先要确保数据库的Mode属性明确设置为Dual,兼容级别指定1600:

using Microsoft.AnalysisServices.Tabular;

// 连接到Analysis Services服务器
var server = new Server();
server.Connect("Data Source=YourASServer;");

// 创建Dual模式数据库
var dualDb = new Database()
{
    Name = "MyDualModeDB",
    CompatibilityLevel = 1600,
    Mode = Mode.Dual
};

// 将数据库添加到服务器并部署
server.Databases.Add(dualDb);
dualDb.Update(UpdateOptions.ExpandFull);

2. 创建Import模式表(正常流程)

这部分你已经能成功实现,这里再贴个示例供参考:

var model = dualDb.Model;

// 创建Import模式的表
var importTable = new Table()
{
    Name = "MyImportTable",
    QueryMode = QueryMode.Import
};

// 添加Import类型的分区
var importPartition = new ImportPartition()
{
    Name = "MyImportPartition",
    Source = new QueryPartitionSource()
    {
        Query = "SELECT * FROM MySourceDB.dbo.ImportSourceTable",
        DataSource = model.DataSources["MyRelationalDataSource"] // 需提前配置数据源
    }
};

importTable.Partitions.Add(importPartition);
model.Tables.Add(importTable);
model.Update(UpdateOptions.ExpandFull);

3. 正确创建DirectQuery模式表(关键修复)

重点在这里:必须为DirectQuery模式的表使用DirectQueryPartition,同时明确设置表的QueryMode为DirectQuery:

// 创建DirectQuery模式的表
var dqTable = new Table()
{
    Name = "MyDirectQueryTable",
    QueryMode = QueryMode.DirectQuery // 必须明确指定
};

// 创建DirectQuery专属分区
var dqPartition = new DirectQueryPartition()
{
    Name = "MyDQPartition",
    Source = new QueryPartitionSource()
    {
        Query = "SELECT * FROM MySourceDB.dbo.DirectQuerySourceTable",
        DataSource = model.DataSources["MyRelationalDataSource"] // 关联已配置的数据源
    }
};

// 将分区添加到表,再把表添加到模型
dqTable.Partitions.Add(dqPartition);
model.Tables.Add(dqTable);
model.Update(UpdateOptions.ExpandFull);

额外注意事项

  • 确保提前在数据库中配置好RelationalDataSource,所有分区的Source都要指向正确的数据源
  • Dual模式数据库中,每个表的QueryMode可以独立设置,但分区类型必须与QueryMode对应(Import表用ImportPartition,DirectQuery表用DirectQueryPartition)
  • 部署时务必使用UpdateOptions.ExpandFull,确保所有对象配置都完整同步到Analysis Services服务器

备注:内容来源于stack exchange,提问作者Alberto Gentilcore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 15:09:38