BILT Speaker

BILT Speaker
RevitCat - Revit Consultant
Showing posts with label integer. Show all posts
Showing posts with label integer. Show all posts

Monday, 5 August 2019

Using Count Parameter in Revit Schedule Formulas

Anyone who has tried to master Revit Schedules would have encountered all kinds of limitations.  One of those is the limitations on which parameter types can be used in a calculation:

These parameter types can be used in formulas:
  • Number
  • Integer
  • Length
  • Area
  • Volume
  • Angle
  • Yes/No
  •  <Family Type..>
  • etc
They are all basically a number or a choice between items that have a number hidden behind them (Y/N  or <Family Type..>

The following parameter types cannot be used in formulas:
  • Text
  • URL
  • etc
They are some kind of text, which is all too hard for Revit to cope with (poor little Revit).

There is another kind of schedule parameter, which is not listed above (because it is a system parameter that you cannot choose from a list of types): 

        "Count", which is just a number (always = 1 for each item).


However, if you try to use this in a schedule formula, Revit gets very uppity and says you cannot.


This is unprecedented in Revit - a message that actually explains why it can't do what you want!
  • In case its not obvious what this means, it is referring to when you uncheck "Itemise every instance" under the Sorting/Grouping tab.

However, it is quite likely that you do actually want to perform a calculation on the combined result when multiple elements appear on the same row.  If not that, you may want to calculate per item and then total up the results of your calculation.  Here is my workaround:

Count Dracula Formulas

In your schedule, you can create your own "Count" parameter:
         a Calculated Value with a formula = 1

You could call it "Dracula", but that might confuse everyone later, so its better to use something more prosaic like "MyCount"
MyCount formatted to No Calculation

Don't forget to format your Count Dracula parameter to 'Calculate Totals' otherwise it will list only 1 even for multiple elements per row (as above).
MyCount formatted to Calculate Totals

Once you have 'MyCount' working, you can include it in a formula:
  • You may have a numeric parameter - say 'Num Shelves', which represents the number of shelves in a unit.
  • This can be multiplied by your Count parameter in a new 'ShelfCount' calculated value

Revit is quite happy to include "Dracula" or "MyCount" in the formula even though it is doing the same job as the system parameter 'Count'.

The formula could include an if statement:

Or you could put a formula directly into your 'MyCount' parameter

NB  . The last two formulas were somewhat superfluous, but just shown to demonstrate that you can create formulas with your own Count parameter.  For a more realistic example, refer to my previous post on Hiding Zeros in Schedule Formulas

This workaround removes one of Revit's many limitations - the programmers obviously put that one in deliberately to prevent "wrong workflows", but in reality they didn't anticipate all our requirements with schedule formulas. [Yes, my spellchecker doesn't like "formulas", but then I never liked learning Latin, so I'm not changing it!]

For more information about Revit Schedules, refer to this index of Schedule blog posts
 

Sunday, 28 July 2019

Arrays in Revit Global Parameters

Continuing with the theme of  Global Parameters in Revit . . . . .

Global Parameters and Arrays


Global parameters do not directly support arrays – you cannot associate a parameter to an array number in a model (unlike the ability to do so in the family editor).

When you select an array number in a project, have a look at the Options Bar - there is no label for you to associate a global parameter.












In the family editor, when you select an array number - there is a label on the Options Bar for you to associate a family  parameter to the array number.

 

 

 

 

 


Workaround


To work around this Global Parameter limitation, you need to build the array into an external family:
  • The family needs to have an integer instance parameter - this can be created directly when associating the array number (or created prior).
  • The array could consist of nested families or arrayed elements - it is usually much easier to control the array when it is a nested family, but that may slow response times if there are too many levels of nesting.
  • If you need to be able to schedule, tag or select individual families in the project (from the array), then the nested family should be 'Shared'.

  • Once you have associated the array number to a controlling parameter, it is wise to use that as a check parameter, to prevent users from inputting a value of less than 2 - because this would break the array.
  • You need to then create a User Input parameter, which is the one used in the project.
  • The check parameter is then driven by the User Input array number, with a check formula in place to prevent an input less than 2

  • Load the family into project then its instance property (Array Number) can be associated to a global parameter.

Once this is set up, your nested family array should be driven by Global Parameters in the project.

If you would like Autodesk to fix this annoying limitation, please go to Revit Ideas to vote:

Enable global parameters to associate to Array Numbers