使用CALCULATE和FILTER在PBI中进行测量

时间:2019-02-13 15:58:12

标签: powerbi dax measure

我有一个报告,其中包含3个可视过滤器(日期,国家和类型),以及一张表,其中列出了带有过滤器的商店和运营次数。我添加了一个列,其中列出了满足条件的操作数量,但是这种方法非常慢。

enter image description here

在这里测量:

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函数正在过滤表中的所有数据(该表有数十亿条记录)

我如何改善这项措施?

谢谢!

2 个答案:

答案 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
        )
    )
)