我可以在SSIS中使用分离事务事务模式处理SSAS表格式分区吗?

问题描述 投票:0回答:1

我正在使用SQL Server Analysis Services (SSAS) 2019表格(1500兼容性),我想使用SQL Server Integration Services(SSIS使用Visual Studio 2017和SQL Server Data Tools SSDT)处理该模型。

我曾尝试将事务模式更改为 "单独事务",但在我点击 "确定 "后,它又恢复到 "一个事务"。 我还用不同的提供者(OLE DB Provider for Analysis Services 14.0、13.0和11.0)尝试过,但它们都有同样的症状,即恢复到One Transaction。 顺带一提,我也无法选择并行处理顺序。 这样一来,One Transaction也会恢复到Sequential。 并不是说我想使用并行,但我想我也要加入这个行为。

我刚刚开始使用SSAS 2019,我习惯于SSAS 2012,我可以使用XMLA命令,命令的一部分会有事务模式在里面。

我试着在网上查了一下,包括TMSL脚本语言参考概述(表格模型脚本语言(TMSL)参考资料),我试着从SQL Server Management Studio (SSMS)中编写脚本,看看那里有哪些选项可用,但我在这两个地方都没有看到我要找的东西。 现在我想知道在一个分析服务处理任务中是否可以这样做。 使用 "一个事务 "模式会在另一个分区失败的情况下回滚任何成功的分区。

我已经按月份对其中一个表进行了分区,我希望在失败的情况下,分区能在单独的事务中,这样我就可以只针对未处理的分区,或有错误的单个分区。 我想过使用For Each Loop来动态传递TMSL命令,但后来我看到了Marco Russo在评论部分的评论 此职位 建议不要使用动态TMSL。

我不希望每年都要创建12个分析服务处理任务,但如果必须这样做,我也会这样做。

任何帮助将被感激。

谢谢您的帮助。

sql-server ssis transactions ssas tabular
1个回答
0
投票

我最终做的是使用ForEach循环容器在一个单独的事务中处理每个分区。

我设置了一个变量Date_Object作为数据类型Object。 然后在执行SQL任务中写了一个查询,使用完整结果集选项从我的日历表中抓取一个不同的年月列表(例如20205)。然后在 "结果集 "选项卡上,我在变量名中添加了一个Date_Object,并将结果名改为0。

结果设置选项卡

然后我把它连接到一个ForEach循环容器上。 在Collection选项卡上,我将Enumerator改为 "Foreach ADO Enumerator",并添加我的Date_Object变量作为ADO对象的源变量。

ForEach循环编辑器

我添加了一个名为Processing_YearMonth的变量,数据类型为String。 然后在ForEach循环编辑器的变量映射选项卡中,我添加了一个索引为0的Processing_YearMonth变量。

变量映射

我添加了一个数据类型为字符串的变量Proc_Cmd_ProcessPartition。 然后我进入SQL Server管理工作室,连接到我的分析服务数据库。 我扩展了我想要处理的立方体,然后扩展了表,在我想要处理的表上点击右键,然后点击分区。 在那里,我选择了一个分区,然后点击处理按钮。 哪个分区并不重要,因为它要被参数化。

分区

我把模式改为 "全流程",然后点击脚本按钮。 我这里用的是全处理模式,因为这是每月的全处理包。 我有一个每日递增的进程,在默认模式下处理,并且只处理最近的三个分区。

进程分区

这在SSMS窗口中添加了一个脚本,但是这个脚本中充满了双引号,所以我首先需要做的是在每个双引号前面加一个反斜杠。

新旧脚本示例

我在Proc_Cmd_ProcessPartition变量中添加了这个脚本,用Processing_YearMonth变量替换了YearMonth部分。

变量表达式

在我的分析服务处理任务里面的ForEach循环容器上,我打开属性,向下滚动到Expressions,并添加了一个ProcessingCommands属性,其中包括Proc_Cmd_ProcessPartition变量作为表达式。

属性表达式编辑器

这将告诉分析服务处理任务要处理哪个分区,以何种模式处理。

© www.soinside.com 2019 - 2024. All rights reserved.