Я тестировал два варианта и получилось следующие benchmarks:
- Версия Паши средняя длительность: 8583 (скрин)
- Оригинальная версия средняя длительность: 8092 (скрин)
- Версия Павла Левчука с Valuese: 8820 (скрин)
Вот эти коды я тестировал.
Версия Паши:
DEFINE
MEASURE factmetrica[s] =
SUM ( factmetrica[Клики] )
EVALUATE
VAR _t0 =
SUMMARIZE (
factmetrica,
FactMetrica[Поисковая фраза (Директ)]
)
VAR _t1 =
ADDCOLUMNS (
_t0,
"idx", RANKX (
_t0,
[s],
,
desc,
DENSE
),
"sum", [s]
)
RETURN
ADDCOLUMNS (
_t1,
"pct_acc",
VAR _idx = [idx]
RETURN
SUMX (
FILTER (
_t1,
[idx] <= _idx
),
[sum]
)
/ CALCULATE (
[s],
ALLSELECTED ( FactMetrica[Поисковая фраза (Директ)] )
)
)
Оригинальная версия:
EVALUATE
VAR _facttablevar =
SUMMARIZECOLUMNS (
FactMetrica[Поисковая фраза (Директ)],
"Клики", SUM ( FactMetrica[Клики] )
)
VAR _clicksallvar = SUMX(_facttablevar, [Клики])
RETURN
ADDCOLUMNS (
_facttablevar,
"run",
VAR _clickvar = [Клики]
RETURN
SUMX ( FILTER ( _facttablevar, [Клики] >= _clickvar ), [Клики] ) / _clicksallvar
)
Версия 3 - С Values
DEFINE
MEASURE FactMetrica[s] =
SUM ( FactMetrica[Клики] )
EVALUATE
-- Paul Levchuk v2
VAR _t0 =
VALUES ( FactMetrica[Поисковая фраза (Директ)] )
VAR _t1 =
ADDCOLUMNS (
_t0,
"idx", RANKX (
_t0,
[s],
,
DESC,
DENSE
),
"sum", [s]
)
VAR _s0 =
CALCULATE (
[s],
ALL ( FactMetrica[Поисковая фраза (Директ)] )
)
VAR _t2 =
ADDCOLUMNS (
_t1,
"pct_acc",
VAR _idx = [idx]
RETURN
SUMX (
FILTER (
_t1,
[idx] <= _idx
),
[sum]
) / _s0
)
RETURN
_t2