- PVSM.RU - https://www.pvsm.ru -

XBRL: просто о сложном − Глава 6. Погружение в XBRL − Часть 6. Многомерность

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 [1].

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

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


Автор: r_udaltsov

Источник [14]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/standarty/263056

Ссылки в тексте:

[1] DRS: https://habrahabr.ru/post/334252/

[2] присылайте мне: https://habrahabr.ru/conversations/r_udaltsov/

[3] Комментарий от переводчика: https://habrahabr.ru/post/333636/#kommentariy-ot-perevodchika

[4] Глава 1. Введение: https://habrahabr.ru/post/333636/#1-vvedenie

[5] Глава 2. Что такое XBRL?: https://habrahabr.ru/post/333656/

[6] Глава 3. Анатомия таксономии: https://habrahabr.ru/post/333738/

[7] Глава 4. Отчет XBRL: https://habrahabr.ru/post/333896/

[8] Глава 6. Погружение в XBRL: https://habrahabr.ru/post/334356/

[9] Часть 1. Приступаем: https://habrahabr.ru/post/334356/#61-pristupaem

[10] Часть 2. Совершенствуем результат: https://habrahabr.ru/post/335788/

[11] Часть 3. Вычисления и валидация: https://habrahabr.ru/post/336114/

[12] Часть 4. Как облегчить жизнь: https://habrahabr.ru/post/336230/

[13] Часть 5. Новые измерения: https://habrahabr.ru/post/336506/

[14] Часть 6. Многомерность: https://habrahabr.ru/post/336818/

[15] P.S. от переводчика: https://habrahabr.ru/post/336818/#ps-ot-perevodchika