Спецификации и расчеты через «процент»

Готовлю следующую статью по каркасам и закладным в шаблоне Weandrevit (начало здесь), но для начала нужно разобраться, как работают расчеты через «процент».

Сразу скажу: этот метод изобрел не я. Упоминания про него есть на форуме Autodesk, в русскоязычной сфере метод популяризировал Дмитрий Чубрик, а конкретную реализацию «сборочных единиц» предложил Павел Сазонов. Я же только, как водится, слепил всё вместе и присвоил себе все лавры (идеально!). Здесь просто опишу идею своими словами.

Так в чем же идея?

Вычисление итогов

В спецификацию Revit можно добавить параметр «Число», который будет выводить количество элементов, попавших в эту строку:

Но параметр этот немного странный: например, его нельзя использовать в формулах.

Одна из самых частых ошибок начинающих: выводим длину одной детали и их количество через «Число», и хочется ещё дать суммарную длину. Надо ведь просто умножить длину на количество — но не тут-то было:

Если нужно получить общую длину, то поступаем иначе: в формуле просто приравниванием к «Длине», но затем для этого параметра включаем «Вычислять итоги»:

При включении этого флажка Revit просто суммирует все числа, попавшие в одну строку спецификации. Можно даже сымитировать параметр «Число», введя расчетный параметр со  значением «1» и тоже включив для него «Вычислять итоги»:

Теперь понятно, почему нельзя умножать на Число — это будет просто умножение на 1! Важно понимать, что даже если включена «Группировка» и мы видим в спецификации только три строки, то это только, так скажем, иллюзия. Все расчеты Ревит всё равно выполняет с каждым элементом отдельно (в моем примере формула посчитается 6 раз), и только после этого склеится в строки.

Ну, пока всё просто, это же азы Ревита. Или вы только начали изучать Ревит и не понимаете, о чем вообще речь? Записывайтесь на наш курс обучения!

Процент

Но что, если всё-таки нужно каким-то образом учесть в расчетах количество элементов? Самый житейский пример: оптовые цены ниже розничных, и если покупаем что-то в  большом количестве — цена будет меньше, чем за штучный товар. Получается, в Ревите это не реализовать, ведь формула для одного элемента не может узнать о других элементах? Способ есть!

Посмотрим, как работает расчетный параметр через «Процент»:

Такой параметр может показать, какую долю занимают значения в одной строке от общего значения. Например, на данной картинке выводится доля длины каждого типа стен от общей длины всех стен. Звучит пока не очень полезно, но главное — то, что значение зависит не только от элемента в этой строке, но и от других строк!

Можно посчитать процент от ранее созданного параметра со значением «1» — тогда получим долю количества элементов в этой строке от общего количества:

Ну и что толку с этого процента, скажете вы? Вот тут начинается главная магия: формула «1 / процент»!

Для начала включу в спецификации «Для каждого экземпляра». У меня 6 элементов и каждый, значит, имеет долю 100/6 = 16.7% ≈  17%:

16.7% можно записать как 0.167, и если посчитать «1 / 0.167» — снова получим исходное количество 6:

И это количество уже «реальное», в отличие от «иллюзии», созданной «вычислением итогов». Теперь элемент в первой строке знает, что он не одинок, а у него есть пять «братьев» — и число 6 можно использовать в формулах!

Кстати, если переключать сортировку, видно, что процентное значение меняется (как будто для него включено «вычислять итоги», хотя эта настройка для того параметра ничего не делает), но количество через «обратный процент» остается постоянным:

Можно посчитать «процентную долю» не от общего количества элементов, а внутри какой-либо группы. Для этого нужно, чтобы в спецификации была включена группировка по какому-либо параметру, и тогда в параметре процента можно считать не по «Общему итогу», а по этому параметру. Я сделаю побольше стен в разных типах, дам группировку по «Типу» и пересчитаю процент через «Тип»:

И вот каждый элемент в первой группе знает, что в этой группе шесть «собратьев», во второй — три и так далее. Кстати, выбирать для «процента» можно только параметры, по которым сделано группирование (ну оно и логично).

Ладно, всё это очень увлекательно, но как на практике-то применить?

Сценарий 1: оптовые закупки

Можно ввести формулу, результат которой будет зависеть от количества элементов. Предположим, если мы покупаем более 2 товаров одного типа, то нам дают скидку 20%:

Всё просто — проверяю количество, и если больше 2, то умножаю цену на 0.8.

Было бы ещё круто отсортировать спецификацию по размеру скидки или по количеству, чтобы в начале шли более «массовые» товары, а далее штучные, но почему-то в сортировке нельзя выбрать эти параметры:

Как думаете, почему? Пишите в комментариях!

Сценарий 2: среднее значение

В Revit помимо «Вычисления итогов» есть возможность получить минимальные и максимальные значения, свалившиеся в эту ячейку (появилось в Revit 2017):

Но можно ли получить среднее значение? Да!

Как бы мы посчитали среднюю длину калькулятором? Просуммировали бы все длины и поделили на количество. (Обращаю внимание, что если сложить максимальное и минимальное значение и поделить на 2 — получим медианное значение, а не среднее). В Ревите же мы сделаем наоборот: сначала поделим длину каждого элемента на их количество:

А затем включим «Вычислять итоги» для этой длины:

Проверяю: (2800+4900+4900+3300+4400+5100)/6 = 4233! Всё сходится. Можно и посимпатичнее всё оформить:

Сценарий 3: количество типов элементов

В спецификации видно, что в модели применены 4 типа стен. Но это я просто посчитал, тыкая пальцем в монитор. А можно ли именно получить в спецификации цифру 4? Да!

Для этого создам расчетный параметр с типом «Число» и просто приравняю его к «проценту»:

Сумма всех долей в одной группе равна 100%, поэтому, если включить «вычислять итоги» и убрать «для каждого экземпляра» — суммарное значение для каждого типа будет равно 1. А если теперь для этого параметра включить «Общий итог» — получим нужное нам число 4:

На этом пока всё! Ждите статью про использование этого метода для подсчета каркасов и закладных.