IBM Apptio

 View Only

 Understanding the Join Step

Jump to  Best Answer
  • CostingStandard(CT-Foundation)
Apptio Community Member's profile image
Apptio Community Member posted Wed June 30, 2021 04:03 PM
Hi, I currently am trying to understand the Join step that can be used in Apptio apparently as an alternative to multiple lookup lines. I was hoping someone could give me a run down on how it works. Also, please don't post links to other places or articles on a website because I am government side and those do not always work for me. So if you have an article or reference please post it as a pdf so I can access it. 

I have tried to use join but I don't really understand how to see the results of it or work with it since it always just goes as a last step on a table it seems. Can I perform multiple joins? Can I just select certain columns from that table? How does this work if I choose to append the joined table to a new table, will I have any issues? I don't understand this at all so all the information you can muster will be appreciated!
#CostingStandard(CT-Foundation)
Dan Kelly's profile image
Dan Kelly  Best Answer
Hi @Rebecca Brent, there is some nuance here that begs further explanation.

As @Robert Krauss points out the original and main use case for the join step is to allow joined columns to be used in reporting. However, there are some caveats when it comes to how you would take advantage of that, and there are also some other ways to use it you can stumble into which can lead to performance issues or simply confusion.  I will attempt to clarify here.

Please bear in mind that what I outline here applies to version 12.9.x of Apptio’s Cost Transparency product.

First, let’s say you want to take advantage of that main use case.  You have a custom modeled table called “Storage Arrays” and within that table you have a “Site ID” column, but no other site specifics.  You have a report based on Storage Arrays and you want to add additional site specifics like geographic location which exist in another table called “Site Info” which has the Site ID and the additional site specifics you want. You could do a lookup from the Storage Arrays table to the site table to pull in the additional information, but if there are a bunch of columns you want to bring in (e.g. country, state/province, city, etc.) then that can become tedious and even lead to performance issues if the tables in question are large enough.  In that case you could add a join step to the Storage Arrays table that joins it to the Site Info table based on the Site ID column.  This would allow you to select the columns in the Site Info table when configuring reporting elements based on Storage Arrays.

I emphasize the “custom modeled table” above because you can not and would not want to do this with an out-of-the-box master table.  For that you there is another option.  Which brings us to the second use case.

Second, it is possible to use columns associated via a join step in Map Columns steps.  This allows you to incorporate columns from a joined table into a master table.  So your join step might look like this:
And then in your Map Columns step you can click the drop downs and choose the joined columns:



Columns added via Map Columns in this way are available both in the model and in reporting.

Finally, the Join help documentation touches on using joined columns in model drivers.  In fact, you can use join columns almost anywhere in the modeler, but there are pitfalls and potential negative performance implications.  This use case is implemented in the same manner as the first in that If you were to add a join step to a custom modeled table then the joined columns would be available for selection in any modeling element that references the table’s columns.  However, the pitfalls I mention include:

  • Degradation in performance due to too excessive join steps - Join steps do create a table in the background which can become excessively large.  This can result in slowness when accessing the modeler and increased calc times.
  • Confusion resulting from grouping - If you include columns via join there is an implied grouping based on the granularity of the column you are joining on.  This can lead to “various” in other column values that isn’t obvious when looking at the table being joined.  This results in confusion and calls to our help desk.

I recommend sticking with lookups if you are working with custom modeled tables and need to pull columns in.  If you are working with out-of-the-box masters then using a join and a Map Columns step is fine.


#CostingStandard(CT-Foundation)
Renee Daignault's profile image
Renee Daignault
Hello Rebecca - Personally, I have not used Joins much. The idea behind the join step is if you are using the Lookup Function to pull back several columns from Table A to Table B, the join will take place the the multiple Lookup Formulas. I don't believe you can select certain columns like you can with the Lookup Function. The columns at the final table step of Table A will be the columns brought over to Table B. Joins step are one per table, you are unable to use multiple join steps per table. 

Join are the "final" step in the table. The best way to review the results are to view the final "Table" results. 

Appending a table with a Join to a new table: I don't see an issue with appending a table that you have used a join step on to a new table. 

An alternative to the Join Step would be to create a key in Table A and Table B for your lookup value and in Table B create a string of the values you wish to pull back (I like to use the pipe for this type of lookup: Concatenated Column =Value A &"|"&Value B &"|"& Value C). In Table A the lookup would be Lookup=Key,Table B,Key,Concatenated Column. Then the final step you would use the split apart the values in Table A for Value A=Split(Lookup Column,1,"|"). 

Let me know if you need additional information! If I come across an article I will paste the information here.
#CostingStandard(CT-Foundation)
Apptio Community Member's profile image
Apptio Community Member
Joins are useful in situations where you want to include additional details in reports but do not need to pull the data into your table.

As an example - if I have a data field like Account, I could join to an Account table and pull in all the fields associated with Account like Account Description, Account Owner, Account Type, etc. What you can't do with Joins is pull information into the table where you are initiating the Join. If you have a need to actually include that information in the table (as opposed to being available for reports), you will probably have to use Lookup or LookupEx.
#CostingStandard(CT-Foundation)