Published on

January 11, 2013

Реализация конвертации валюты в SQL Server

Одной из распространенных проблем в анализе данных является работа с конвертацией валюты. Независимо от того, работаете ли вы с многомерными или табличными кубами в SQL Server, реализация логики конвертации валюты является необходимой для точной отчетности и анализа. В этой статье мы рассмотрим реализацию конвертации валюты в табличном кубе с использованием DAX (Data Analysis Expressions) и обсудим некоторые проблемы производительности, которые могут возникнуть.

Обзор модели данных

Таблицы, необходимые для конвертации валюты в табличном кубе, аналогичны таблицам в многомерном кубе. Основные таблицы включают:

  • Таблица измерений исходной валюты: Содержит данные о валюте, из которой производится конвертация.
  • Таблица измерений целевой валюты (необязательно): Содержит данные о валюте, в которую производится конвертация. Это измерение необходимо только в случае, если вам нужно конвертировать в несколько целевых валют.
  • Таблица измерений типа обменного курса (необязательно): Содержит данные о различных типах обменных курсов. Это измерение может быть необязательным в зависимости от ваших бизнес-требований.
  • Таблица измерений даты: Содержит атрибуты, связанные с датами, такие как ключ даты, дата, фискальная неделя, фискальный месяц и т. д.
  • Таблица фактов обменного курса: Содержит обменные курсы между различными валютами.
  • Другие таблицы фактов транзакций: Эти таблицы содержат показатели, которые должны быть конвертированы в целевую валюту, а также ключи, связанные с измерениями обменного курса и другими измерениями, имеющими отношение к группе показателей.

Отношения между этими таблицами являются ключевыми для точной конвертации валюты.

Реализация конвертации валюты с использованием DAX

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

Sales Amount USD:=SUMX(CROSSJOIN('Currency Code','Currency Conversion Rate Type','GL Date'),CALCULATE(VALUES('Currency Conversion Rate'[CurrencyRateOv]) * SUM('Sales'[SalesAmountLocal])))

Это измерение вычисляет сумму продаж в долларах США, умножая местную сумму продаж на соответствующий обменный курс. Функция CROSSJOIN используется для создания временной таблицы, которая объединяет измерения ‘Currency Code’, ‘Currency Conversion Rate Type’ и ‘GL Date’. Функция VALUES извлекает обменный курс для каждой комбинации, а функция SUM вычисляет общую сумму продаж в целевой валюте.

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

=LOOKUPVALUE('Currency Conversion Rate'[CurrencyRateOv], 'Currency Conversion Rate'[DateKey], Sales[GlDateKey], 'Currency Conversion Rate'[FromCurrencyKey], Sales[CurrencyCodeKey], 'Currency Conversion Rate'[CurrencyRateTypeKey], 2)

Функция LOOKUPVALUE выполняет поиск обменного курса для каждой транзакции на основе GL Date, исходной валюты и типа обменного курса. Храня обменный курс в вычисляемом столбце, мы можем избежать его вычисления “на лету”, как в случае с измерениями, что приводит к улучшению производительности.

Наконец, мы можем использовать вычисляемый столбец для выполнения фактической конвертации валюты:

Sales Amount USD:=SUMX('Sales','Sales'[SalesAmountLocal] * 'Sales'[ConversionRate])

Это измерение умножает местную сумму продаж на вычисляемый столбец ConversionRate, чтобы получить сумму продаж в долларах США.

Заключение

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

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.