我需要的是减少使用 AMO 的 SSAS 多维数据集的处理时间,同时将数据添加到数据仓库中的事实表。
根据微软关于 SSAS 的文档:
进程添加
“对于维度,添加新成员并更新维度属性标题和描述。对于度量组和分区,仅将新可用的事实数据和过程添加到相关分区。”
进程完整
“处理一个 Analysis Services 对象和它包含的所有对象。当对一个已经处理过的对象执行 Process Full 时,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 毫秒才能使用单行事实表更新多维数据集。这是典型的 SSAS ProcessAdd 时间和 Windows Server 2012 的 8 核 2.5GHz 机器吗?如果没有,如何将每行的多维数据集处理时间缩短到事实表?
最佳答案
根据您澄清您正在尝试实时刷新多维数据集,我建议您权衡哪个对您更重要。查询性能更重要吗?然后继续你正在做的事情,因为 MOLAP 查询性能将比我下面的 ROLAP 建议更好。
但是,如果更重要的是您在将新数据导入多维数据集时具有零延迟,那么我建议您切换到一些包括 ROLAP 的方法。
为了进一步描述 ROLAP 方法,我建议创建一个 MOLAP 分区,其中包含您的事实表中到昨天为止的所有数据。然后创建第二个分区,该分区设置为 StorageMode=ROLAP 并过滤到今天到达的任何行。然后每天晚上,适本地更改分区定义并重新处理第一个分区。确保您的所有尺寸都是 MOLAP,因为我假设它们不需要实时更改。 (出于性能原因,我会避免 ROLAP 维度。)
您可能必须按照 here 所述在连接字符串上设置“实时 OLAP=true”属性。
关于reporting-services - 如何逐步处理 SSAS 多维数据集以加快速度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53873455/