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 лет по состоянию на конец отчетного периода.


Обратите внимание, что порядок следования измерений должен быть таким же, как в базе ссылок определений.


Визуализация такого отчета может выглядеть по-разному, необязательно как в нашем приложении, выводящем его в таком табличном виде (и потерявшем где-то итоговые значения):


image


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


Приглашаю поучаствовать в опросе и спасибо всем за внимание и ваши комментарии!





Комментарии (0)