我需要在将数据添加到数据仓库中的事实表时,使用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的典型时间吗?如果没有,如何改善事实表每行的多维数据集处理时间?
答案 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