如何逐步处理SSAS多维数据集以提高速度?

时间:2018-12-20 17:27:58

标签: reporting-services ssas

我需要在将数据添加到数据仓库中的事实表时,使用AMO减少SSAS多维数据集的处理时间。

根据有关SSAS的Microsoft文档:

流程添加

“对于维,添加新成员并更新维属性标题和说明。对于度量值组和分区,仅将新可用的事实数据添加并仅处理相关分区。”

处理完整

”处理Analysis Services对象及其包含的所有对象。对已处理的对象执行“完全处理”时,Analysis Services会删除该对象中的所有数据,然后处理该对象。这种处理对对象进行结构更改(例如,添加,删除或重命名属性层次结构时)是必需的。”

因此,使用以下代码,无论数据仓库中的数据量如何,每条记录至少可以有相似的处理时间。

var start = DateTime.Now;
var query = "SELECT [dbo].[FactGradingResult].* FROM [dbo].[FactGradingResult]  WHERE ([Id] = "+ grading2.Id+")";
ptn.Process(ProcessType.ProcessAdd,
    new QueryBinding(dsv.DataSourceID, query));
var end = ptn.LastProcessed;
swch2 = (end - start).TotalMilliseconds;

但是ProcessAdd仍然需要大约900毫秒来用事实表的单行更新多维数据集。这是Windows Server 2012的8核2.5GHz计算机的SSAS ProcessAdd的典型时间吗?如果没有,如何改善事实表每行的多维数据集处理时间?

2 个答案:

答案 0 :(得分:2)

根据您的澄清,您正在尝试实时刷新多维数据集,我建议您权衡这对您来说更重要。查询性能更重要吗?然后继续执行您的操作,因为MOLAP查询性能将比下面的ROLAP建议更好。

但是,如果更重要的是将新数据放入多维数据集中的延迟为零,那么我建议您切换到包括ROLAP的某种方法。

为了进一步描述ROLAP方法,我建议创建一个MOLAP分区,其中包含您的事实表中的所有数据,直到昨天为止。然后创建第二个分区,将其设置为StorageMode = ROLAP并将其过滤到今天到达的任何行。然后每天晚上,适当地更改分区定义,然后重新处理第一个分区。确保所有尺寸均为MOLAP,因为我假设它们不需要实时更改。 (出于性能原因,我会避免使用ROLAP尺寸。)

您可能必须按照here所述在连接字符串上设置“实时OLAP = true”属性。

答案 1 :(得分:1)

我相信具有正确分区的进程添加将为您完成此任务。这不是专家,但是这是我前一段时间从SQL Saturday开始的演示。 http://www.sqlsaturday.com/SessionDownload.aspx?suid=3708