Discussion about this post

User's avatar
Peter Mills's avatar

That's a great question and something teams working with Foundry run into very regularly.

Essentially there are a few different kinds of "reporting" in this case and how you'd use an ontological approach varies depending on what you need to do. I think about it in these buckets:

1. Your report calls for aggregate properties of objects. For example imagine you have a Vehicle object and you want to know the total km driven by that vehicle in the last 12 months. Ultimately this is an aggregation over the "journeys" the vehicle has taken and so adding it as a property to the vehicle is a denormalisation of your ontology but is ok in many cases, especially if it assists with reporting efforts.

2. Your report calls for a non-temporal aggregation over an object type. For example you might have a "Persons" object, with each person having an "eye color" property. You may want to know the total number of people that have each eye colour. These kinds of aggregations are typically handled via front-end transformations and corresponding visualisations, as opposed to changing anything in your ontology itself. You could create an object for this metric but it would be a strange ontological concept. Essentially it would be an object of "Eye Color" with properties of "number of people" and "rank".

3. Your report calls for temporal aggregations over event-like objects. This is the most common report type. For example, something like a "Monthly Sales Report", which would be an aggregation over your "Sales" object. In these cases, generally a new ontology object would be created as there may be many derived properties you want to add to your Monthly Sales Report and you may want to store the result so you can easily compare months in the future. It's totally fine to create an ontology object for this kind of report and link it back to the Sales objects themselves that went into each month. The way you'd do this is by putting the primary key of the Monthly Sales Report (probably just the month) as a foreign key on the Sales object, linking that particular sale to the Monthly Sales Report Object it contributed to (the month the sale took place in).

4. Your report calls for the aggregation of multiple objects over the same time horizon. This is a common pattern for things like KPI Reports where each object (row) represents a quarter and each property (column) captures a KPI the business wants to know. Each KPI might require multiple objects to be combined together to derive. In these cases, it's again fine to create an object in a Foundry ontology to capture the "KPI Report" even though it's quite abstract. It could be tricky to connect each month back to the specific objects that contributed to the derived KPI value and so often this isn't done and the KPI Report object stands alone. This means it's usable for visualising in Foundry's downstream tools but isn't a great example of an operational ontology object. They have their place though and while it isn't Foundry's bread and butter, there's nothing to stop you doing it!

Hopefully that helps.

Expand full comment
Max's avatar

Really appreciate this dive into the topic. A big question for myself and my team is how we consider an ontology from a less physical perspective and more report-focused one - e.g. with this source saying one thing and another source saying another thing (but not necessarily contradicting each other). Are there good examples of teams producing an ontology/ontologies based more on reporting? Would love to chat through entity schemas and how that'd look.

Expand full comment
1 more comment...

No posts