Powerbi 在PBI中使用计算和过滤器进行测量
我有一个带有3个可视过滤器(日期、国家和类型)的报告,还有一个表,其中列出了应用过滤器的门店和运营商数量。我添加了一个列,其中包含满足条件的操作数,但是这个度量非常慢 以下是措施: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 ||
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
)
)
)