You have all those concepts in an XBRL taxonomy schema. You can organize those into useful groups of information. This is done by putting concepts into a network (i.e. presentation, calculation, definition). You can further organize these into hypercubes if you want to use the multidimensional model.
But, how do you organize the networks and/or hypercubes? This is what I mean by flow. (Go to that blog entry for more information on flow.)
Consider this fairly simple example of a financial statement. Here is how I did it:
What I did was the following:
- Create a definition network. I created the network role of http://www.example.com/DocumentFlow. (You could do this using the presentation network, but if you use the definition network you can create custom arcroles, I will get to that in a moment.)
- Create an arcrole if you want, but I just used the "general-special" arcrole for now.
- Use abstract concepts and the hypercubes you have created in your taxonomy to organize the flow of the report.
Here is another version of that screen shot, an HTML page where you can see both the flow and the other parts of the XBRL taxonomy.
There are some important characteristics of networks and hypercubes which you need to understand in order to understand the issues and solve them.
- There is no way to order networks in XBRL. Or rather, there is no standard way. You can always create a proprietary way, but the problem is that if users are using different software applications they will very likely get different results. Two ways to overcome this are to (a) use the physical order in which the networks appear or (b) sort the networks by their definition. Sorting by the definitions of the networks is how the US GAAP Taxonomy was built to be used, that is why the numbers are in the network definitions.
- There is no way to provide a hierarchy of networks in XBRL. You can order the networks by using one of the two approaches above, but that approach limits you to a flat sorted list. It would be nice if you could put the networks into a hierarchy, like the taxonomy concepts themselves.
- You cannot "jump" between networks. A good way to understand this is to say that you can jump between networks in the definition linkbase if you use XBRL Dimensions. This is achieved using the targetRole attribute. What this allows is for pieces of a hypercube (the dimensions, the domains, the members, the primary items) to be defined within different networks (i.e. extended links of the same role) but then use them together. This is a very handy feature. But again, it does not exist in XBRL 2.1, only in XBRL Dimensions.
- Hypercubes are XBRL taxonomy schema XBRL elements all of which have the substitutionGroup value of "xbrldt:hypercubeItem".
- So, to organize the hypercubes into a flow, I simply create a network which includes only abstract elements which provide a means of adding hierarchy or structure and then put each hypercube into that structure in the order that I want to see it.
Now, there are some subtleties which are helpful to understand. To make this work, you should give each hypercube a unique name. If you do this, the network really becomes irrelevant from a flow perspective, as the hypercube becomes your way to identify which piece of the taxonomy you want to point to. Besides, personally, I believe that it is a good idea to give each unique hypercube a unique name which describes what that hypercube is trying to communicate. In contrast, the US GAAP Taxonomy used the same hypercube "Statement [Table]" for every primary financial statement. For example, here that one hypercube is used to define a balance sheet and here that very same hypercube is used to define an income statement. What that means is that you MUST use the network in addition to the hypercube to identify the hypercube. Whereas, if the names were unique, you would only need the hypercube name to identify the hypercube. The fact that the US GAAP Taxonomy uses the same hypercube to mean different things, the approach outlined above will not work for that XBRL taxonomy. So, when you build your XBRL taxonomy, I would suggest making each hypercube name unique.
Then, what this allows is an interfact which looks something like this. Notice the flow on the left. Each hypercube shows up in the list, they can be read from the "flow" network which you define. Click on the hypercube, and that hypercube is rendered in the right side pane.
That flow network allows for two things: First, you can define the order that you want. Second, if other users don't like your flow, the can change it by simply creating an extension to the XBRL taxonomy! Altertatively, they can simply create their own flow network in the form of an XBRL taxonomy.
For example, you could put line items, policies, and disclosures which relate to each other together as you see desire. Interactive information!