我使用的是SQL Server Analysis Services(SSAS(2019表格(1500兼容性(,我希望使用SQL Server Integration Services(SSIS使用Visual Studio 2017和SQL Server数据工具SSDT(处理该模型。
我曾尝试将事务模式更改为"单独事务",但单击"确定"后,它将恢复为"一个事务"。我也在不同的提供程序(OLE DB Provider for Analysis Services 14.0、13.0和11.0(中尝试过这种方法,但它们都有相同的症状,即恢复到一个事务。顺便说一句,我也无法选择并行处理顺序。这也将恢复为"具有一个事务的顺序"。并不是说我想使用平行,但我想我也会包括这种行为。
我刚刚开始使用SSAS 2019,我已经习惯了SSAS 2012,在那里我可以使用XMLA命令,并且该命令的一部分将包含事务模式。
我试着在网上查找,包括TMSL脚本语言参考概述(表格模型脚本语言(TMSL(参考(,我也试着从SQL Server Management Studio(SSMS(中编写脚本,看看那里有什么可用的选项,但我在这两个地方都看不到我在寻找什么。现在我想知道在一个AnalysisServices处理任务中这是否可能。如果另一个分区出现故障,使用"一个事务"模式将回滚任何成功的分区。
我已经按月对其中一个表进行了分区,如果出现故障,我希望分区在单独的事务中,这样我就可以只针对未处理的分区,或者针对有错误的单个分区。我曾想过使用For Each Loop动态传递TMSL命令,但后来我在这篇文章的评论部分看到了Marco Russo的评论,建议不要使用动态TMSL。
我不想每年创建12个Analysis Services处理任务,但如果必须的话,我会的。
如有任何帮助,我们将不胜感激。
谢谢。
我最终所做的是使用ForEach循环容器在一个单独的事务中处理每个分区。
我将变量Date_Object设置为数据类型Object。然后在执行SQL任务中编写一个查询,使用"完整结果集"选项从我的日历表中获取一个不同的年月(e.x.202005(列表。然后在"结果集"选项卡上,我在"变量名称"中添加了一个Date_Object,并将"结果名称"更改为0。
结果集选项卡
然后我把它连接到一个ForEach循环容器。在"集合"选项卡上,我将枚举器更改为"Foreach ADO枚举器",并添加Date_Object变量作为ADO对象源变量。
ForEach循环编辑器
我添加了一个名为Processing_YearMonth的变量作为数据类型String。然后,在"变量映射"选项卡上的ForEach循环编辑器中,我添加了索引为0的Processing_YearMonth变量。
变量映射
我添加了一个数据类型为字符串的变量Proc_Cmd_ProcessPartition。然后我进入SQL Server Management Studio并连接到我的Analysis Services数据库。我展开了要处理的多维数据集,然后展开了表,右键单击要处理的表,然后单击分区。在那里,我选择了一个分区,然后点击进程按钮。哪个分区并不重要,因为它将被参数化。
分区
我将模式更改为"完整",然后单击脚本按钮。我在这里使用全过程模式,因为这是每月的全过程包。我有一个每天递增的进程,它在默认模式下处理,并且只处理最近的三个分区。
过程分区
这在SSMS窗口中添加了一个脚本,但这个脚本充满了双引号,所以我需要做的第一件事是在每个双引号前面添加一个反斜杠。
新旧的脚本示例
我将此脚本添加到Proc_Cmd_ProcessPartition变量中,用Processing_YearMonth变量替换YearMonths部分。
变量表达式
在ForEach循环容器中的Analysis Services处理任务中,我打开了属性,向下滚动到表达式,并添加了一个ProcessingCommands属性,该属性包括Proc_Cmd_ProcessPartition变量作为表达式。
属性表达式编辑器
这告诉AnalysisServicesProcessingTask要处理哪个分区以及以何种模式处理它