Showing posts with label Schedules. Show all posts
Showing posts with label Schedules. Show all posts

Friday, April 18, 2014

To/From Room Door Parameters

NOTE: This is a re-post from the HOK BIM Solutions blog

Prior to Revit 2014, these parameters were very unreliable and prone to error. With Revit 2014, we saw the introduction of a new family parameter called Room Calculation Point, which can help with reporting consistency. However be mindful of the fact that this setting has to be manually activated, otherwise the information will remain as unreliable as before. You can read more about the topic in this RFO thread.

Here are some facts about how these parameters work without the Room Calculation Point enabled:

  1. If rooms already exist on either side of a wall when a door is inserted, the room on the swing-side of the door will be set as the To Room;
  2. If the door is then flipped, the To/From Room parameters do not update. The user has to make manual adjustments if desired;
  3. If no rooms existed when a door was inserted, the first room added to either side of the door will be set as the To Room;
  4. Both doors and rooms have to be in the same model for these parameters to report. The schedule can reside elsewhere, however manual changes between the two reported rooms have to be made in the host model.

As you can see, the reported information is prone to error and highly unreliable. Another big issue is the fact that door swing direction does not imply “ownership”: a door could be swinging out of a room and technically belong to that space. It is also usually not possible to infer hardware functionality from swing direction and door “ownership” alone.

By enabling the Room Calculation Point, we can at least address data errors. The To/From Room parameters will then update consistently regardless of whether the door is placed before/after the rooms, or whether the swing direction is altered after placement.

As with a lot of things in our industry, there is no standard way of documenting doors: some include information for the room that the door “belongs” to, some include both To/From Room information, while others completely exclude these columns of data. I happen to be of the opinion that the latter is the most prudent choice, although the Room Calculation Point parameter makes me less concerned about data inaccuracy. However be very careful: changing the To/From Room parameter when the Room Calculation Point is enabled, will actually flip the swing direction! This is a behavior change that you really need to be aware of.

If you happen to use the To/From Room parameter to report “ownership” only, you can do so with even greater reliability by employing the following trick. The little leaders are hardwired in the family template to prevent them from crossing the Internal X-Axis:

RcP1

By shifting family geometry, you can then consistently report “ownership”. In the example below, both the To Room and From Room parameters will always report the room on the swing side of the door. Note that you can flip the To/From direction if you need to, although that would not change how these values are reported in the example below:

RcP2

The other very positive side-effect of doing this is that now you cannot accidentally flip the door direction from the schedule, since both To/From Room parameters will report the same data. If you want to report ownership based on the outswing-side, simply shift the geometry in the opposite direction. Please note that “ownership” rules cannot be changed at the instance level (ex: you have to commit ownership of a door to always be on the swing side at the family level), so if you need to change this and still use the Room Calculation Point, you will have to double up on your family definitions in a project, or employ some of the workarounds described in this RFO thread.


Share/Save/Bookmark

Sunday, October 9, 2011

Immaterial? I don't think so

This is a follow-up post to Immaterial? from almost a year ago. I promised to write about a new method we’re employing in one of my comments but got too busy. Finally I’m getting around to it. Be warned: it’s long.

I originally held off posting to see whether 2012 would bring any solutions on this front but that didn’t happen. At least now the bottom of the Custom Parameters section adjusts with the Materials dialog…hurray!

The least-worst solution I prefer is ugly workaround #1 as mentioned in the previous post. I hit a serious snag while experimenting but finally got through it. I like to refer to this methodology as the Materials sample board concept. Think about your office for a minute: you probably have a vast library of samples. This is analogous to the Materials dialog in your Revit project file. You don’t use all materials in your library in every project, nor do you schedule all materials used in your finish schedule (Ex: insulation, gypsum board, etc.). The same applies to Revit projects. Even assuming every material was actually used in some form or fashion, you’d want to only schedule a select few as finishes, which requires some filtering mechanism.

When crafting office-wide workflows, you have to be careful to keep things simple. This is a hard thing to do when the tools don’t do exactly what you want. So compromise is absolutely necessary in order to arrive to the best-possible solution. It won’t be perfect or satisfy every requirement, but will result in an improvement over how things are done today.

We all understand materials sample boards: designers pick paints, flooring materials, ceilings, glass, cladding, masonry & brick finishes etc. and present them on a board to get client approval. Those materials then find their place in the project, usually within room finish schedules, tagged elevations, etc. So my goal was to extend that concept into Revit. Presentation of those materials was not at all considered as you just cannot achieve that through print.

As discussed before, Revit will only schedule a material if it is used on a placed object. So the starting idea was to place “material swatches” in the project template and make them very difficult/impossible to delete by mistake, without resorting to obtuse ways of concealment such as through worksets, phasing or design options. This was a very important requirement so everything could be pre-set in the template, including the finish schedules. It was also very important to have the same materials used in the material finish schedule as materials in the objects themselves and utilize built-in & custom material parameters to store information that we want to see scheduled such as Manufacturer, Color, Pattern, etc. This would open up possibilities of building material libraries per client and/or project type to be re-used in the future.

Another important requirement was grouping of finishes by surface/object, such as Floor, Walls, etc. Since various materials (such as paints) could be used on different surfaces, it was also essential to have the ability to add unique schedule notes to each material in each application, which meant that this information could not be stored within the material itself. This issue, coupled with concealment methods, turned out to be a head-scratcher.

Material Swatches

The starting point was a simple generic model family that was to be placed multiple times in the template. After several iterations and reasons, it became clear that shared and nested families were required. Each shared “swatch” was nested multiple times into a base family that would represent the application/surface of those materials.

Material Sample Board Family

Multiple types were then placed in the template and editing these family types becomes the UI when building the finishes information. Type Comments is used for the schedule sub-headers and Schedule Order is for defining which application order is displayed in the material schedule.

Material Sample Board

In this example, I have 5 placeholder materials for each application but of course you could add more to suit your needs. Since we have 8 applications, 8 instances were placed in the template. The solid geometry of the swatch family was then set to not be visible and finally reloaded, making them completely invisible and unselectable.

Concealment

Here are some interesting family facts that made all this possible:

  • If family geometry is made to not be visible, material take-off schedules still pick up the materials used and properly report quantities (volumes/areas of materials on non-visible solids are excluded). Hence the use of this technique will not skew your take-offs.
  • Families are selectable in-canvas even with no visible geometry unless all reference planes are set to “Not a Reference”.

These are the key elements needed to let us place “swatches” to host finish materials and prevent accidental deletion. Note that one can still pick the family in the browser and delete it, but you also get a warning that you’re about to delete “x families”, so it would be a deliberate mistake or done purposefully and not accidentally.

Material Facts

As mentioned in the other post, only the material name can be used in room schedules. Revit does not permit duplicate names so this can be used very effectively as a “Type Mark” since duplication cannot occur. The only hitch is that you cannot rename a material in the schedule: you have to rename it in the Materials dialog.

By using the Material Class, you can isolate the materials that represent finishes to make navigation easier.

Material Class

In the above picture I’m also highlighting a big shortfall in Revit: the inexistence of multi-value parameters. For example walls in certain rooms often receive multiple finishes: a paint and ceramic tile or FRP panels. My workaround is to create materials whose name represents a group of multiple finishes. This is solely used in room schedules. For the record, this is not something I’m happy about! However there’s no other way to achieve this and when using text parameters, we’re essentially doing the same thing.

The Finishes Schedule

Material Finish Schedule

To build a material take-off schedule (for Generic Models) to filter only the materials in the “material sample board”, I simply filtered for shared parameter “Schedule Order” as “parameter exists”, which is also used for sorting the application order (Floors, Base, etc.).

Conclusions

So why all this pain you ask? Well, keep in mind that once this is set in your project template, all it takes is for users to pick the materials and edit as necessary or create new ones. It also opens up the possibility to save material libraries rich with information that can be re-used. Not to mention that with material tags that read the material name, you’ll have flawless coordination with the “type marks” used in your finish material schedule. Room finishes can also utilize these materials in lieu of text parameters, although for multiple finishes you have to resort to the workaround mentioned above. Finally, we also have to make another check: that each finish that shows up in the finish material schedule is actually used in the project since these are manually added. For this purpose we also set up a “checking sheet” that contains a series of filtered schedules to make sure no finishes have been missed or added. Obviously it would be great if things were all automatic, but at this point this is as good as it’s going to get.


Share/Save/Bookmark

Monday, October 18, 2010

Immaterial?

Materials in Revit are a source of frustration, at least for me.

When it comes to documenting a project as it evolves from SD to subsequent, more detailed phases, Revit fails to provide a solid solution that acknowledges the need for continuity in documentation. Not that there are no ways around the issue, but we’re not after disconnected workarounds in the end. We want a solution that provides seamless integration between the 3D model and visualization aspects, and the documented information such as material schedules.

Let’s take rooms as the prime example. In itself, a room is not a physical object that exists on it’s own. You cannot buy a “room”: it is made up of walls, floors, finishes, ceilings, lights, electrical fixtures, casework, furniture…you get the point. Traditionally, we schedule room finishes in tabular format with a column for each element of interest. Now we can argue whether this is or is not the best way to show finishes, but guess what? We’re not going to change how the industry expects it just because Revit wants you to do it differently perhaps!

So how does one integrate the Materials in Revit with the documentation expectations? Over the years (and recently too) I have toyed around with several ideas but they all break somewhere:

  • We can add a Material parameter to the room category. This gives us access to the actual Materials through a room object or a room schedule. Since a material parameter is a text entry pointing to a material name, it is easy to modify and doesn’t require you to take a trip to the Materials dialog if you know the material name.

Material_Project_Parameter_added_to_Rooms

  • The first issue we encounter with the above is that we can only schedule the material name through the room schedule. We expect to see names such as “CPT” for carpet etc. in the room finish schedule. To work around this, we can name our materials in abbreviated form and also assign a common Material Class to easily filter these “Scheduled Finishes” from any other materials used for visualization. The advantage of using real materials is that if we decide to change the type mark or keynote, it will update anywhere that material is used/tagged in the project. This gets us closer to using Materials throughout the entire project lifecycle and not just for visualization.

Materials_Dialog

Some comments about the above image: When are we going to see that darn Custom Parameters area be resizable instead of just tall enough for one parameter?? Also if you’re going to give us a Keywords parameter, let us schedule it! Otherwise what’s the point? Perfect use case: schedule filtering (ex: Keyword contains “Floor”). However for the time being, we have to add a custom project parameter assigned to Materials in order to do this (and scroll!).

  • We need to schedule the materials used in the project together with relevant information, such as Manufacturer, Line, etc. However unless materials are used in a model element that is placed in the project, they won’t schedule. Sadly, rooms are not seen as a model element, so creating a Room Material Take-off schedule is out of the question (big bummer). In SD, I don’t care about the area or volume of material used (for documentation purposes, we hardly ever care except if we’re doing detailed cost analysis), but I care about the material description, the manufacturer, etc. I don’t want to schedule every single finish that exists in the Materials dialog, but only those called out in the Room Schedule. So having some sort of “Material Schedule for Rooms” is sorely lacking in Revit. If this were possible, one could schedule materials as they’re added to rooms.

During SD, we only have a limited amount of modeled information. Simply put, the need for “documentation continuity” mentioned earlier means that as the design is refined and the information granularity increases, it needs to find its place in the documentation infrastructure that already exists in the project. For example if all I know is that I’m using paint P1 on walls in Room A100, I need to show P1 as my wall finish in A100 in a room schedule and once that happens, the material schedule should automatically add material P1 to it with all the relevant info. about that material. As design progresses and we pick a real material, that information should be reflected in the material rendering appearance and parameters, resulting in richer, coordinated visualization and construction documentation.

How are firms doing this right now? Unless I’m missing something and there’s actually a way to achieve what I’m describing, we can safely say that firms are doing it the old way: just type it and coordinate manually. This is just not acceptable with all the BIMwashing and hype out there.

Currently, possible ugly workarounds include:

  1. Making fake model families (ex: Generic Models) in some unused future phase and assign materials to them. This is synonymous with a physical “Material Sample Board” which is a standard thing in the industry. Now you create a material take-off schedule for the Generic Model category and go from there. However now we’re starting to have disconnected information: Just because a material schedules doesn’t mean it has been called out in a room schedule, and vice versa. Note that a similar technique is to use Design Options to segregate/hide these workaround elements in lieu of Phasing.
  2. Typing it! Can’t get uglier than that. With this solution (sadly, the most common one), you manually type up & draft a finish schedule in a drafting view, which you then have to manually coordinate with materials used in modeling elements, room finish schedule dumb text parameters, tags, etc. This is as un-Revit-like as it gets!
  3. Adding a zillion project parameters to the room category for each individual finish material application (floor, base, etc.) and then multiplying that by about 5 more (each one will need a unique description, manufacturer, etc.). Also with this you end up having to create separate schedules for each material application (Ex: walls) and…the actual Revit materials still have no connection to this information! This is the current solution we’re using in lieu of #2. It’s workable, but still not pretty. There are a lot of schedule gymnastics that need to happen to make it somewhat efficient.

Other shortfalls crop up while trying to make this work, such as the inability to have nested key schedules and the inability to use shared parameters in key schedules. But I’ll stop here today! Hopefully it is clear enough that we’ve exhausted a lot of avenues trying to get this to work and even though we build projects successfully, the software fails us from a BIM point of view. Despite these problems, we still love it and hope it gets better.


Share/Save/Bookmark

Friday, April 17, 2009

Conditional formatting

So Steve stole the thunder this week and you already know how to do conditional formatting in Revit schedules. That Steve is one quick guy but after all, his readership eclipses my little corner here! Jokes apart, we were talking about how I stumbled across this hidden tool when trying to activate the Manage tab with shortcuts in Revit 2010. Now I just hope Autodesk doesn’t close the loop-hole. And guys, if you’re listening, please just add a button as we can use this tool in Architecture! EDIT: As of Revit 2010 SP3, this functionality is officially available. Thanks for listening!

The main shortfall I noticed is the fact that you cannot do conditional formats based on other parameters. That would be high on my list of enhancements for this tool. To get around this bump, one has to leverage the power of calculated parameters in schedules to perform the number crunching. A simple Yes/No parameter could be used to raise a flag and your condition would just look for the value and format the cell accordingly.

We can actually add multiple conditions to test for, but it is very limiting because it assumes an “AND” operator between them. What if I want an “OR” (which is what one needs when testing to see if a parameter falls between certain values and criteria….they can’t all apply at the same time! An “AND” operator expects all conditions to be satisfied and would thus force the overall condition to fail). It also took me a while to figure out how to add or remove conditions from the list. By the way, why does this dialog use the label “Field” when referring to a parameter? Seems to lack consistency with Revit’s terminology.

So I’ll stop rambling now and discuss how I plan on using this new find. The first two things that spring to mind are to check for human errors (egress calculations) and for room area comparisons between actual and target area.

Checking Occupancy

Unfortunately Revit cannot do calculated parameters in tags (my jaws are hurting repeating this one!) and so we have to resort to a “stone age” method: use a calculated parameter in the schedule and then manually type a copy of the result into a shared parameter that is added to both the schedule and the room tag so you can display the information in plan. PS: You cannot use the built-in Occupancy parameter because it is Text….DUH!

Yes, yes I know, the API can be used to copy values for you probably, but WHY do I need to resort to this for something that is a required task on every job by every firm? I’m getting side-tracked again….

So at least now we can use conditional formatting to help us identify values that don’t match the calculated values, which would happen when room sizes change. Here’s an example calculated parameter:

Flag1

In the schedule Formatting tab, select the parameter you want to add the condition to and type Alt+N to reveal the hidden gem:

CF1

Schedule1Here’s an example of what the schedule would look like when values don’t match up.

Note: You can check the option Hidden field in the Formatting tab to hide the calculated parameter used for the condition and it will still work just fine.

Some observations: Null values are ignored in calculated parameters (see the yellow cells above) and in conditional formatting. My condition “Flag = No” is not being met because the value is null, yet Revit is not coloring my cells. This needs fixed!

Room Area

For this scenario, I want to ensure that Actual Area:

  1. Is never below the Target Area
  2. Is never more than 5% of the Target Area
  3. Never varies by more than 100 SF from the Target Area

So the formula for parameter Flag would be something like this:

or(not(abs(Area - Program Area) < 100 SF), % Area Variance < 0, not(% Area Variance < 0.05))

where Area is the Actual Area, Program Area is the Target Area, & % Area Variance is (Area - Program Area) / Program Area.

Here’s what the resulting schedule would look like:

Schedule2

In the above example I added a conditional format (in orange) to highlight cases when the % Area Variance was below 5%, but the area difference was 100 SF or more.

Some observations: It would be really valuable if we could specify the boolean between multiple conditions instead of having Revit assume an “AND” operator. And we should be able to specify different colors for the various conditions instead of just one!

If that were the case, one would be able to highlight rooms with areas above the target with one color, and others below the target with another color. Finally, I also noticed that for Yes/No parameters, the Conditional Formatting dialog would let me change the value of my parameter Flag to “Yes”, but it would revert it back to “No” when I clicked out of the dialog or clicked on something else. Not sure why.

All in all this tool is of great value and I’m sure lots of you will find various ways to use it. Let me know how you intend to implement it!


Share/Save/Bookmark

Monday, March 30, 2009

Volume Frenzy

In my last post I made mention to some behavior I ran across when scheduling volumes. The reported figures varied when scheduling Volume or Material: Volume, so I set out to study Revit’s logic. Note that Material: Volume is available in a Material Take-Off schedule, which is the schedule type used for these tests.

To understand the behavior, I ran 3 scenarios by creating a simple family made up of a 1’x1’x10’ solid and then scheduled it. Here are the first set of findings based on the solid’s LOD (Level of Detail):

Scenario 1

Next I added a 1’x1’x1’ “control” solid to further understand how these two volume parameters look at solids in families. This control solid was set to Fine only for now (in the same family).

Scenario 2

Lastly, I set the control solid to both Coarse and Fine.

Scenario 3

As you can see, these values vary depending on the LOD of solids within your families. So you have to be very careful how you build them if you intend to use them for quantity take-offs. I guess you can now understand why I used the word “Frenzy” in the post title ;)

I personally think this logic is a little crazy, but I’ll be eager to read your comments. At least now you have an in-depth study of Revit’s “logic”. Now on to a summary in words:

  1. For an object to schedule in a Material Takeoff Schedule, there HAS to be a solid set to Fine detail. A regular schedule doesn’t have this requirement.
  2. Material: Volume reads the Total of Fine solids.
  3. Volume reads the Total of Fine solids if no Coarse and or/Medium solids exist. Otherwise, it first reports the Total of Coarse solids and if there are none, it reports the Total of Medium solids.
  4. There's no clear cut winner of which is the most reliable parameter. My suggestion? If you want to schedule the volume of particular solids, make sure to set their LOD to Fine and then use Material: Volume. Why? Because it has less obtuse rules!

So I ask myself: instead of these “fuzzy” rules, why not have parameters built into each family template which we would use to control what and how volume is scheduled?

PS: Thanks to Daniel for the extensive brainstorming ;)


Share/Save/Bookmark

Tuesday, March 24, 2009

Scheduling the Unschedulable

The more we venture into BIM (taking real advantage of our Revit models), the more this subject is starting to tick me off. You’ve been warned!

Let’s take a look at what caused this “rant”.

FamCatParam

Here you can see the family parameter “Structural Material Type”. I want to use this really bad because I’m doing quantity take-off schedules for all elements, which include structural framing elements residing in a linked file. So I want to create a framing schedule for steel and another for concrete. The reason is that I want to find the total weight of each material in the job and as you know, concrete and steel have different densities.

So to calculate this, one can create a calculated parameter in the schedule and voila. I would prefer to expose the density used in the schedule (so everyone can see it. I don’t like to bury assumed values in formulas if possible). However since the families reside in a linked file, you cannot add this information to your project via a project parameter, so you can only have one formula with a fixed value (one density value). So the only way to do this is to create schedules for framing members with different densities. I know, I can get into the linked file, but that’s beside the point.

Unfortunately, you cannot schedule the above highlighted parameter, which would typically raise the question, then why the %^&**&?!!@? do we have it? How can I filter views/schedules of my insanely intelligent model? I cannot even filter by family name or type either!

This is only one little thing I came across and is very irritating. I found more issues when calculating volumes, but that will be another very lengthy post, so stay tuned.


Share/Save/Bookmark

Thursday, March 19, 2009

Schedule Discrimination

Here’s what I’m trying to do:

  1. I have multiple “Parts” built as shared families (Specialty Equipment);
  2. Then I’m building multiple Assemblies (also Specialty Equipment) made up of nested families from (1);
  3. I want to create a schedule for Assemblies and another for Parts.

There’s no direct way to do this. So I decided to add a Yes/No shared parameter to the Assembly families and filter the schedules for it. You don’t even need to worry about the value and just filter for it’s existence. Now I can easily build the Assembly schedule by filtering for parameter exists.

Schedule Discrimination

Notice how every filter option has an opposite (equals, does not equal, etc.), with the exception of parameter exists. Because of that, I cannot really filter for it’s non existence, which is forcing me to care about the value of the parameter instead. I deem that as discrimination!

So the solution is to check the parameter in the Assembly families and filter for equals “Yes” instead. The schedule will then grab all Assembly families. For the Parts schedule, set the filter to does not equal “Yes” (no need to add the parameter to the parts families).

Schedules


Share/Save/Bookmark

Sunday, March 1, 2009

Jumpy Text

This is one of the most annoying behaviors in Revit. I can’t believe that we’ll have to deal with it for at least another year. Pretty sad.

We need text, don’t we? Unfortunately creating project notes in Revit is a frustrating endeavor. Text re-formats itself depending on the zoom factor, which is totally insane if you ask me. Take a look at this animated gif.

Jumpy Text

So how do we deal with this issue? You could link in a dwg that contains your text, but this can potentially result in more headaches as mtext boxes are sometimes ignored by Revit. And honestly, I want to stop using DWG files altogether. Another huge limitation is the inability to indent text so you can number each paragraph and be able to adjust the column width of your text without resulting in a formatting do-over.

Back at AU2007, I learned a tip which I’ll be employing from now on. I feel really dirty using it, but there’s no other solution I can think of. I’m not sure where it originated but I learned about it through a hallway chat with the “Rock-n-Roll Architect”, aka Steven Shell. If you know who contributed it, please post a comment. Here it goes…

Create a Key Schedule for a category that you never use. No, the Roads category is not available ;) In this example I chose the Sprinklers category but you’re free to pick anything you want.

New Schedule

Notice the Name field. That’s the name of your key schedule in the project browser, and will also be your Title when you drag this onto a sheet. It’s not necessary to change it in this dialog since you can rename it later in the Project Browser. I named my example “GENERAL NOTES”. Next, type in a Key name and click OK, which leads us to the Fields tab.

Schedule properties

Add a new parameter to house your text notes; I used “MyText”. In the Sorting/Grouping tab, sorting will be set by default to the Key Name, which is exactly what we want. This will contain the numbering of each paragraph. To finish up, set your appearance preferences. In my case, I wanted a wide outline and turned off the option to Show Headers as we don’t really need them. Once you click OK, you’ll be in schedule editing mode which will just show the title (If you choose to not have a title, you’ll get a blank page). The next step is to add rows to your key schedule. Let’s use Revit’s new interface to illustrate (click animated gif for larger view).

KeySchedule

Now you just drag this onto a sheet and make final adjustments there. This should eliminate the problem of Jumpy Text. A couple of issues that you’ll face are the fact that you don’t have Project Browser sorting/grouping capabilities and that you cannot use the same schedule name twice, so you’ll have to get creative. One option is to have these key schedules named with a prefix so they’ll be grouped together in the Project Browser and separate from “real” key schedules (ex: txt_Roof General Notes). Then you would turn off the Title and just type in text directly on your sheet as seen below.

PS: Autodesk, PLEASE, this needs fixed. Seriously.

OnSheet


Share/Save/Bookmark

Tuesday, January 27, 2009

Metric and Imperial Areas in Schedules

Here's a quick tip on how to create a schedule to show the same information but use different units of measure. I've been pondering whether this was too "simple" to post, but it did have me scratching my head for a while yesterday! After all I'm allowed to post newbie tips too ;) At first I thought I might have to place two schedules side by side, but as we shall see, it's not necessary.

Start by creating a room schedule and add the fields you want. Let's say you added Area and you left the units to use project settings, which are typically Imperial for us in the US (it's about time we move to metric!). Now what if I want another column to list the Area once again but in different units? Once we move the Area field from the "Available" column to the "Scheduled" column, we cannot add it again. So how do we get around this?

The answer is simple: create a calculated value. Don't get stuck thinking that this is just used for complex formulas. This can be as simple as being equal to another parameter. So simply type in "Area" as the formula, give it a name (such as Area_M) and you're set. Now go to the Formatting tab, select the newly created calculated value and change the units by clicking the Field Format button. This technique can also be used for length parameters or anything else that can be reported with different units.

image


Share/Save/Bookmark