Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powerbi 在PBI中使用计算和过滤器进行测量_Powerbi_Dax_Measure - Fatal编程技术网

Powerbi 在PBI中使用计算和过滤器进行测量

Powerbi 在PBI中使用计算和过滤器进行测量,powerbi,dax,measure,Powerbi,Dax,Measure,我有一个带有3个可视过滤器(日期、国家和类型)的报告,还有一个表,其中列出了应用过滤器的门店和运营商数量。我添加了一个列,其中包含满足条件的操作数,但是这个度量非常慢 以下是措施: Nº operations with conditions = CALCULATE('OPERACIONES'[Nº lines]; FILTER('OPERACIONES';'OPERACIONES'[id_type_sale] = 4 || 'OPERACIONES'[id_type_sale] = 5 ||

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

如何改进此措施


谢谢

我建议创建一个计算列,只对每行的条件进行一次计算

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
)
试试这个:

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函数和隐式过滤可以显著提高性能

另一种选择是这样的(未测试):


谢谢你的回答。这是一个很好的解决方案,但我使用直接查询SSAS-T,无法在Power BI中添加计算列。我可以在模型SSAS-T中添加列,但在更改我的模型之前,我正在搜索其他解决方案。@Mathemagician有可能仅为视觉过滤器过滤的数据计算度量值吗?是的,DirectQuery应该只提取视觉过滤器所需的数据。谢谢您的回答。第一种解决方案不可能,因为条件会影响不同的列。但我正在使用一个解决方案,就像你的第二个建议,它工作得更快。这是一个大量的尝试和错误,我建议获得DAX工作室,它是一个非常有用的工具,可以帮助调整您的DAX措施。希望你能找到你的解决方案!这是对不同表中的列进行keepfilter和多条件筛选的一种很好的模式。请您添加另一种模式,以便对两个不同维度表中的列进行筛选。假设我们想要dim1[颜色]=红色或dim2[大小]=大。可能使用SummaryColumns(听说它比Summaryze更快,并且可以处理多个表)。我将不胜感激。
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
        )
    )
)