Ваше выражение CALCULATE
ссылается на несколько столбцов в простом выражении предиката.В частности, эта часть недопустима в DAX:
AND (
'tm-all-late-flag'[tm-all-late-flag-1.emtrac.index] <> BLANK (),
'tm-all-late-flag'[Vehicle-work] <> BLANK ()
)
Это ссылка на два столбца.
Вы можете легко изменить рефакторинг на использование двух простых предикатов в CALCULATE
, так как все аргументы фильтралогически И вместе:
CountAllVehicleLateEmtracWork =
VAR t =
SUMMARIZE (
'tm-all-late-flag',
'tm-all-late-flag'[Date],
"tripDistinct", CALCULATE (
DISTINCTCOUNT ( 'tm-all-late-flag'[tm-all-late-flag-1.emtrac.index] ),
'tm-all-late-flag'[tm-all-late-flag-1.emtrac.index] <> BLANK (),
'tm-all-late-flag'[Vehicle-work] <> BLANK ()
)
)
RETURN
SUMX ( t, [tripDistinct] )
Кроме того, вы можете упростить и улучшить производительность с помощью рефакторинга, как показано ниже.Ваш VAR t
материализует промежуточную таблицу в памяти и затем выполняет итерацию этой таблицы.Мы можем избежать этого промежуточного распределения следующим образом:
CountAllVehicleLateEmtracWork =
SUMX (
VALUES ( 'tm-all-late-flag'[Date] ), // VALUES returns the unique values in a column
// Rather than materializing a new column, we can just return the count inline in
// the SUMX.
CALCULATE (
DISTINCTCOUNT ( 'tm-all-late-flag'[tm-all-late-flag-1.emtrac.index] ),
'tm-all-late-flag'[tm-all-late-flag-1.emtrac.index] <> BLANK (),
'tm-all-late-flag'[Vehicle-work] <> BLANK ()
)
)
Кроме того, вы можете рассмотреть возможность замены 'Table'[Field] <> BLANK ()
на NOT ( ISBLANK ( 'Table'[Field] ) )
.В DAX 0 = BLANK ()
оценивается как ИСТИНА.Вы исключаете как пробелы, так и нули.