6.6. Многомерность
Гиперкубы с одним измерением не представляют никакой проблемы, не так ли? В этой заключительной главе давайте посмотрим, как будут выглядеть таксономия измерений и отчет, если мы объединим два измерения в один гиперкуб.
Это приведет к изменениям во всех частях таксономии – в основном, к отбрасыванию элементов, которые больше не нужны, и замене нескольких элементов на один комбинированный:
- Базовые концепты
Теперь нам не нужно различать два измерения, поэтому мы можем избавиться от концептов nr_employees_by_age и nr_employees_by_gender. - Таксономия измерений
Поскольку мы можем использовать элемент gender для обозначения “всех гендерных групп”, аналогично добавим элемент all в тип age_group_type.
<element
id="sample_age_group_type"
name="age_group_type">
<simpleType>
<restriction base="string">
<enumeration value="all" />
<enumeration value=".. - 20" />
<enumeration value="21 - 40" />
<enumeration value="41 - .." />
</restriction>
</simpleType>
</element>
- Таксономия шаблонов
Мы можем заменить гиперкубы hc_age_group и hc_gender одним общим гиперкубом hc_gender_x_age_group.
<element
id="sample_hc_gender_x_age_group"
name="hc_gender_x_age_group"
xbrli:periodType="instant"
type="xbrli:stringItemType"
substitutionGroup="xbrldt:hypercubeItem"
nillable="true"
abstract="true" />
6.6.1. База ссылок определений
При взгляде на базу ссылок определений становится интересно. Прежде всего, из definitionLink
удаляются относящиеся к гендерным группам связи между базовыми концептами и гиперкубом, а также между гиперкубом и измерением, остаются только связи между измерением и его элементами.
Относящийся к возрастным группам definitionLink
можно удалить полностью, заменив его на definitionLink
для нового гиперкуба.
<definitionLink
xlink:type="extended"
xlink:role="http://www.sample.com/demographics" >
<loc
xlink:type="locator"
xlink:href="sample-2006-01-06.xsd#sample_nr_employees"
xlink:label="primary_nr_employees" />
<loc
xlink:type="locator"
xlink:href="sample-2006-01-06-dimension.xsd#sample_hc_gender_x_age_group"
xlink:label="hypercube_gender_x_age_group" />
<loc
xlink:type="locator"
xlink:href="sample-2006-01-06-dimension.xsd#sample_dim_gender"
xlink:label="dimension_gender" />
<loc
xlink:type="locator"
xlink:href="sample-2006-01-06-dimension.xsd#sample_dim_age_group"
xlink:label="dimension_age_group" />
<definitionArc
xlink:type="arc"
xlink:arcrole="http://xbrl.org/int/dim/arcrole/all"
xbrldt:contextElement="scenario"
xlink:from="primary_nr_employees"
xlink:to="hypercube_gender_x_age_group"
order="1" priority="0" use="optional" />
<definitionArc
xlink:type="arc"
xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension"
xlink:from="hypercube_gender_x_age_group"
xlink:to="dimension_gender"
xbrldt:targetRole="http://www.sample.com/genderDimension"
order="1" priority="0" use="optional" />
<definitionArc
xlink:type="arc"
xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension"
xlink:from="hypercube_gender_x_age_group"
xlink:to="dimension_age_group"
order="2" priority="0" use="optional" />
</definitionLink>
Заметьте, что дуги hypercube-dimension
упорядочены. Также, обратите внимание, что атрибут targetRole
в дуге к гендерному измерению указывает на роль, с которой определялись элементы измерения. Это позволяет переходить от одного базового набора к другому, формируя DRS.
6.6.2. Отчет
Контексты отчета должны быть изменены для предоставления всех значений обоих измерений. Следующий пример показывает некоторые из возможных контекстов (если привести полный список, то вы устанете скроллить).
<context id="c_start_gm">
<entity>
<identifier scheme="http://www.statistics.org">12-34567</identifier>
</entity>
<period>
<instant>2005-01-01</instant>
</period>
<scenario>
<xbrldi:explicitMember dimension="sd:dim_gender">sd:male</xbrldi:explicitMember>
<xbrldi:typedMember dimension="sd:dim_age_group">
<sd:age_group_type>all</sd:age_group_type>
</xbrldi:typedMember>
</scenario>
</context>
<context id="c_end_gf_age_up_to_20">
<entity>
<identifier scheme="http://www.statistics.org">12-34567</identifier>
</entity>
<period>
<instant>2005-12-31</instant>
</period>
<scenario>
<xbrldi:explicitMember dimension="sd:dim_gender">sd:female</xbrldi:explicitMember>
<xbrldi:typedMember dimension="sd:dim_age_group">
<sd:age_group_type>.. - 20</sd:age_group_type>
</xbrldi:typedMember>
</scenario>
</context>
Первый контекст может использоваться для передачи фактов о количестве сотрудников-мужчин на начало отчетного периода, независимо от их возраста. Второй контекст предназначен для фактов о количестве сотрудников-женщин возрастом до 20 лет по состоянию на конец отчетного периода.
Обратите внимание, что порядок следования измерений должен быть таким же, как в базе ссылок определений.
Визуализация такого отчета может выглядеть по-разному, необязательно как в нашем приложении, выводящем его в таком табличном виде (и потерявшем где-то итоговые значения):
6.6.3. В случае сомнений используйте значение по умолчанию
Давайте посмотрим, можем ли мы как-то облегчить жизнь составителям отчета, желающим передать факты по возрастным группам независимо от гендерных групп. Как вы помните, можно использовать элемент домена domain_gender для обозначения всех полов. Мы можем помочь, сделав его элементом измерения по умолчанию.
<definitionArc
xlink:type="arc"
xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default"
xlink:from="dimension_gender"
xlink:to="domain_gender"
order="1" priority="0" use="optional" />
Теперь контекст может выглядеть так:
<context id="c_start_age_up_to_20">
<entity>
<identifier scheme="http://www.statistics.org">12-34567</identifier>
</entity>
<period>
<instant>2005-01-01</instant>
</period>
<scenario>
<xbrldi:typedMember dimension="sd:dim_age_group">
<sd:age_group_type>.. - 20</sd:age_group_type>
</xbrldi:typedMember>
</scenario>
</context>
ПО для создания XBRL-отчета подставит значение domain_gender автоматически.
6.6.4 Никогда не спрашивайте леди о ее возрасте
Последний штрих в нашей таксономии измерений – исключение определенных комбинаций элементов. Давайте предположим, что мы настоящие джентльмены, которые не спрашивают женщину о ее возрасте. Определим роль и гиперкуб:
<link:roleType
roleURI="http://www.sample.com/gentleman" id="gentleman">
<link:definition>A gentlemen never asks a lady about her age</link:definition>
<link:usedOn>link:definitionLink</link:usedOn>
<element
id="sample_hc_female_x_age_group"
name="hc_female_x_age_group"
xbrli:periodType="instant"
type="xbrli:stringItemType"
substitutionGroup="xbrldt:hypercubeItem"
nillable="true"
abstract="true" />
В гиперкуб включаются женский пол и все возрастные группы, с использованием роли gentleman, чтобы держать его отдельно от других гиперкубов.
<definitionLink
xlink:type="extended"
xlink:role="http://www.sample.com/gentleman" >
</definitionLink>
Создадим необходимые локаторы:
<loc
xlink:type="locator"
xlink:href="sample-2006-01-06.xsd#sample_nr_employees"
xlink:label="primary_nr_employees" />
<loc
xlink:type="locator"
xlink:href="sample-2006-01-06-dimension.xsd#sample_hc_female_x_age_group"
xlink:label="hypercube_female_x_age_group" />
<loc
xlink:type="locator"
xlink:href="sample-2006-01-06-dimension.xsd#sample_dim_gender"
xlink:label="dimension_gender" />
<loc
xlink:type="locator"
xlink:href="sample-2006-01-05-dimension.xsd#sample_female"
xlink:label="member_female" />
<loc
xlink:type="locator"
xlink:href="sample-2006-01-06-dimension.xsd#sample_dim_age_group"
xlink:label="dimension_age_group" />
Гиперкуб fem_x_age_group включает в себя те же два измерения, что и gender_x_age_group.
<definitionArc
xlink:type="arc"
xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension"
xlink:from="hypercube_female_x_age_group"
xlink:to="dimension_gender"
order="1" priority="0" use="optional" />
<definitionArc
xlink:type="arc"
xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension"
xlink:from="hypercube_female_x_age_group"
xlink:to="dimension_age_group"
xbrldt:targetRole="http://www.sample.com/ageGroupDimension"
order="2" priority="0" use="optional" />
Но домен элементов гендерного измерения включает в себя лишь female.
Наконец, мы создаем взаимосвязь notAll
между базовым концептом nr_employees и нашим новым гиперкубом, запрещающую использовать указанные в нем комбинации элементов. Это очень эффективно лишает нас возможности передать факт о женщинах любой возрастной группы.
<definitionArc
xlink:type="arc"
xlink:arcrole="http://xbrl.org/int/dim/arcrole/notAll"
xbrldt:contextElement="scenario"
xlink:from="primary_nr_employees"
xlink:to="hypercube_female_x_age_group"
order="1" priority="0" use="optional" />
<!-- link hypercube to dimensions -->
Заключение
На этом мы завершаем нашу работу с XBRL. Как было показано в этой главе, с его помощью можно сделать многое, но следует внимательно изучить, как создавать таксономию и ее базы ссылок, оставаясь при этом в пределах границ, обозначенных Спецификацией XBRL.
P.S. от переводчика
Надеюсь, этот перевод помог вам немного разобраться в основах XBRL и, возможно, даже применить новые знания на практике.
Если вам интересна тема XBRL, присылайте мне ваши вопросы, идеи новых статей и предложения по переводу полезных на ваш взгляд материалов с английского.
Приглашаю поучаствовать в опросе и спасибо всем за внимание и ваши комментарии!