DAX: оптимизировать измерение в табличной модели SSAS 2012 - PullRequest
0 голосов
/ 11 сентября 2018

-Я использую табличную версию SSAS 2012 SP4.Куб содержит 2 таблицы фактов, каждая из которых использует одни и те же таблицы измерений (= 7 таблиц измерений).Между двумя таблицами фактов не определено никаких отношений.

- В таблице Fact2 настроена следующая мера:

Measure1 :=
IF (
    SUM ( Fact1[ColumnA] ) = 0,
    BLANK (),
    IF (
        SUM ( Fact2[ColumnB] ) > 0,
        SUM ( Fact1[ColumnA] ) / SUM ( Fact2[ColumnB] ),
        99
    )
)

Мой отчет Excel очень долго обновляется при отображении этой меры и несколькихАтрибуты.

- Когда я активирую трассировку профилировщика, я вижу, что время, проведенное в Formula Engine, составляет 80%.Я попытался переписать запрос с помощью функции DIVIDE () следующим образом:

Measure1 := DIVIDE(sum(Fact1[ColumnA])/sum(Fact2[ColumnB]),99)

В этом случае отчет быстрый, а продолжительность запроса лучше.Но так как я удалил функцию IF, я больше не проверяю "if sum (Fact1 [ColumnA]) = 0"

Можно улучшить рефакторинг этой формулы DAX, чтобы улучшить производительность.И сохраняете чек «IF sum (Fact1 [ColumnA]) = 0 THEN BLANK ()»?

Большое спасибо за помощь Em

1 Ответ

0 голосов
/ 11 сентября 2018

Конечно, попробуйте это:

Measure 1 :=
VAR SUMA =
    SUM ( 'Fact1'[ColumnA] )
VAR SUMB =
    SUM ( 'Fact2'[ColumnB] )
VAR QUOT =
    DIVIDE ( SUM ( 'Fact1'[ColumnA] ), SUM ( 'Fact2'[ColumnB] ) )
RETURN
    SWITCH ( TRUE (), SUMA = 0, BLANK (), SUMB > 0, QUOT, 99 )

Если вы не можете использовать переменные в своих показателях, попробуйте следующее:

Measure1 :=
SWITCH (
    TRUE (),
    SUM ( 'Fact1'[ColumnA] ) = 0, BLANK (),
    SUM ( 'Fact2'[ColumnB] ) > 0, DIVIDE ( SUM ( 'Fact1'[ColumnA] ), SUM ( 'Fact2'[ColumnB] ) ),
    99
)

Еще один способ - создать вычисляемый столбец, например:

result := DIVIDE ( SUM ( 'Fact1'[ColumnA] ), SUM ( 'Fact2'[ColumnB] )
)

Затем напишите меру против него следующим образом:

Measure1 :=
SWITCH ( TRUE (), [result] = 0, BLANK (), [result] > 0, [result], 99 )

Я не проверял ни одного из них, поэтому не уверен, какова будет их производительность.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...