- PVSM.RU - https://www.pvsm.ru -
Гиперкубы с одним измерением не представляют никакой проблемы, не так ли? В этой заключительной главе давайте посмотрим, как будут выглядеть таксономия измерений и отчет, если мы объединим два измерения в один гиперкуб.
Это приведет к изменениям во всех частях таксономии – в основном, к отбрасыванию элементов, которые больше не нужны, и замене нескольких элементов на один комбинированный:
<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>
<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" />
При взгляде на базу ссылок определений становится интересно. Прежде всего, из 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].
Контексты отчета должны быть изменены для предоставления всех значений обоих измерений. Следующий пример показывает некоторые из возможных контекстов (если привести полный список, то вы устанете скроллить).
<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 лет по состоянию на конец отчетного периода.
Обратите внимание, что порядок следования измерений должен быть таким же, как в базе ссылок определений.
Визуализация такого отчета может выглядеть по-разному, необязательно как в нашем приложении, выводящем его в таком табличном виде (и потерявшем где-то итоговые значения):
Давайте посмотрим, можем ли мы как-то облегчить жизнь составителям отчета, желающим передать факты по возрастным группам независимо от гендерных групп. Как вы помните, можно использовать элемент домена 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 автоматически.
Последний штрих в нашей таксономии измерений – исключение определенных комбинаций элементов. Давайте предположим, что мы настоящие джентльмены, которые не спрашивают женщину о ее возрасте. Определим роль и гиперкуб:
<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.
Надеюсь, этот перевод помог вам немного разобраться в основах 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
Нажмите здесь для печати.