知识库 : 维表与事实表关联时进行反向过滤

在进行Olap计算的过程中,会遇到计算成员对应指标值的情形。当某一维度的成员数量过多时,就会产生许多次的求值计算。然而在实际计算过程中,维表中的成员数据可能在事实表中都没有出现过。这就会造成资源的浪费,执行效率降低。之前出现过NotEmpty函数执行效率低下的问题,当时的处理方式是在维表对应的语义模型中增加一个过滤条件,实际的目的也是通过维表与事实表进行关联,反向过滤出在事实表中存在的维表数据。具体操作截图如下图1所示。

这种方式可以解决一部分效率问题,但是通过这种方式解决,需要用户查看维表和事实表中关联的字段,自己手动添加过滤表达式。如果维表字段名称变化后,过滤条件也需要进行相应的修改,十分繁琐。

目前的处理方式是在构建维表数据时,自动查看是否需要关联事实表中的数据。如果需要,就在维表数据后面拼接过滤条件,拼接的条件如下

where dim.pk in (select fact.foreignKey from fact)

这样就能够保证维表数据中都是事实表中发生的数据,不会出现与指标计算没有意义的维度成员数据。

Attachments: