Какая разница в оценке выражения в VAR против RETURN в переменной меры? - PullRequest
0 голосов
/ 05 октября 2019

Есть ли разница в (ОПЦИЯ 1) использовании VAR для оценки части выражения и (ОПЦИЯ 2) прямой оценке того же выражения в части ВОЗВРАТА переменной меры.

ОПЦИЯ 1

Test = 
VAR 
    previousperiod = LASTNONBLANK(PREVIOUSMONTH('Customer base'[Date]),1)
RETURN
    CALCULATE(SUM('Customer base'[Count]), FILTER(ALLSELECTED('Customer base'), 'Customer base'[Date] = previousperiod))

OPTION 2

Test = 
RETURN
    CALCULATE(SUM('Customer base'[Count]), FILTER(ALLSELECTED('Customer base'), 'Customer base'[Date] = LASTNONBLANK(PREVIOUSMONTH('Customer base'[Date]),1)))

Потому что, когда я выполняю OPTION 1, я получаю нужный результат, но с OPTION 2 я получаю все пустые значения.

1 Ответ

1 голос
/ 05 октября 2019

Форматированный вариант 1:

Test =
VAR previousperiod =
    LASTNONBLANK (
        PREVIOUSMONTH ( 'Customer base'[Date] ),
        1
    )
RETURN
    CALCULATE (
        SUM ( 'Customer base'[Count] ),
        FILTER (
            ALLSELECTED ( 'Customer base' ),
            'Customer base'[Date] = previousperiod
        )
    )

Форматированный вариант 2:

Test =
CALCULATE (
    SUM ( 'Customer base'[Count] ),
    FILTER (
        ALLSELECTED ( 'Customer base' ),
        'Customer base'[Date]
            = LASTNONBLANK (
                PREVIOUSMONTH ( 'Customer base'[Date] ),
                1
            )
    )
)

Переменные являются постоянными и оцениваются один раз! :Оценка выполняется при первом использовании в контексте оценки, где она определена.

Следовательно, в вариант 1 ,Предыдущий период VAR определен в хранилище контекста Evaluation, и значение передается в блок возврата

, тогда как в опция 2 ,

LASTNONBLANK (
                PREVIOUSMONTH ( 'Customer base'[Date] ),
                1
            )

вычисляется при его использовании, здесьв контексте строки итерации AllSELECTED («База клиентов»)

...