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, присылайте мне ваши вопросы, идеи новых статей и предложения по переводу полезных на ваш взгляд материалов с английского.
Приглашаю поучаствовать в опросе и спасибо всем за внимание и ваши комментарии!
