【问题标题】:DAX Optimization - CALCULATE, COUNTROWS, FILTER, RELATEDTABLEDAX 优化 - 计算、计数、过滤、相关
【发布时间】:2020-07-14 16:52:59
【问题描述】:

我创建了以下度量来计算一段时间内的设备事件。

用户可能会意外输入日期在设备调试和退役日期之前或之后的事件。在这些情况下,我们需要排除这些事件。 Event Date 与 DateTable[Date] 有关系。

应该注意的是,每台设备都分配给一个设施。 在添加 RELATEDTABLE 之前,我无法使用 Facility 作为类别来获得我需要的视觉效果。

这项措施完全符合我的要求。但是,我觉得它非常缓慢且效率低下。

Event Count =
  CALCULATE (
     COUNTROWS ( 'Events' ),
     FILTER (
       RELATEDTABLE( 'Equipment' ),
        ('Equipment'[CommissionDate] <= MAX ( DateTable[Date])
       || ISBLANK ( 'Equipment'[CommissionDate]))
       && ('Equipment'[DecommissionDate] >= MAX ( 'DateTable'[Date] )
       || ISBLANK ( 'Equipment'[DecommissionDate] ))
     )
   )

任何关于改进的想法都会非常有益。

【问题讨论】:

  • 优化很大程度上取决于您的数据模型和评估度量的设置。因此,您需要提供更多信息,例如关于以下各项的基数和粒度:(1) 所涉及的表和 (2) 您希望使用此度量的可视化。

标签: filter powerbi dax


【解决方案1】:

根据经验,在后端加速 DAX 移动计算。因此,问问自己:我真的需要在 DAX 中动态地进行此计算,还是可以是在后端计算的静态标志?

因此,我将在后端“EVENTS_TO_EXCLUDE_FL”中创建一个标志,以便输出与以下内容相同:

('Equipment'[CommissionDate] <= MAX ( DateTable[Date])
       || ISBLANK ( 'Equipment'[CommissionDate]))
       && ('Equipment'[DecommissionDate] >= MAX ( 'DateTable'[Date] )
       || ISBLANK ( 'Equipment'[DecommissionDate] ))
     )

那么,你的度量变成:

Event Count Optimized =
  CALCULATE (
     COUNTROWS ( 'Events' ),
     'Events'[EVENTS_TO_EXCLUDE_FL] = 0
   )

【讨论】:

  • 我很高兴这种方法解决了您的问题。另外,我很高兴分享一个规则,根据该规则,应该在 DAX 中专门执行必须使用 DAX 动态完成的操作。
  • 谢谢!我能够让它工作,但使用计算列。我对 Power Query 不是很熟练,也无法弄清楚如何利用必要的关系。这在短期内是一个不错的方法吗?计算列是否在“后端”计算?
  • 取决于 (1) 模型的范围,是 1GB 还是 100GB,以及 (2) 列的基数,因为计算的列没有被压缩。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-17
  • 2022-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多