我有一个报告,其中包含3个可视过滤器(日期,国家和类型),以及一张表,其中列出了带有过滤器的商店和运营次数。我添加了一个列,其中列出了满足条件的操作数量,但是这种方法非常慢。
在这里测量:
Nº operations with conditions = CALCULATE('OPERACIONES'[Nº lines];
FILTER('OPERACIONES';'OPERACIONES'[id_type_sale] = 4 ||
'OPERACIONES'[id_type_sale] = 5 ||
( 'OPERACIONES'[line_sin_origen]=1
|| 'OPERACIONES'[line_fuera_plazo]=1
|| 'OPERACIONES'[line_manual]=1)
))
我认为它很慢,因为FILTER函数正在过滤表中的所有数据(该表有数十亿条记录)
我如何改善这项措施?
谢谢!
答案 0 :(得分:1)
我建议创建一个计算列,该列仅对每一行的条件进行一次评估。
SatisfiesConditions =
IF (
'OPERACIONES'[id_type_sale] = 4
|| 'OPERACIONES'[id_type_sale] = 5
|| 'OPERACIONES'[line_sin_origen] = 1
|| 'OPERACIONES'[line_fuera_plazo] = 1
|| 'OPERACIONES'[line_manual] = 1,
1,
0
)
那么您的度量可以简化为
Nº operations with conditions =
CALCULATE (
'OPERACIONES'[Nº lines];
'OPERACIONES'[SatisfiesConditions] = 1
)
答案 1 :(得分:0)
尝试一下:
Nº operations with conditions :=
CALCULATE (
[Nº lines];
'OPERACIONES'[id_type_sale] = 4
|| 'OPERACIONES'[id_type_sale] = 5
|| 'OPERACIONES'[line_sin_origen] = 1
|| 'OPERACIONES'[line_fuera_plazo] = 1
|| 'OPERACIONES'[line_manual] = 1
)
在某些情况下,我注意到通过仅删除FILTER函数并隐式过滤,可以显着提高性能。
另一个选项可能是这样(未经测试):
Nº operations with conditions :=
CALCULATE (
[Nº lines],
KEEPFILTERS (
FILTER (
SUMMARIZE (
'OPERACIONES',
'OPERACIONES'[id_type_sale],
'OPERACIONES'[line_sin_origen],
'OPERACIONES'[line_fuera_plazo],
'OPERACIONES'[line_manual]
),
'OPERACIONES'[id_type_sale] = 4
|| 'OPERACIONES'[id_type_sale] = 5
|| 'OPERACIONES'[line_sin_origen] = 1
|| 'OPERACIONES'[line_fuera_plazo] = 1
|| 'OPERACIONES'[line_manual] = 1
)
)
)