Published on

August 5, 2014

Создание временных расчетов в SQL Server Analysis Services

При работе с SQL Server Analysis Services (SSAS) создание временных расчетов может быть сложной задачей. Существует несколько подходов, каждый из которых имеет свои преимущества и недостатки.

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

Еще одна проблема при работе с временными расчетами в SSAS – это работа с измерениями с ролями. Во многих моделях с измерениями, измерение даты может представлять различные типы дат, такие как календарная дата, финансовая дата, дата отправки и дата заказа. Это делает измерение даты измерением с ролями. Если вы хотите применить те же временные расчеты к каждому измерению с ролями с помощью мастера BI, вам придется пройти через мастер несколько раз и управлять сложностью результатов.

Более эффективный способ работы с временными расчетами в SSAS подробно описан в книге “Expert Cube Development with SSAS Multidimensional Models”. Этот метод предоставляет несколько преимуществ. Во-первых, он легче управляется, чем мастер BI, потому что у вас полный контроль над расчетами. Во-вторых, он динамичен и работает с любым просматриваемым показателем. Наконец, он позволяет легко фильтровать конкретные расчеты, как и любой другой атрибут.

Чтобы продемонстрировать этот метод, рассмотрим пример. Вы можете скачать образец базы данных с сайта www.codeplex.com, который включает образцы файлов для развертывания куба Analysis Services. После установки образца базы данных создайте представление SQL Server, которое будет хранить имена расчетов, которые вы хотите создать:

CREATE VIEW [dbo].[DateCalcs] AS
SELECT ID = 1, Calculation = 'Фактические'
UNION ALL
SELECT ID = 2, Calculation = 'Календарный год до текущей даты'
UNION ALL
SELECT ID = 3, Calculation = 'Финансовый год до текущей даты'
UNION ALL
SELECT ID = 4, Calculation = 'Календарный предыдущий период'
UNION ALL
SELECT ID = 5, Calculation = 'Финансовый предыдущий период'
UNION ALL
SELECT ID = 6, Calculation = 'Календарный предыдущий период (разница)'
UNION ALL
SELECT ID = 7, Calculation = 'Финансовый предыдущий период (разница)'

После создания представления добавьте его в представление источника данных. Обратите внимание, что для этого представления не требуются отношения. Затем создайте новое измерение на основе представления DateCalcs, используя столбец ID в качестве ключевого столбца и столбец Calculation в качестве обычного атрибута. Скрыть атрибут ID от пользователей, установив свойство AttributeHierarchyVisible в False. Установите свойство IsAggregatable атрибута Calculation в False, чтобы удалить ненужный уровень All.

Последний шаг – установить свойство DefaultMember атрибута Calculation в член Actuals [Date Calcs].[Calculation].&[Actuals]. После внесения этих изменений обработайте измерение.

Подготовив измерение DateCalcs, вы можете открыть конструктор куба и перейти на вкладку Расчеты. Здесь вы будете использовать оператор MDX SCOPE для определения каждого из расчетов, которые вы хотите использовать. Порядок, в котором вы пишете расчеты, не имеет значения.

Например, для расчета Календарного года до текущей даты вы можете использовать следующий скрипт MDX:

SCOPE ([Date Calcs].[Calculation].[Календарный год до текущей даты]);
    THIS = AGGREGATE ( YTD ([Order Date].[Calendar Date].CurrentMember), [Date Calcs].[Calculation].[Фактические] );
END SCOPE

Аналогично вы можете определить другие временные расчеты, такие как Финансовый год до текущей даты, Календарный предыдущий период, Финансовый предыдущий период, Календарный предыдущий период (разница) и Финансовый предыдущий период (разница) с использованием оператора SCOPE.

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

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

Попробуйте и посмотрите, как это может улучшить ваш процесс разработки SSAS!

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.