Analysis Patterns 1.0 Help

4. Наблюдения для корпоративных финансов

Чтобы полностью понять эту главу, вам нужно сначала прочитать главу 3.

В крупных корпорациях легко выявить проблемы высокого уровня, но найти их глубинные причины гораздо сложнее. Такие корпорации генерируют огромное количество информации, которая может быстро утопить любого, кто пытается ее проанализировать.

Например, одним из основных показателей эффективности работы компании является ее конечная выручка. Если выручка заметно снизилась, необходимо провести анализ, чтобы выяснить причину. Такой анализ для компании Aroma Coffee Makers (ACM) показал, что доходы от продажи оборудования сократились, хотя расходы оставались на приемлемом уровне. Это было наиболее заметно в Северо—Восточном регионе. Дальнейший анализ показал, что доходы от продаж их кофемашин семейства 1100 были значительно ниже запланированных, особенно в государственном секторе. Многое из этого — анализ цифр, но дальнейший анализ может быть скорее качественным, чем количественным. Возможно, такие низкие показатели объясняются слабым планом компенсации продаж, или сокращением государственного бюджета, или очень жарким летом, или сильным присутствием конкурентов в данном регионе.

Все это во многом повторяет диагностический процесс, который проводят врачи при изучении симптомов пациента. Начиная с очевидного симптома, мы прослеживаем вероятные причины, руководствуясь нашими знаниями в этой области. Мы надеемся выявить первопричины и затем вылечить их. Исходя из этого широкого представления о схожих процессах, мы можем предположить, что клинические модели можно применить и к корпоративным финансам.

В главе 3 дается описание того, как можно делать качественные и количественные выводы о пациентах в контексте здравоохранения. В конце этой главы я кратко упомянул, что эту модель можно применить и в других контекстах, например при анализе корпоративных финансов. В этой главе мы рассмотрим, как это можно сделать. Модель работает очень хорошо, но требует некоторых модификаций. К счастью, паттерны, описывающие эти модификации, являются скорее расширениями существующей модели, чем ее изменениями.

В первом шаблоне человек заменяется некоторым описанием анализируемого сегмента предприятия. Этот сегмент предприятия (4.1) описывает часть предприятия, определенную по ряду размерностей. Каждая размерность представляет собой некоторый способ иерархического разбиения предприятия, например местоположение, ассортимент продукции или рынок. Сегмент предприятия представляет собой комбинацию этих размерностей, что широко используется в многомерных базах данных.

Протокол измерений (4.2) описывает, как измерения могут быть вычислены из других измерений с помощью формул, которые являются экземплярами типов моделей. В главе 3 рассматривается, как каждое измерение измеряет тип явления; здесь мы обсуждаем, как протокол измерения определяет способы создания измерений для конкретного типа явления. Мы рассматриваем три разновидности протоколов измерений: Протоколы причин измерений (4.2.2) описывают, как различные типы явлений объединяются для вычисления другого (выручка от продаж — это произведение проданных единиц и средней цены). Протоколы сравнительных измерений (4.2.2) описывают, как один тип явления может меняться между типами состояния (4.2.3) (фактическое и плановое отклонение выручки от продаж). Комбинации размерностей (4.2.5) используют размерности, определенные в шаблоне сегмента предприятия, для расчета суммарных значений (расчет выручки от продаж на северо—востоке путем суммирования значений для отдельных состояний). Каждый из этих подтипов протокола измерения использует полиморфизм для определения своего значения.

Часто мы используем качественные явления для описания количественных типов явлений. В этом случае мы можем определить явления, связав их с диапазоном значений для типа явления. Сначала нам нужен диапазон (4.3), который позволит описать диапазон между двумя величинами и различные операции для работы с этим диапазоном. Затем мы можем определить явление с диапазоном (4.4), либо добавив диапазон к явлению с помощью явление с атрибутом диапазон (4.4.1), либо с помощью функции диапазона (4.4.2).

Мы можем объединить закономерности, рассмотренные в этой главе, с закономерностями из главы 3 для анализа финансовых данных компании. В разделе 4.5 показано, как мы можем использовать эти закономерности для выявления причин проблем в крупных корпорациях.

Модели, представленные в этой главе, основаны на работе, проделанной группой сотрудников крупной производственной компании. Эта команда изучила возможность использования модели здравоохранения для корпоративных финансов и пришла к выводу, что она является очень полезной основой. Прототипом моделей в этой главе послужил язык C++.

Ключевые понятия

Сегмент предприятия, размерность, протокол измерения, тип состояния

4.1 Сегмент предприятий (Enterprise Segment)

Самое заметное отличие проблемы, которую мы рассматриваем в этой главе, от той, что обсуждалась в главе 3, заключается в том, что здесь мы наблюдаем не за одним пациентом. В некоторых случаях мы рассматриваем всю компанию, но в других случаях наблюдаем только часть компании, например «10-11 продажи эспрессо правительству» в Северо—Восточном регионе. С этим можно справиться, рассматривая каждую часть компании и всю компанию в целом как отдельные стороны. Однако важно, чтобы отношения между этими частями компании были понятны.

Таким образом, необходимо изменить отображение от процедуры к пациенту, чтобы оно указывало на другой тип. Этот вопрос я пропустил при обсуждении отображения в главе 3, так что на самом деле это не такая уж проблема, как может показаться на первый взгляд. Оригинальная модель Cosmos [1], на которой основана глава 3, на самом деле не связывает наблюдение с человеком. В действительности связь осуществляется с типом, называемым «объектом заботы». Объект заботы сам по себе является обобщением пациента и населения. Популяция — это группа людей, и она используется для того, чтобы можно было проводить наблюдения за группами людей, что особенно важно для общественного здравоохранения.

Для корпоративных финансов нам нужен новый подтип объекта заботы, который мы называем сегментом предприятия, как показано на рисунке 4.1. Сегмент предприятия — это часть компании, определенная специальным образом.

4.1.png

Пациент из главы 3 — это один из видов объекта заботы, который можно наблюдать.

Рисунок 4.1 Объект заботы и его подтипы.

При рассматривании предприятие его можно разделить на части по нескольким критериям. Например по организационному признаку, по географическому положению, по продукту, по отрасли, в которую продается продукт, и так далее. Каждый из этих способов деления может осуществляться более или менее независимо. Каждый из них также может быть выражен в виде иерархии. Например, транснациональная компания может быть разделена сначала по рынку (США), затем по региону (Северо—Восток), затем по области (Нью—Гэмпшир). Каждая из этих независимых иерархий — это размерность предприятия. Нью—Гэмпшир и Северо—Восток — это элементы разных уровней в географической размерности. Сегмент предприятия — это комбинация элементов размерности, по одному на каждую размерность предприятия. Таким образом, часть ACM, которая представляет собой «северо—восток, 11—10, правительство», может быть определена как сегмент предприятия с элементами размерности «северо—восток» в географической размерности, «11—10» в размерности продукта и «правительство» в отраслевой размерности, как показано на рисунке 4.2. Такой подход к анализу, часто называемый звездной схемой [4], широко используется в многомерных базах данных [2].

4.2.png

Один сегмент предприятия представляет собой комбинацию элементов из каждой размерности.

Рисунок 4.2. Как сегменты предприятия связаны с элементами в размерностях.

Определив сегмент предприятия, мы можем сформировать модель взаимосвязей между различными типами, как показано на рисунке 4.3. Мы можем объединять элементы размерностей в иерархии. Можно определить множество иерархий элементов размерностей. Обратите внимание, что ограничение иерархии на родительскую ассоциацию необходимо, потому что кардинальность сама по себе не обеспечивает иерархию (хотя она может допускать циклы). Сегмент предприятия должен иметь по одному элементу из каждой из этих иерархий, на что указывают три ассоциации из сегмента предприятия. Ограничение на элемент размерности гарантирует, что все иерархии находятся в одной размерности. Модель вполне справится с этой ситуацией, но у нее есть пара недостатков. Во-первых, понятия размерности и уровня размерности не определены должным образом, хотя их можно вывести. Во—вторых, добавление новой размерности приведет к изменению модели.

4.3.png

Использование этой модели требует добавления нового подтипа каждый раз, когда добавляется размерность.

Рисунок 4.3. Определение сегментов предприятия с помощью элементов размерности.

В модели, показанной на рисунке 4.4, используется явный тип размерности. Каждая размерность содержит иерархию входящих в неё элементов. В свою очередь сегмент предприятия должен иметь одну ссылку на элемент размерности в каждой отдельно взятой размерности. Для этого мы можем использовать отображение с ключом (см. раздел 15.2). В сочетании с кардинальностью это отображение утверждает, что для каждого экземпляра ключа (размерности) существует один и только один элемент размерности.

4.4.png

Эта модель позволяет добавлять новые размерности без изменения модели. Кроме того, она более компактна.

Рисунок 4.4. Определение сегментов предприятия с помощью размерности и её элементов.

Пример: Мы можем определить сегмент предприятия 11-10, Северо-восточное правительство, связав его с элементами размерности 11—10, Северо-восток и правительство. 11-10 относится к размерности продукта. Северо-восток — в размерности местоположения, а правительство — в размерности отрасли.

Обратите внимание, что каждая иерархия нуждается в вершине, и она не обязательно показывает именованную вещь. Обычно вершину обозначают «всё», показывая, что любой сегмент, ссылающийся на нее, не имеет разбиений по этой размерности. Другая конвенция заключается в том, чтобы сделать отображение на элемент размерности необязательным; тогда «nil» будет обозначать вершину дерева. Первый подход является более последовательным, несмотря на немного искусственный верхний элемент.

Пример: Если мы добавим размерность «связи», то сегмент предприятия 11-10 Северо-восточное правительство будет иметь связь с верхним элементом размерности иерархии «связи». Мы называем этот элемент размерности «всё».

Добавление типа для уровня в размерности не совсем очевидно. Интуитивно понятно, что каждый элемент размерности находится на некотором своем уровне. Однако уровень определяется его положением в иерархии, (т.е. жесткое определение и, скорее всего без возможности пропусков уровней). Модель, показанная на рисунке 4.5, решает эту проблему, назначая каждой размерности список для определения её элементов. Элемент размерности использует свой уровень в иерархии и список уровней размерности для определения своего уровня размерности. Этим достигается возможность назначения уровня не прибегая к созданию заполняющих уровни пустышек.

4.5.png

Уровни размерности позволяют дать имя каждому уровню.

Рисунок 4.5. Добавление уровней размерности на рисунок 4.4.

Если вы теряетесь в нотации некоторых диаграмм, то обратитесь к полному описанию в приложении А или к его сокращенной версии в приложении C

    Пример: В примере ACM измерение местоположения имеет список уровней размерности: рынок, регион и область. Нью-Гэмпшир определен в иерархии с родителем Северо-Восток, для которого родитель — США, и корень иерархии — все (не учитывается в уровнях). Поскольку Нью-Гэмпшир находится на три уровня ниже от корня, то его уровень измерения — третий в списке: область.

    4.1.1 Определение размерностей

    Какое определение можно дать понятию размерности? Самое простое определение заключается в том, что это способы, которыми можно разбить большую организацию на части с помощью некоторой организационной структуры. Однако это определение, как правило, не является наиболее удовлетворительным. Организацию можно разбить на множество частей, в зависимости от ситуации. Кроме того, некоторые размерности не обязательно подходят для организационной системы. Модель на рисунке 4.2 включает в себя разбивку по отраслям продаж, но это не обязательно представляет собой организационную структуру внутри ACM.

    Мы можем найти получше способ определения размерностей, посмотрев на нижнюю часть иерархии и спросив, что классифицируется в ней. В примере мы видим, что ACM фокусируется на продаже или аренде кофемашины. Мы можем классифицировать эту размерность в зависимости от того, какая машина была продана, какой отдел продаж ее продал и в какую отрасль она была продана. Размерности происходят из классификации этого ключевого события, которое представляет собой таблицу фактов звездной схемы [4].

    При определении размерностей, используемых в подобном анализе, сначала нужно понять, что представляет собой ключевое событие. Затем мы можем рассмотреть способы, с помощью которых это событие можно классифицировать. Из рисунка 4.2 видно, что ключевое событие связано с продуктом, который имеет семейство продуктов, группу продуктов, напиток. В аспекте продаж мы видим область, регион и рынок.

    Эти размерности и уровни должны быть определены бизнес-аналитиками; на рисунке 4.6 показан хороший способ сделать это. Как видно из рисунка 4.6, эта структура может стать довольно сложной. Размерности не обязательно должны быть полностью независимы. Например, обратите внимание, как размерность ценового диапазона пересекается с размерностью продукта. Это указывает на то, что у любого продукта будет один конкретный родитель по размерностям продукта и ценового диапазона. Модель на рисунке 4.5 необходимо модифицировать, чтобы учесть это, хотя сомнительно, что это стоит делать, поскольку это несколько усложняет модель. Этот вопрос может быть решен в процессе создания измерений.

    4.6.png

    Это полезная диаграмма в случае не более шести ответвлений от любого уровня. На практике более 6 ответвлений случается редко.

    Рисунок 4.6. Диаграмма Тилака с типичным набором измерений и уровней.

    Размерности не обязательно должны быть построены до самого низкого уровня. В этом случае анализ до территории отдельного продавца или отдельного клиента может быть нецелесообразным или даже возможным. В этом случае размерности детализируются вплоть до базового события. Тем не менее полезно понимать, что представляют собой нижние уровни, как для будущего развития, так и для того, чтобы видеть основы более высоких уровней.

    Полный анализ сферы деятельности клиента предполагает создание бизнес-модели для его области. Она будет включать структурную модель, которая используется для строгого определения размерностей. Каждая размерность должна представлять собой иерархический путь по структурной модели. Детали этого процесса выходят за рамки данной главы. Для целей обсуждения мы будем считать, что размерности уже определены.

    Размерности могут быть определены пользователем аналитической системы в явном виде. В противном случае они могут быть определены из корпоративных баз данных. В последнем случае каждая размерность нуждается в операции построения, указывающей, каким образом работать с корпоративными базами данных. Это позволяет системе добавлять узлы в размерность с течением времени.

    4.1.2 Свойства размерностей и сегментов предприятия

    Важное правило для размерностей заключается в том, что измерения на более низких уровнях могут быть правильно объединены в размерности на более высоком уровне. Так, если мы хотим посмотреть выручку от продаж для северо—востока, мы можем сделать это, сложив значения продаж для всех субрегионов северо—восточного региона. Все созданные для системы размерности должны поддерживать это свойство. Обычно размерности объединяются путем сложения, но есть и исключения (см. раздел 4.2.5).

    Наряду с размерностями, определяемыми с помощью бизнес-структур, еще одной распространенной размерностью является время. Время рассматривается как размерность путем соотношения события к определенному периоду времени. Если эти периоды — месяцы, то мы можем говорить о таких цифрах, как выручка за «11-10, северо—восток, март 1994 года». Это подразумевает элемент размерности «март 1994 года», который будет дочерним для элемента размерности «1994 год». Размерность времени удовлетворяет свойству комбинируемости, о котором говорилось выше, при условии, что цифры относятся только к данному месяцу (а не к году). Мы можем легко посчитать год-к-дате из цифр только за месяц, но обычно не комбинируем их по размерности.

    Сегменты предприятий делят одно интересное свойство с более фундаментальными типами: Все сегменты предприятия концептуально существуют. Обычно не идет речи концептуально создать число 5, количество $5 или дату 1/1/2314. Все эти вещи существуют в нашем сознании, и при необходимости могут быть созданы как объекты в компьютере. Сегменты предприятия обладают схожим свойством. Как только все размерности определены с помощью элементов размерности, то все сегменты предприятия концептуально существуют, хотя могут и не существовать как программные объекты.

    Это общее свойство поднимает вопрос о том, следует ли рассматривать сегмент предприятия как фундаментальный тип (см. раздел A.1.5). Если да, то он не должен иметь никаких отображений на нефундаментальные объекты. Элемент размерности и наблюдение (унаследованное от «объекта заботы») не являются фундаментальными по своей сути. Если наблюдение можно исключить, то элемент размерности является частью определения сегмента предприятия и поэтому не может быть исключен. Кроме того, есть смысл сохранить отображение сегмента предприятия на наблюдение, поскольку очень часто требуется найти все наблюдения для данного сегмента предприятия. В итоге кажется, что сегменты предприятий не являются фундаментальными, несмотря на свойство универсального концептуального существования.

    Отнесение сегментов предприятия к нефундаментальным оказывает влияние на интерфейс. Операция create на самом деле является операцией find—or—create. Сначала она проверяет, существует ли требуемый экземпляр сегмента предприятия; если да, то возвращает его, если нет — создает. (Или вы можете считать, что у него нет операции create, а есть только операция find, которая молча создает, когда это необходимо).

    4.2 Протокол измерений (Measurement Protocol)

    В корпоративном анализе, который мы обсуждали, используется множество измерений. Эти измерения не вводятся вручную; обычно они либо загружаются из одной из многочисленных баз данных, либо рассчитываются на основе других измерений. Необходимо хранить информацию (метод) о получении измерений, то есть нужен протокол, который мы используем для получения измерения. На рисунке 4.7 показана общая схема измерений и протоколов, во многом схожая с той, что описана в главе 3.

    4.7.png

    Исходные измерения берутся из базы данных, а расчетные — по формулам.

    Рисунок 4.7. Измерения и протоколы измерений.

    На рисунке 4.7 показаны два вида протоколов измерения. Протоколы на основе источника данных относятся к запросам к некоторой корпоративной базе данных. Обычно объект логически знает, к какой базе данных он обращается, хотя фактические команды находятся на другом уровне. Пользователь должен решить, к какой базе данных обращаться. Протокол вычисленных измерений — представляет собой вычисления, выполняемые на основе измерений, уже присутствующих в данном домене.

    Важным моментом этой модели, отражающим ее клиническую основу, является то, что любой тип явления может иметь несколько протоколов измерения для определения его ценности. Этот момент может показаться некоторым читателям странным. Какой смысл в измерении, которое можно рассчитать более чем одним способом? Если существует более одной формулы, то это, несомненно, другой тип явления. Первый и самый очевидный момент заключается в том, что тип явления может иметь как вычислительные, так и на основе источника протоколы. Мы можем использовать разные протоколы в разное время. Также может быть несколько протоколов на основе источника; какой из них мы используем, зависит от доступности системы. Некоторые базы данных более надежны, чем другие, но доступность никогда не может быть идеальной.

    Аналогичным образом пользователь может рассмотреть возможность использования различных расчетов для получения одного и того же типа явления. Выбор расчета может зависеть от доступных источников или от мнения пользователя относительно нюансов в расчетах. Хороший пример — стоимость товарно-материальных запасов. Обычно запасы физически учитываются только в конце года, но их стоимость необходимо оценивать и в другое время. В любом случае стоимость используется одинаково для дальнейшей финансовой информации.

    Некоторые пользователи этой модели могут указать, какой протокол измерения следует использовать для получения значения. Другие, однако, могут просто хотеть получить тип явления и предоставить системе самой решать, как его получить. В последнем случае необходимо каким-то образом расставить приоритеты протоколов измерения для типа явления. Это можно сделать, сделав отображение типа явления на протокол измерения в виде списка. Начало списка определяет предпочтительный протокол и далее по очереди.

    Обратите внимание на присутствие вычисленного измерения, которое связано с исходными измерениями. Это соответствует общему правилу, согласно которому результат вычисления, рассматриваемый как объект, должен знать, какое вычисление его вызвало (протокол) и каковы были входящие данные (источники).

    4.2.1 Проведение расчетов

    Протоколы расчета измерений включают формулы, по которым производятся вычисления, как показано на рисунке 4.8. Это пример метода индивидуального экземпляра (см. раздел 6.6). Формулы для протоколов вычислений часто очень просты, поэтому мы можем использовать простой интерпретатор [3] и хранить формулы в виде электронных таблиц.

    4.8.png

    Рисунок 4.8. Методы для протоколов вычислений.

    Важной особенностью модели является способ представления аргументов. Каждый протокол вычислений имеет список аргументов. Этот список представляет те типы явлений, которые объединяются в формуле. Обратите внимание, что отображение — это список. Чтобы формула имела смысл, элементы отображения должны быть идентифицируемыми. Список — хороший способ сделать это. В качестве альтернативы им можно присвоить ключ в виде строки.

    Пример: Выручка от продаж — это тип явления с калькуляцией потому, что используется протокол вычислений. Аргументы представлены списком из двух типов явлений — количество продаж и средняя цена. Метод — формула arg1 * arg2.

    Пример: Индекс массы тела — это тип явления в медицине. Он вычисляется с аргументами веса и роста. Методом является формула вес/(рост * рост).

    4.2.2 Протоколы сравнительных и причинно-следственных измерений

    В корпоративных финансовых приложениях измерения не являются абсолютными величинами. Пользователей обычно не слишком интересует цифра, которая говорит, что выручка составляет xxxx$, скорее их интересует разница между фактической и плановой цифрой или выручка в этом году по сравнению с выручкой в прошлом году.

    Чтобы рассмотреть эти сравнительные величины, нам нужно описать различные виды измерений, которые могут появиться. Обычно сравнивают фактическое значение с предыдущим или плановым значением. Предыдущие значения можно рассматривать либо путем применения двойной метки времени (см. раздел 3.8), либо путем поиска нужной величины для сегмента предприятия, которое находится в предыдущей размерности времени (март 1993, если сейчас март 1994). Плановые измерения требуют, чтобы мы проводили различие между фактическими и плановыми значениями, которые соответствуют текущим и прогнозируемым наблюдениям, рассмотренным в разделе 3.10. Кроме того, в прогнозируемом наблюдении должно быть указано, какой план послужил источником прогноза, чтобы мы могли различать годовые планы, квартальные прогнозы и т. п., как показано на рис. 4.9.

    4.9.png

    Рисунок 4.9. Виды наблюдений для поддержки плановых и фактических значений.

    В этот момент должно стать очевидным принципиальное различие между двумя типами вычислений. Один вид — это определение значения типа явления на основе значений других типов явлений. Например, мы можем рассчитать выручку от продаж, умножив количество продаж на среднюю цену. Этот тип расчета называется причинно-следственным, поскольку он следует за причинно-следственным анализом. Причинно-следственные вычисления могут иметь любое количество и любое соотношение входных типов явлений, а формулы, по которым они вычисляются, могут быть любыми выражениями.

    Сравнительные расчеты, с другой стороны, более структурированы. Они всегда имеют два входных измерения, которые должны быть одного типа явления. Тип явления выходного значения всегда вытекает из формы расчета и типа явления входного значения. Так, если мы рассматриваем отклонение количества продаж, то на входе будет тип явления «количество продаж», а на выходе — «отклонение количества продаж». Формулы для этих расчетов обычно имеют довольно ограниченный набор: такие, как абсолютное отклонение (x-y) или процентное отклонение ((x-y)/y).

    Различия между этими двумя типами вычислений можно формализовать с помощью подтипизации протокола вычисленных замеров, как показано на рисунке 4.10. Протокол вычисляемого измерения несет в себе ключевые элементы структуры. Каждый протокол вычисляемых измерений имеет один тип результата и несколько типов на входе. Для сравнительных вычислений они ограничены двумя аргументами, которые должны быть одного типа явления. Все протоколы вычисляемых замеров имеют метод, содержащий формулу, по которой из входных данных вычисляется новое значение. Два протокола могут использовать один метод, например, метод arg1-arg2 используется всеми протоколами, определяющими абсолютное отклонение для всех типов явлений. Действительно, этот случай настолько распространен, что для него стоит сделать специальный подтип, который привязывает метод к типу.

    4.2.3 Тип состояния: Определение планового и фактического состояния

    Замеры, определяемые исходными или вычисляемыми протоколами измерений, всегда вычисляются с помощью протокола измерений. Он предоставляет фабричный метод для измерения [3].(1. Обратите внимание, что причина этого в том, что варьируется метод создания, а не тип конечного результата. Это еще одна причина использовать фабричный метод в дополнение к тем, что указаны в Банде Четырех [3] (Прим. пер.: Фабричный метод сейчас не самый лучший способ для реализации этого функционала, лучше посмотреть в сторону стратегий, делегатов.)) Клиент просит протокол создать новое измерение. Клиент должен сообщить протоколу, на какой «объект заботы» ему нужно сослаться. Клиент также должен сообщить протоколу, будет ли это фактическое или плановое значение: какой план для планового значения или какая дата для фактического значения.

    На этом этапе модель, показанная на рисунке 4.9, демонстрирует слабое место. Не существует простого способа предоставления информации необходимой для протокола. Рисунок 4.9 предлагает хороший способ определения этой информации из существующего измерения, но он не обеспечивает удобного единого способа запроса информации. Эту проблему можно решить с помощью модели, показанной на рисунке 4.11, которая объединяет эти свойства в один тип состояния. Существует два подтипа абстрактного типа состояния. Фактические типы состояния могут иметь смещение по времени. Для текущих значений смещения не будет (или оно может быть нулевым). Для значений шестимесячной или годичной давности будет соответствующее смещение. Плановые типы состояния имеют соответствующий план, как и прогнозы.

    4.10.png

    Причинно-следственные расчеты связывают различные типы явлений, а сравнительные расчеты показывают разницу в одном типе явления между типами состояния.

    Рисунок 4.10. Типы вычислений в соответствии с протоколами вычисляемых измерений.

    4.11.png

    Этот вариант облегчает определение требуемого вида сравнительного измерения (см. рис. 4.12).

    Рисунок 4.11. Типы состояния как альтернатива рисунку 4.9.

    Пример: Корпорация оценивает четыре вида финансовых показателей: фактическое значение, предыдущий год, годовой план и последний квартальный прогноз. Фактическое значение — это тип фактического состояния со смещением по времени, равным нулю. Предыдущий год — это фактический статус со смещением по времени на один год. Годовой план — это запланированный тип состояния, связанный с годовым планом. Квартальный прогноз также является плановым типом состояния, связанным с последним квартальным прогнозом. Все квартальные прогнозы являются экземплярами «плана».

    По сути, мы перенесли знание о том, какого рода наблюдение мы имеем, из самого наблюдения в отдельный тип. Этот тип может перечислять все возможные вариации независимо от существующих наблюдений. Тип находится на уровне знаний, поэтому мы можем вычислять новые измерения, но он не обязательно должен находиться на уровне знаний. Следует отметить, что это не противоречит модели на рисунке 4.9. Оба выражения говорят об одном и том же, но немного по-разному, и оба могут поддерживаться одновременно.

    Теперь клиенту достаточно указать тип состояния для протокола измерения, чтобы получить достаточно информации для создания нового измерения, предполагая, что протокол является причинно-следственным. Сравнительные вычисления требуют двух типов состояния, по одному для каждого входа. Один из способов решения этой проблемы — изменить операцию создания измерения таким образом, чтобы она требовала один тип состояния для причинных и два для сравнительных измерений. Другой способ — разрешить сравнительные типы состояния, как показано на рис. 4.12. Я предпочитаю последний метод, поскольку сравнение теперь является самостоятельным объектом, а интерфейс для создания всех измерений одинаков.

    4.12.png

    Рисунок 4.12. Использование сравнительных типов состояния для облегчения задания сравнительных измерений.

    Пример: Руководство ACM хочет видеть фактическое и плановое отклонение выручки от продаж. Чтобы удовлетворить этот запрос, модель должна включать тип явления для выручки от продаж и тип явления для отклонения выручки от продаж. Отклонение выручки от продаж — это сравнительный расчет с методом arg[1] — arg[2]. Запрос создает наблюдение отклонения выручки от продаж со сравнительным типом состояния. Тип состояния будет иметь поле planned как основные данные и поле actual как некоторую переменную величину для сравнения.

    4.2.4 Создание измерения

    Теперь, когда мы знаем, как запросить новое измерение, мы можем рассмотреть процесс его создания, который показан на рисунках 4.13 и 4.14. Процесс состоит из трех этапов: поиск аргументов, выполнение формулы и создание нового объекта измерения с полученным значением.

    4.13.png

    Рисунок 4.13. Диаграмма взаимодействия при создании измерения.

    4.14.png

    Рисунок 4.14. Диаграмма событий, описывающая процесс создания измерения.

    Операция поиска аргументов полиморфна в зависимости от того, какой протокол измерений мы имеем: причинно-следственный или сравнительный. Причинно-следственный протокол, показанный на рисунке 4.15, должен найти все измерения с одинаковым типом состояния (статусом) и объектом заботы, чьи типы явлений совпадают с входными типами протокола. Сравнительная формула, показанная на рисунке 4.16, ищет два измерения с типом как у входного параметра, с единым объект заботы, и чьи типы состояния являются данностью и компаратором для протокола.

    Если вы теряетесь в нотации некоторых диаграмм, то обратитесь к полному описанию в приложении А или к его сокращенной версии в приложении C

      4.15.png

      Эта операция позволяет найти измерение для каждого типа аргументов при неизменности всех остальных факторов.

      Рисунок 4.15. Операция поиска аргументов для вычисления причинно-следственных связей.

      4.16.png

      Эта операция находит по одному аргументу для каждой ноги типа сравнительного состояния.

      Рисунок 4.16. Операция поиска аргументов для сравнительных расчетов.

      Когда мы нашли аргументы, мы можем передать их в формулу, а затем создать измерение с полученным значением.

      4.2.5 Комбинации размерностей

      Третий вид вычислений — объединение значений из одной размерности. В приведенном выше примере доход от продаж для северо-востока рассчитывается путем сложения значений продаж для всех дочерних регионов северо-восточного региона. Более точно, измерение типа явления для сегмента предприятия, относящегося к Северо-Востоку, рассчитывается путем нахождения всех измерений этого типа явления, относящихся к сегментам предприятия, которые относятся к дочерним регионам элемента измерения Северо-Восток, но имеют одинаковые элементы измерения по другим измерениям. Эти значения суммируются для получения нового значения.

      Прим. пер. Для простоты можно представить себе обыкновенный куб, сторонами которого будут: время, отделения, регион. А на пересечении будут продажи. Каждая сторона имеет более мелкие деления, например: месяц, день, подразделения и отделы фирмы, составляющие региона. На практике, такие кубы не трехмерные, поэтому представлять себе многомерные размерности по-первости может быть сложно, но представлять в уме такое и не надо, надо понимать как размерности могут пересекаться и какие данные лежат на пересечении выбранных размерностей. Так или иначе, объединение значений вдоль одной размерности будет вовлекать другие размерности, но они будут нужны для корректных расчетов и понимания логики работы расчета.

      Таким образом, мы можем добавить протокол комбинирования измерений, как показано на рисунке 4.17. Мы должны указать измерение, которое объединяется. Вычисление не нуждается в каких-либо входных типах (поскольку это всегда тот же тип явления, что и выходной тип). Можно было бы уменьшить кардинальность отображения входных типов до нуля, но я думаю, что мы лучше сохраним смысл, оставив отображение обязательным и добавив ограничение. Создание измерения соответствует обычным шагам, показанным на рисунке 4.14, при этом операция поиска аргументов снова изменена, как на рисунке 4.18.

      4.17.png

      Рисунок 4.17. Добавление комбинации размерностей к рассчитанным протоколам измерений.

      4.18.png

      Эта операция находит измерение для каждого дочернего сегмента предприятия вдоль указанного измерения.

      Рисунок 4.18. Операция поиска аргументов для расчета комбинации измерений.

      Роль метода вычисления очень проста: он берет все аргументы и складывает их. Обычно для комбинирования используется сложение, но не всегда. Например, для типа явления «средняя цена» при комбинировании измерений не складывается, а находится среднее значение. Эти вариации зависят от типа явления, поэтому для каждого типа явления должен быть свой метод комбинирования. Метод вычисления применяет метод комбинирования к аргументам, чтобы определить результат.

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

      Расчетные измерения не менее полезны в здравоохранении. Мы обсуждаем расчетные измерения в этой главе, а не в главе 3, прежде всего потому, что они широко использовались в нашей работе по корпоративным финансам. Таким образом, они являются иллюстрацией того, как перенос модели в другую область вызывает дополнительные размышления, которые вполне могут вернуться в исходную область.

      4.3 Диапазон (Range)

      До сих пор мы рассматривали, как можно использовать измерения, как расчетные, так и оригинальные, для изучения финансовых показателей компании. Схема протокола измерений дает нам возможность взглянуть на эту информацию количественно. Однако, чтобы разобраться в лесу цифр, часто бывает полезно сгруппировать измерения по категориям. Мы можем разделить абсолютные доходы на несколько диапазонов или выделить в качестве проблемных все сравнительные измерения, которые на 10 процентов ниже планового уровня.

      Наш первый шаг — описание диапазонов измерений, что и является предметом данной схемы. Второй шаг — связать эти диапазоны в более широкую систему наблюдений, о чем мы поговорим в разделе 4.4.

      Мы часто сталкиваемся с необходимостью хранить диапазон некоторых значений. Диапазон может состоять из чисел (например, 1..10), дат (например, 1/1/95..5/5/95), количеств (например, 10..20 кг) или даже строк (например, AAA..AGZ). Обычно диапазон размещается на типе, который его использует, путем предоставления этому типу отдельных отображений для верхнего и нижнего значения, как показано на рисунке 4.19.

      4.19.png

      Я не рекомендую использовать такой подход к диапазонам; вместо этого используйте тип диапазона.

      Рисунок 4.19. Представление диапазона с верхней и нижней границами для типа, который его использует.

      Проблема с подходом выше заключается в том, что диапазоны — это не просто верхнее и нижнее значение. Мы можем захотеть узнать, находится ли конкретное значение в диапазоне, перекрываются ли два диапазона, пересекаются ли два диапазона или образуют ли набор диапазонов непрерывный диапазон. Такое поведение придется копировать для каждого типа, у которого есть верхние и нижние значения. Решение же состоит в том, чтобы сделать диапазон самостоятельным объектом, как показано на рисунке 4.20. Тогда все обязанности, которые по сути относятся к диапазонам, содержатся в самом типе диапазон, и их не нужно дублировать в тех типах, которые используют диапазоны на логическом уровне.

      4.20.png

      Так стоит поступать всегда, когда необходимо определить верхнее и нижнее значение. Верхнее и нижнее сопоставления необязательны, что позволяет использовать неограниченные диапазоны, например менее 6 месяцев. Булевы числа нужны, чтобы отличить «менее 6 месяцев» от «менее или равно 6 месяцам».

      Рисунок 4.20. Использование явного объекта диапазона.

      В общем случае диапазон может быть образован между любыми двумя величинами. Величина, по сути, является типом, определяющим сравнительные операторы (>, <, =).

      Диапазон нуждается только в следующих вещах, чтобы определить свои собственные ключевые операции: включает, пересекает и примыкает. Когда используется диапазон, использующий тип обычно указывает, какие величины он хочет видеть в своем диапазоне. Существует несколько способов моделирования того, какой тип величины требуется. Один из них — объявить подтип, как это сделано в случае с периодом времени (диапазон, величины которого являются временными точками). Другой способ — использовать ограничение, как на рисунке 4.20. Третий способ — использовать что-то вроде параметризованных классов, где диапазон целых чисел определяется типом range<Integer>. Концептуально все эти способы моделирования эквивалентны, поэтому мы можем использовать тот, который покажется нам наиболее простым. В реализации нам нужно выбирать более тщательно, и компромиссы зависят от среды реализации. Выбор концептуальной модели ничего не говорит о реализации.

      4.4 Явление с диапазоном (Phenomenon with Range)

      Диапазоны дают нам возможность определить категории измерений. Теперь нам нужно связать их в более широкую модель наблюдений и измерений. Для этого мы можем сформировать феномены определенных типов явлений. Если наш тип явления — процентное отклонение выручки, мы можем сформировать явление «проблемы с выручкой», которое существует, когда процентное отклонение выручки меньше -10 процентов. Это означает, что измерение 12-процентного процентного отклонения выручки также подразумевает наблюдение категории (см. раздел 3.5) проблемы выручки.

      Первый вопрос, на который нам нужно ответить: это одно или два наблюдения? Согласно модели, показанной на рисунке 3.9, наблюдения являются либо измерениями, либо наблюдениями категорий, и не могут быть тем и другим одновременно. Мы можем позволить одному наблюдению быть и тем, и другим, используя модель, показанную на рисунке 4.21. Выбор между этими моделями зависит от того, рассматриваем ли мы концептуальный процесс как сначала измерение, а затем отдельный шаг наблюдения за проблемой выручки (что подразумевает использование рисунка 3.9), или же мы рассматриваем измерение и наблюдение как один процесс. Для таких простых случаев, как этот, эксперты в данной области, с которыми я работал, предпочитают последнее.

      4.21.png

      [Абстрактное] Утверждение подразумевает, что наблюдение должно быть хотя бы одним из своих подтипов.

      Рисунок 4.21. Позволяет наблюдению быть одновременно измерением и категорией наблюдения.

      Поскольку у нас есть четко определенный диапазон, кажется естественным позволить компьютеру автоматически связывать любое такое измерение с соответствующим явлением. Для этого нам нужен способ определения диапазона на уровне знаний.

      4.4.1 Явление с атрибутом диапазона

      Самый простой подход — добавить диапазон к явлению, как показано на рисунках 4.22 и 4.23. Тогда при создании измерения мы можем посмотреть, попадает ли оно в диапазон для любого явления из типов явлений этого измерения. При этом необходимо учитывать, допускаем ли мы пересечения или неполноту диапазонов. Любое из этих условий указывает на необходимость ограничения.

      4.22.png

      Рисунок 4.22. Добавление диапазона к явлению.

      (Протокол измерения создает измерение. Он запрашивает тип явления для своих явлений. Он спрашивает каждое явление, включает ли оно новое измерение. Если да, то он классифицирует измерение как наблюдение категории ВРT.)

      4.23.png

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

      Рисунок 4.23. Диаграмма взаимодействия при создании измерения и проверке явлений.

      Пример: Процентное отклонение выручки делится на четыре категории: более 5% — хорошо, от 5% до -5% — нормально, от -5% до -10% — предупреждение, а менее -10% — проблема. Это можно представить как четыре явления для феномена типа процентного отклонения выручки (RPD — revenue percentage deviation). Явление хороший RPD имеет диапазон без верхней границы и 5 нижних границ, явление «ОК RPD» имеет диапазон с верхней границей 5 и нижней границей -5, явление «предупреждение RPD» имеет диапазон с верхней границей -5 и нижней границей -10, явление «проблема RPD» имеет диапазон с верхней границей -10 и без нижней границы. Важно точно проверить, каковы границы, и включить эту информацию в диапазоны; поэтому мы спрашиваем, является ли ровно 5% хорошим RPD или OK RPD?

      Пример: Индекс массы тела используется для определения четырех групп: нормальный вес 20-25 кгм, избыточный вес 25-30 кгм, ожирение 30-40 кгм, морбидное ожирение >40 кгм. Это будет представлено как четыре явления для явления типа «индекса массы тела». Явление избыточного веса будет иметь диапазон с нижней границей 25 кгм и верхней границей 30 кгм. Все остальные явления будут иметь аналогичные диапазоны.

      4.4.2 Функция диапазона

      Альтернативный подход заключается в создании отдельной функции диапазона как подтипа ассоциативной функции, как показано на рисунках 4.24 и 4.25. Это полезно, когда применяются различные диапазоны в зависимости от контекста, описываемого концепцией наблюдения. Эта модель позволяет использовать несколько серий диапазонов в зависимости от того, какие концепции наблюдения применяются. Функция диапазона оценивает некоторое выражение аргументов, как в ассоциативной функции, но также проверяет, попадает ли измерение в диапазон по типу явления. Если оба утверждения верны, то применяется концепция наблюдения продукта. Разработка ограничений, гарантирующих, что только одна функция диапазона будет истинной для любого данного измерения, значительно сложнее, чем когда диапазоны применяются непосредственно к явлениям.

      4.24.png

      Рисунок 4.24. Функция диапазона.

      (Протокол измерения создает измерение. Он запрашивает у своего типа явления функции диапазона. Он оценивает каждую функцию диапазона с новым измерением. Если оценка возвращает значение true, он находит произведение функции диапазона и классифицирует измерение как наблюдение категории этого произведения.)

      4.25.png

      Рисунок 4.25. Создание измерения и проверка функций диапазона.

      Пример: Некоторые сегменты предприятия определены как ключевые. Для этих сегментов проблемное процентное отклонение выручки (RPD) определено на уровне -5% вместо -10%. Чтобы справиться с этим, мы определим концепцию наблюдения ключевого сегмента. К тем сегментам, которые являются ключевыми, будет применяться соответствующее наблюдение. (Мы определим функцию диапазона с аргументами (4 шт.): {ключевой сегмент}, произведением проблемного RPD, диапазоном <5% и типом явления RPD.

      Пример: Нормальный диапазон beta-HCG человека увеличивается при беременности. Чтобы представить это, мы должны иметь две функции диапазона с продуктом нормальный beta-HCG. Одна из них будет содержать аргументы беременности, а другая — аргументы не беременности. Типом явления для функций диапазона будет beta-HGC.

      У обоих этих подходов есть свои достоинства, и может быть целесообразно использовать их оба вместе. Связывание непосредственно с явлением — это, конечно, самый простой способ, и именно его следует использовать, если он правильно описывает ситуацию. Функции диапазона более сложны, но могут представлять более сложные ситуации. Поэтому следует использовать прямую связь с явлением, когда это возможно, и функции диапазона, когда это необходимо. Если ситуация усложняется настолько, что описанные здесь модели не справляются с ней, вам следует добавить свойства к функции диапазона, либо напрямую, либо через подтип.

      4.5 Использование результирующего фреймворка

      До сих пор в этой главе описывались модели, которые представляли собой расширение моделей, представленных в главе 3. Теперь мы рассмотрим, как можно использовать эти модели.

      Начнем с поиска общей выручки для ACM. Это будет измерение, сегментом предприятия которого является вся компания; то есть все элементы измерения сегмента предприятия находятся на вершине иерархии измерений. Обычно измерение не является абсолютным значением; скорее, это сравнительное значение с некоторым планом или предыдущим периодом времени. Кроме того, на то, что это проблема, можно указать, выделив ее в соответствии с ранжированным явлением. Затем аналитик начнет поиск проблемных наблюдений, определяемых явлениями.

      Чтобы определить, что проблема заключается в доходе от продаж оборудования, нам нужно откатиться назад к причинно-следственному расчету общей выручки как дохода от продаж минус стоимость продаж. Обратите внимание, что расчет причинно-следственной связи указывает на возможный путь анализа, независимо от того, было ли измерение определено таким образом. Может оказаться, что эта итоговая цифра была получена из базы данных. (Из-за грязных данных может оказаться, что она не совсем соответствует результату формулы).

      Следующий шаг — использование протоколов комбинации измерений. Просмотр измерения местоположения показывает, что северо-восточный сегмент имеет заметно большее отклонение. Теперь мы можем сосредоточиться на сегменте предприятия, который указывает на северо-восточный элемент размерности в измерении местоположения и на вершину для всех других размерностей. Повторив этот процесс еще два раза, мы получим сегмент предприятия с местоположением северо-восток, продуктом семейства 1100 и отраслью промышленности правительство.

      Здесь есть определенная доля косвенных вычислений. Когда речь идет о сравнительных расчетах, путь может быть не прямым. Возможно, отклонение в общей выручке рассчитывается не путем нахождения разницы между отклонением в себестоимости продаж и отклонением в доходах от продаж. Более вероятным сценарием является расчет отдельно фактической и плановой выручки от продаж, а затем их использование в причинно-следственной связи. При абсолютном отклонении сработает любой путь, но это не так для процентного отклонения. Наличие или отсутствие протоколов укажет, какие расчеты будут уместны, а какие нет.

      Мы можем использовать альтернативные методы. Вместо того чтобы сначала проводить анализ причинно-следственных связей, а затем комбинаций измерений, мы можем сделать разбивку по измерению местоположения, затем использовать разбивку по причинно-следственным связям, а затем по другим размерностям. Существует множество возможных путей анализа, и они не обязательно должны совпадать с теми, которые использовались для расчета конкретных цифр.

      Мы можем описать качественные утверждения, такие как «сильный конкурент может вызвать снижение продаж», с помощью ассоциативных функций, описанных в разделе 3.11. Качественные и количественные наблюдения связаны между собой путем присвоения ранжированных явлений.

      Приложения могут использовать несколько методов для изучения этой структуры. Современные многомерные базы данных склоняются к ad-hoc исследованию пользователем, что обеспечивает максимальную гибкость. Другой альтернативой является фиксация пути декомпозиции, определяемого иерархией протоколов. Эта техника показала свою эффективность, позволяя быстро добраться до корня проблемы. Иерархические анализаторы могут быть легко построены на основе этого фреймворка. Другие подходы предполагают использование агентов, которые зарываются в структуру, чтобы выделить интересные измерения.

      Эта глава отражает реальную попытку взять модель из сферы здравоохранения и применить ее к корпоративным финансам. Расширения, внесенные в модель здравоохранения, могут быть использованы в этой модели. Протоколы измерений, безусловно, применимы; модель сегмента предприятия может быть полезна в эпидемиологии, хотя это еще предстоит проанализировать. Позволяя паттернам мигрировать подобным образом, я надеюсь, что будет появляться все больше и больше полезных паттернов, которые никогда бы не появились, если бы мы были склонны держать паттерны закрытыми в своем домене.

      Ссылки

      1. Cairns, T., A. Casey,, M. Fowler, M. Thursz, and H. Timimi. The Cosmos Clinical Process Model. National Health Service, Information Management Centre, 15 Frederick Rd, Birmingham, B15 1JD, England. Report ECBS20A & ECBS20B http://www.sm.ic.ac.uk/medicine/cpm, 1992.

      2. Dejesus, E.X. “Dimensions of Data,” in Byte, April 1995, pp. 139–148.

      3. Gamma, E., R. Helm, R. Johnson, and J. Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Reading, MA: Addison-Wesley, 1995.

      4. Peterson, S. “Stars: a pattern language for query-optimized schemas,” In Pattern Languages of Program Design. J.O. Coplien and D.C. Schmidt, ed. Reading, MA: Addison-Wesley, 1995, pp. 163–177.

      Last modified: 16 January 2025