ну может в каких-то случаях код будет длиннее, но преимуществ однозначно больше:
1. На больших и сложных моделях данных экономится время расчета - что архиважно для конечного пользователя.
2. Писать и редактировать (и еще понимать, что понаписал по истечению времени) гораздо проще с переменными, особенно "трехэтажными". Может Вам еще не приходилось, но когда функция состоит из 30-ти строк (субъективно) и более - разница очень сильно чувствуется в удобстве работы.
Вот пример сложной меры из реального кейса (динамический расчет АВС-анализа:
Скрытый текст |
---|
Код |
---|
ABC Клиенты =
VAR SalesByGroup =
ADDCOLUMNS (
ALL ( 'dCustomers' ),
"@ProdSales", [факт_сумма руб.]
)
VAR AllRecords =
CALCULATE (
[факт_сумма руб.],
ALL ( 'dCustomers' )
)
VAR CumulatedPctByGroup =
ADDCOLUMNS (
SalesByGroup,
"@CumulatedPct",
VAR CurrentSalesAmt = [@ProdSales]
VAR CumulatedSales =
FILTER (
SalesByGroup,
[@ProdSales] >= CurrentSalesAmt
)
VAR CumulatedSalesAmount =
SUMX (
CumulatedSales,
[@ProdSales]
)
RETURN
DIVIDE (
CumulatedSalesAmount,
AllRecords
)
)
VAR ProductsInClass =
FILTER (
CROSSJOIN (
CumulatedPctByGroup,
'Classes ABC'
),
AND (
[@CumulatedPct] > 'Classes ABC'[Lower Boundary]/100,
[@CumulatedPct] <= 'Classes ABC'[Upper Boundary]/100
)
)
VAR Result =
CALCULATE (
[факт_сумма руб.],
KEEPFILTERS ( ProductsInClass )
)
RETURN
Result |
|
Возможно, без переменных код будет короче, но попробуй его разбери - как оно работает. С переменными можно понять логику даже со стороны