Building Information Modeling (BIM) is a tool to document and manage the construction process. But can it be used as a data visualization tool? Are there capabilities inherent to BIM software that make it a useful tool in this capacity? This post will show you how to visualize complex data with BIM.
There are a number of really good data visualization applications on the market such as Tableau and Spotfire. However, these products work best with 2D data. You cannot import a 3D model. Sure you can use Processing or D3 to create a custom 3D visualization, but what if you want to visualize data related to the physical environment? Can you use BIM software as a data visualization tool?
One of the major advantages BIM software has over data visualization tools is the ability to view data in three as well as two dimensions. Most BIM authoring tools (like Revit and ArchiCAD) can associate additional information to model elements through custom parameters.
Using this capability, BIM can help clients better understand their data as it applies to the physical environment, even beyond the construction, management and operation of their facilities.
As Thomas Fisher states in his podcast interview with Enoch Sears on “The Business of Architecture”, architects are spatial analysts and strategic thinkers. We can help clients visualize problems. A building is just one outcome. Data visualization is another.
Building the Visualization Model
I’m going to use a fairly simple model to illustrate some data visualization techniques. The model is for a large retail store. I’m going to visualize data related to products on the shelves. This is just one example, however. I believe these concepts can be applied to many different contexts.
I will be using Revit Architecture for this example. Rather than model the store shelves in detail, I’m going to use a generic block to represent particular products on a shelf. Each block contains a number of custom parameters which are setup as shared parameters in Revit. Location information such as aisle and row are included, as well as the product name, category and description. The block objects also have parameters for credits, damages, returns etc. Additional parameters can be added as needed.
The block objects are sized and positioned relative to their actual location in the store. As you can imagine, there are a lot of product objects in the model.
Inserting the Data
With the model complete, I can now focus on inserting the product data into the objects in the model. Since each product has a unique number that corresponds to its aisle, row and shelf location in the store, I can easily automate the process using a spreadsheet and a Revit macro. I will share this macro in a future post.
The data import macro simply reads the spreadsheets, then loops through all the product objects in the Revit model. Using the product’s unique ID, the macro matches up the spreadsheet row to the current product object and maps the data to the correct parameter.
Mapping the Data
In order to visualize the product data in the model, I use filters in Revit to color code the products based on their parameter values. I want to show a color gradient that reflects the parameter value. Light pink represents a small negative value while bright red is a large negative value. Likewise, light blue is a small positive value while dark blue is a large positive value. This allows the user to quickly scan the map and identify major problem areas, such as a lack of products sales or recurring damages.
Then I create a series of filters for the range of values. Since some parameters may have numbers in both the positive and negative range, I create a total of ten filters for each parameter (five in the positive direction and five in the negative direction). The increment can vary — I am going to use 100. As you see below, the number of filters in the model increases dramatically the more parameters you want to visualize.
Once the filters are created, I edit the current view’s graphic settings to apply colors to the filters. I overwrite the pattern settings to display the color and select a range of red and blue shades to create a gradient.
One downside to this approach is that I have to pre-determine the intervals in my filters. They don’t adjust to the actual values of the parameters. To get around this limitation, I experimented with Revit’s analysis framework. This is a lot more involved than simply using filters. You can only access the analysis framework through the Revit API. In addition, the analysis visualization applies itself to the entire model. In order to visualize different parameters, you need to re-run the macro for each parameter. I will talk more about using the analysis framework in a future post.
Another option is BIMRay’s ColorByNumber add-in for Revit. This tool quickly colors the model based on parameter values. Unfortunately it doesn’t do gradients across a range of values. Hopefully this feature will be added in the future.
For the time being, filters are the easiest and most flexible option for visualizing parameter values in Revit.
Creating Heat Maps
Since the filters color-code the individual products, you have to look closely to identify problem areas. For the visualization to be effective, we need a way to quickly identify problem areas within the store.
While doing some research into data visualization techniques, I came across a type of map called a choropleth. We’ve all seen choropleth maps. Imagine a map of the United States showing population density by state using shades of the color blue (link).
What we need is a choropleth map of the store.
Back in Revit, I create a grid of room separation lines across the store and add a room object in each square. Rooms in Revit are really flexible. You don’t need walls to define them because room separation lines act as a boundary. I make sure each grid square is roughly equal in size and that each square “room” has a unique name and number.
Using each product block’s “room number” parameter, I can easily filter a schedule to show just the products in a particular grid square. I can also get totals for the parameter values.
In order to compare specific parameter totals across grid squares, I add some additional parameters to the room objects. Just what we need, more parameters! I use another macro to go through each grid square and calculate the parameter totals for all the products in that grid square. The macro then adds the total values to the Revit room objects.
Once I have the totals in the room objects, I can again use filters to color code the values for each grid square.
This view is a lot more effective for displaying the data. Instead of hunting for individual values, you can quickly get a sense the relative “health” of the store for a given parameter. From this overview, you can then drill down into the grid square to see which products are having problems.
From the detail view, you could determine if a product on a lower level is selling more less than a similar product on a higher level. Likewise, you could see if products at the back of the store sell more slowly than those in the front. You could also check if products at the end of an aisle are more likely to get damaged than those in the middle of an aisle. There is a whole range of information that can be gained from viewing the data in this format.
The example above is just a prototype for how BIM can be used to visualize a client’s data. The approach works but it could definitely be improved.
One of the major issues is managing the complexity of the model. There is a lot of data, filters and views to manage and update. Also, the data in this example is static. It needs to be updated manually by importing spreadsheets. A dynamic link with external databases would be the ideal situation. This would provide an up-to-the-minute view of the space and its associated data.
Another area of improvement is providing a more interactive way to visualize the data. Currently you can’t visualize parameters on the fly. There are five or six steps you need to do before you can view a parameter in a view. Changing the color in a visualization also requires several steps. This is where data visualization tools like Tableau really excel. Certainly some custom data visualization add-ins would help. Also, a light-weight viewer would allow the model to be accessible to a greater number of users.
The 3D nature of BIM provides unique opportunities for viewing data, particularly data that relates to the physical environment. The ability to spin and walk-through a data visualization can provide insights that would be difficult to see any other way.
Though the example above is fairly simple, it illustrates the potential use of BIM as a data visualization tool. I can imagine similar scenarios for a warehouse or hospital. Using a linked model in Revit, you could also visualize data across an entire college campus.
I believe architects can provide a valuable service to their clients by helping them better understand their data as it relates to their physical environment. In this capacity, the architect leverages his or her spatial knowledge to provide insights that directly address the client’s business challenges. This could lead to a deeper relationship with a client that goes far beyond the design and construction of a space or building.