Оптимизация DAX - РАСЧЕТ, ЗАДНЯЯ ЧАСТЬ, ФИЛЬТР, СВЯЗАННЫЙ СТОЛ - PullRequest
1 голос
/ 02 апреля 2020

Я создал указанную ниже меру для подсчета событий оборудования во времени.

Пользователи могут случайно ввести События с датами до или после даты ввода в эксплуатацию оборудования и вывода из эксплуатации. В этих случаях нам необходимо исключить эти события. Дата события имеет связь с 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 Ответ

1 голос
/ 05 апреля 2020

Как правило, для ускорения DAX перемещайте вычисления на серверную часть. Поэтому спросите себя: действительно ли мне нужно делать это вычисление динамически в DAX или это может быть флаг stati c, рассчитанный на бэкэнде?

Поэтому я бы создайте флаг во внутреннем интерфейсе «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
   )
...