Оцените выражение Dax на уровне листа, затем суммируйте результаты

Я пытаюсь по существу имитировать поведение выполнения вычисления T-SQL внутри подзапроса и суммирования результатов этого вычисления во внешнем запросе в DAX.

На уровне листа у меня есть следующий простой расчет:

ROUND((SUMX('Profile Category Views',  'Profile Category Views'[Visit]) * 1.52 ) , 0)

Для каждой строки 'Profile Category Views'[Visit] = 1.

Этот расчет верен на конечном уровне, однако, когда я суммирую результаты суммы, расчет применяется во время выполнения на более высоком уровне, искажая результаты.

Пример

Как показано на изображении выше, расчет был применен к строке деталей. Однако общий итог = 43, который показывает, что вычисление было применено снова после суммирования необработанного итога строк подробностей, а не суммы всех строк подробностей после применения начального вычисления, которое было бы = 44.


person Scott Cooke    schedule 10.01.2018    source источник


Ответы (2)


Это немного некрасиво, но это может сработать для вас:

= SUMX(VALUES('Profile Category Views'[Geography]),
       ROUND(
           SUMX(
               FILTER('Profile Category Views',
                   'Profile Category Views'[Geography] = EARLIER('Profile Category Views'[Geography])),
               'Profile Category Views'[Visit] * 1.52)
          ,0))

Для каждого значения [Geography] мы берем промежуточный итог и округляем его. (FILTER должен убедиться, что внутреннее SUMX суммирует каждое значение [Geography] по одному. EARLIER вернет контекст фильтра из внешнего SUMX, то есть текущее значение [Geography].)

person Alexis Olson    schedule 10.01.2018
comment
К сожалению, не сработало - дали очень большую сумму? - person Scott Cooke; 11.01.2018
comment
Трудно отлаживать, не имея возможности видеть весь контекст, но это также может суммировать по всем значениям [Category]. Вероятно, вам также следует включить это в фильтр. - person Alexis Olson; 11.01.2018

Если вы хотите суммировать округленные суммы, но все же округлить общую сумму, что-то вроде

(SUMX('Profile Category Views',  ROUND('Profile Category Views'[Visit] * 1.52,0) ))

т.е. округлить детали на самом низком уровне.

person fauxmosapien    schedule 10.01.2018
comment
Внешний ROUND здесь кажется лишним. - person Alexis Olson; 11.01.2018
comment
Это не случай двойного округления. Мне нужно, чтобы округление применялось только на самом низком уровне, после того как расчет и округление были применены, я хотел бы просуммировать значения, чтобы получить итог. - person Scott Cooke; 11.01.2018