Create organizational hierarchy views
This guide demonstrates how to:
- Model the hierarchy tiers in your organization.
- Create dedicated views for each tier, displaying relevant information.
Example use caseโ
Say you have an organization with the following hierarchy:

In this example, a group is comprised of one or more domains, which are comprised of one or more tribes, and so on.
Once we model this hierarchy in Port, we can create a single view for a specific tier, where the manager of that tier can see useful information about the tiers below them, such as the services they are responsible for.
Prerequisitesโ
This guide assumes you have a Port account with admin access, and have completed the onboarding process.
Set up data modelโ
To support hierarchy tiers, we will enrich the Team
blueprintn that is available by default.
Add a self-relationโ
The first thing we need to do is add a relation from the Team
blueprint to itself.
This will allow us to assign a parent team to each team entity.
-
Go to the builder page of your portal.
-
Search for the
Team
blueprint using the search bar. -
On the bottom of the blueprint card, click on
+ New relation
. -
Fill out the form as seen below, then click
Create
:
Add a "type" propertyโ
Next, let's add a Type
property to the Team
blueprint to make it easier to see what tiers/types of teams exist.
This property will later be used for filtering in dashboard widgets.
-
In the
Team
blueprint card, click on+ New property
, and chooseEnum
as the property type. -
Fill out the form with the options matching your hierarchy tiers, then click
Create
.
You can use the following example:
Assign types & parent teamsโ
To finish setting up the data model, we need to assign each team a type and a parent team.
-
In the
Team
blueprint card, click on thebutton to view all of your team entities.
-
For each team, assign a type and a parent team by hovering over the relevant property and clicking on the
button.
To make the process of assigning types and parent teams easier, you can use the Manage properties
button in the top-right corner of the table to hide other columns.
Create dashboardโ
Now that our data model is set up, let's create a dedicated dashboard for Tribe leads.
-
Go to the catalog page of your portal.
-
Click on
+ New
, then selectNew dashboard
. -
Name the dashboard "Tribe Lead". Optionally, give it a description and select an icon, then click
Create
.
Next, let's add two useful tables to the dashboard:
Table 1: all of the tribe's squadsโ
The first table will display all of the squads under the tribe of the logged-in user.
-
In the top-right corner of the dashboard, click on
+ Widget
, then selectTable
. -
Fill out the form as seen below:
-
Let's define filters to ensure that only the relevant squads are displayed. Click on the
Filters
button. -
When defining filters, we can use the UI, or write a JSON object.
Click on theEdit JSON
, and paste the following JSON:{
"combinator": "and",
"rules": [
{
"property": "type",
"operator": "=",
"value": "Squad"
},
{
"operator": "matchAny",
"property": {
"path": [
"parent"
]
},
"value": [
"{{getUserTeams()}}"
]
}
]
}This JSON object defines two filters with an
AND
operator between them:- The first filter ensures that only squads are displayed.
- The second filter ensures that only squads that are children of the logged-in user's teams are displayed.
-
Click
Save
to save the filters, then clickSave
again to save the table.
Table 2: all services owned by the tribeโ
-
In the top-right corner of the dashboard, click on
+ Widget
, then selectTable
. -
Fill out the form as seen below:
-
Let's define filters to ensure that only the relevant services are displayed. Click on the
Filters
button. -
Once again, let's use a JSON object to define the filters.
Click on theEdit JSON
, and paste the following JSON:{
"combinator": "or",
"rules": [
{
"property": "$team",
"operator": "containsAny",
"value": [
"{{getUserTeams()}}"
]
},
{
"operator": "matchAny",
"property": {
"path": [
"$team",
"parent"
]
},
"value": [
"{{getUserTeams()}}"
]
}
]
}This JSON object defines two filters with an
OR
operator between them:- The first filter ensures that all services owned by the logged-in user's teams are displayed.
- The second filter ensures that all services owned by children of the logged-in user's teams are displayed.
-
Click
Save
to save the filters, then clickSave
again to save the table.
To achieve the desired filtering, the tables use the matchAny
operator.
This operator allows you to search for entities that are related through a specific path of relations.
Read more about this operator here.
Conclusionโ
Just like we did for the tribe lead, you can create dashboards for managers of each tier in your hierarchy, where they can track and visualize useful information about the teams they are responsible for.
Additionally, you can create other widgets in the dashboard that may interest the managers of each tier.
Some examples include:
- A pie chart showing the distribution of incidents across squads in a tribe.
- Number charts displaying the number of resolved issues per squad in a tribe in a given time period.
- A chart/table displaying the members of each tribe in a domain, by role/name.