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

Azure Analysis Service如何仅刷新模型中修改的历史行而非全量刷新?

可以实现,具体方案分两种场景选择:

场景一:修改行集中在少量历史分区

如果被修改的行集中在少数几个按日划分的历史分区里,推荐用分区替换刷新的方式,步骤如下:

  1. 通过SQL查询定位修改行所在的分区:
    • 编写SQL语句,根据last_modified_time筛选出所有被修改的行,同时关联业务日期(你的分区键),得到需要更新的分区日期列表。
      示例SQL:
    SELECT DISTINCT CONVERT(VARCHAR(8), business_date, 112) AS partition_date
    FROM your_fact_table
    WHERE last_modified_time > @last_refresh_time -- 上次刷新后的修改行
    
  2. 在SSAS表格模型中,针对每个需要更新的分区执行分区级别的替换刷新:
    • 可以通过SSMS手动操作:找到对应分区,右键选择“刷新”,刷新类型选“替换”;
    • 也可以用TMSL脚本批量执行,示例脚本:
    {
      "refresh": {
        "type": "replace",
        "objects": [
          {
            "database": "YourTabularModelDB",
            "table": "YourFactTable",
            "partition": "Partition_20200101" -- 替换为实际分区名
          }
        ]
      }
    }
    
    这种方式会重新执行该分区的数据源查询,拉取该分区的最新数据(包含修改后的行),替换原有分区数据,比全量刷新模型高效得多。

场景二:修改行零散分布在大量分区(单条/少量行修改)

如果修改的行数量极少且分散在多个分区,推荐用先删后加的精细化操作,步骤如下:

  1. 提取修改行的主键和最新数据:
    • 用SQL查询出所有被修改行的主键(比如fact_id)以及完整的最新行数据,保存为临时表或CSV文件。
      示例SQL:
    SELECT fact_id, col1, col2, ..., business_date
    FROM your_fact_table
    WHERE last_modified_time > @last_refresh_time
    
  2. 删除SSAS模型中对应的旧行:
    • 用TMSL脚本执行删除操作,根据主键匹配删除,示例:
    {
      "delete": {
        "object": {
          "database": "YourTabularModelDB",
          "table": "YourFactTable"
        },
        "where": "fact_id IN (123, 456, 789)" -- 替换为实际主键列表
      }
    }
    
  3. 插入修改后的新行:
    • 将步骤1中获取的最新数据,通过ProcessAdd方式加载到对应分区(根据业务日期匹配分区),可以用TMSL脚本或SSIS包实现批量插入。

注意事项

  • 无论哪种方案,都要确保last_modified_time字段的准确性,避免遗漏或误判修改行;
  • 执行分区刷新或先删后加操作时,建议在业务低峰期进行,避免影响模型查询性能;
  • 批量操作时,优先用TMSL脚本或PowerShell自动化执行,减少手动操作的误差。

内容的提问来源于stack exchange,提问作者Jess8766

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:45:33