【问题标题】:Can I process SSAS tabular partitions in SSIS using the Separate Transactions transaction mode?我可以使用分离事务事务模式处理 SSIS 中的 SSAS 表格分区吗?
【发布时间】:2020-04-16 17:25:13
【问题描述】:

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

我尝试将事务模式更改为单独事务,但单击确定后,它又恢复为一个事务。我也尝试过使用不同的提供程序(用于 Analysis Services 14.0、13.0 和 11.0 的 OLE DB 提供程序),但它们都有恢复到一个事务的相同症状。顺便说一句,我也无法选择并行处理顺序。这也将恢复为一次事务的顺序。并不是我想使用并行,但我想我也会包含这种行为。

我刚刚开始使用 SSAS 2019,我已经习惯了 SSAS 2012,我可以在其中使用 XMLA 命令,并且部分命令将包含事务模式。

我已尝试在线查找此内容,包括 TMSL 脚本语言参考概述 (Tabular Model Scripting Language (TMSL) Reference),并尝试从 SQL Server Management Studio (SSMS) 编写脚本以查看那里有哪些可用选项,但我在这两个地方都没有看到我正在寻找的东西。现在我想知道这是否可能在单个分析服务处理任务中实现。如果另一个分区发生故障,使用 One Transaction 模式将回滚任何成功的分区。

我已按月对其中一张表进行了分区,我希望这些分区在发生故障时位于单独的事务中,这样我就可以只针对未处理的分区或有错误的单个分区。我曾想过使用 For Each 循环来动态传递 TMSL 命令,但后来我在 this post 的 cmets 部分看到 Marco Russo 的评论,建议不要使用动态 TMSL。

我希望不必每年创建 12 个 Analysis Services 处理任务,但如果必须的话,我会这样做。

任何帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: sql-server ssis transactions ssas tabular


    【解决方案1】:

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

    我将变量 Date_Object 设置为数据类型 Object。然后在 Execute SQL Task 中编写一个查询,使用 Full Result Set 选项从我的日历表中获取不同的年月(例如 202005)列表。然后在结果集选项卡上,我在变量名称中添加了一个 Date_Object 并将结果名称更改为 0。

    Result Set Tab

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

    ForEach Loop Editor

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

    Variable Mappings

    我添加了一个数据类型为字符串的变量 Proc_Cmd_ProcessPartition。然后我进入 SQL Server Management Studio 并连接到我的 Analysis Services 数据库。我展开了要处理的多维数据集,然后展开表,右键单击要处理的表并单击分区。在那里,我选择了一个分区,然后单击了进程按钮。哪个分区无关紧要,因为它将被参数化。

    Partitions

    我将模式更改为“完整”,然后单击脚本按钮。我在这里使用完整处理模式,因为这是每月的完整处理包。我有一个每日增量进程,它在默认模式下处理并且仅针对三个最近的分区。

    Process Partitions

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

    Script example with old and new

    我将此脚本添加到 Proc_Cmd_ProcessPartition 变量中,将 YearMonth 部分替换为 Processing_YearMonth 变量。

    Variable Expression

    在 ForEach 循环容器内的 Analysis Services 处理任务中,我打开了属性并向下滚动到 Expressions 并添加了一个 ProcessingCommands 属性,其中包含 Proc_Cmd_ProcessPartition 变量作为表达式。

    Property Expression Editor

    这告诉 Analysis Services 处理任务要处理哪个分区以及以哪种模式处理它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多