reporting-services - 如何逐步处理 SSAS 多维数据集以加快速度?

标签 reporting-services ssas

我需要的是减少使用 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/

相关文章:

sql-server - 如何改进大表的读取操作?

reporting-services - SSRS - 从 CSV 文件导入数据以用作报表服务器上的数据源

reporting-services - SSRS表达式:文本框的值表达式具有范围参数,该参数对于聚合无效

ssas - MDX 函数 CURRENTMEMBER 失败,因为 'Date' 属性的坐标包含一个集合

filtering - MDX:定义维度子集并显示总计

r - 使用 R 连接到 SSAS 多维数据集

reporting-services - 在横向模式下打印报告

reporting-services - 在一个 Tablix 中而不是在另一个 Tablix 中的 TablixCell 错误中使用上一个聚合函数

sql-server - SSRS : Passing/Setting parameter to Dataset using Expression

excel - Excel Slicer 中的 SSAS 维度安全结果