понедельник, 12 ноября 2012 г.

OLAP. Общая сумма по столбцу (Grand Total).

Когда мы работаем с OLAP кубом в броузере, то автоматически выводится общая сумма по стобцу (по данной мере). Иногда возникает необходимость оперировать данной суммой. Например, когда нужно посчитать, какую долю составляют данные продажи от общей суммы.

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

WITH
MEMBER
TotalSum AS   
    SUM(AXIS(1),[Measures].[Sales])

MEMBER
PercentOfTotal AS
    ([Measures].[Sales]/[TotalSum]),
FORMAT_STRING = "Percent"

SELECT
{
    [Measures].[Sales],
    [PercentOfTotal]
}
ON 0,
(
    [Date].[Time Hierarchy].[Year Key],
    [DIM_Ccustomers].[CustomerType].[All].CHILDREN
) ON 1

FROM [SalesCube]

понедельник, 22 октября 2012 г.

Ошибка Database Engine Tuning Advisor

Периодически я использую в своей работе эту замечательную утилитку (Database Engine Tuning Advisor). Иногда она дает больше советов, чем ты можешь обнаружить при изучении плана.
С некоторых пор при анализе разных запросов я стал получать ошибку уже на первом этапе Submiting Configuration Information. Ошибка очень неинформативная:

TITLE: DTAEngine
----------------------------
Error on line 149, position 36 in "file:///C:/DOCUME~1/sergeyg/LOCALS~1/Temp/%23Input.XML".

Порывшись в интернете, нашел по этому поводу только вот это:
http://social.msdn.microsoft.com/Forums/nl-NL/sqldatabaseengine/thread/24ef5abe-9b3a-453e-a912-3aa5268666d1

четверг, 6 сентября 2012 г.

SSIS компонент "Сортировка". Неправильное использование.

Мне очень не нравится компонент "Сортировка" в SSIS и одну из причин я уже описывал в посте Баг в компоненте Sort Transformation в SSIS 2008. Недавно столкнулся еще с одной очень вредной возможностью даннго компонента.

четверг, 2 августа 2012 г.

Импорт данных из файлов на удаленной машине с ограниченным доступом

Задача: импортировать данные из файлов, которые лежат на шаровой папке с ограниченным доступом в базу данных MSSQL. Пользователь, который запускает пакет импорта, не имеет доступа к папке с файлами, однако нам известен логин и пароль, которые позволяют получить доступ.

Решение:

среда, 1 августа 2012 г.

Удаление больших объемов данных

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

Если необходимо удалить бОльшую часть таблицы, то лучшим решением будет такое:
1. Создание новой таблицы с такой же структурой, но без индексов.
2. Копирование из исходной в новую только тех строк, которые должны остаться в исходной.
3. Создание всех необходимых индексов.
4. Удаление исходной таблицы и переименование новой.

Если же все таки по каким то причинам нужно именно удалять записи, то рекомендуется это делать небольшими порциями:

SET ROWCOUNT 5000

WHILE @@ROWCOUNT <> 0
  DELETE TableName
  WHERE  DateForDel >= '20000101'
         AND DateForDel <= '20120101'

SET ROWCOUNT 0 

четверг, 26 июля 2012 г.

Автоматический запуск пакетов SSIS по нестандартному расписанию.

Что мы имеем в наличии: хранилище данных с большим количеством таблиц (>100), которое обновляется путем импорта данных из внешнего источника данных (ERP). Для импорта таблиц создано несколько пакетов. Для небольших таблиц существуют только пакеты полной загрузки (т.е. удаление данных в таблице хранилища и загрузка всех данных) для больших таблиц (>50 млн записей) существуют как пакеты полной загрузки так и пакеты инкрементальной загрузки (удаляются данные за определенный период и заново загружаются из источника). Для удобства создано 3 пакета, в которых объединены пакеты по таким признакам:
1 пакет - все пакеты, которые осуществляют только полную загрузку таблиц
2 пакет - все пакеты, которые осуществляют инкрементальную загрузку больших таблиц
3 пакет - все пакеты, которые осуществляют полную загрузку больших таблиц
Каждому пакету полной загрузки из группы 2 соответствует пакет инкрементальной загрузки из группы 3.
Задача: настроить ежедневную автоматическую загрузку хранилища. В определенные дни нужно осуществлять полную загрузку, а в остальные инкрементальную. Должна быть возможность запускать полную загрузку в любой день при необходимости.

среда, 25 июля 2012 г.

Баг в компоненте Sort Transformation в SSIS 2008

Если вы используете в своих пакетах трансформации типа  Merge Join Transformation и Merge Transformation, то иногда приходится пользоваться компонентом Sort Transformation. Компонент этот довольно медленный и рекомендуется избегать его применения. Я в своих проектах очень редко пользуюсь такими трансформациями и стараюсь реализовать логику с помощью запросов (кстати, микрософт рекомендует именно так работать). Чем это лучше использования трансформаций? Во первых, запросы выполняются на сервере, во вторых, при соединениях таблиц используются оптимизационные механизмы сервера. В результате весь процесс работает быстрее.

Использование XML конфигурации в SSIS в картинках

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

1. Есть два сервера: тестовый и основной. Есть компьютер разработчика.
Создаем на каждой из этих машин папку SSIS_Config на диске C:\ (Из соображений, что такой диск будет на всех
машинах).

2. У нас есть 3 базы данных, которые используются пакетами SSIS

Картинка 1

вторник, 24 июля 2012 г.

Использование XML конфигурации в SSIS

Самая типичная организация работы системы BI - это наличие минимум двух серверов баз данных. Один - тестовый, второй  - основной. В идеальном случае эти сервера должны быть одинаковы. Тогда при тестировании решений на тестовом сервере можно видеть как система будет работать на основном. При разработке решений SSIS в среде с несколькими серверами необходимо использовать механизм конфигураций. Чаще всего используются 2 типа конфигураций: SQL server и XML.

Проблема с импортом плоского файла (flat file) в SSIS 2008

Задача: перенести несколько пакетов DTS (MSSQL 2000) на SSIS MSSQL 2008.
Учитывая то, что нормального мастера для переноса DTS пакетов в SSIS не существует, приходится такую работу делать вручную, т.е. строить новые пакеты с такой же функциональностью.

В пакете, который мне нужно было перенести, информация из текстового файла импортируется в таблицу базы данных. Импорт в DTS работает точно так же, как и импорт Excel - открываешь файл, указываешь разделители столбцов и строк, кодировку и тд и в результате получаешь нужные данные. По тому же пути пошел, когда начал создавать SSIS пакет: первым делом необходимо настроить Flat file connection. При настройке обнаружилось, что конекшн видит меньше столбцов чем есть на самом деле. Сначала я подумал, что механизм обрабатывает первую строку и на ее основании формирует описание столбцов. Но оказалось все по другому. Оказалось, что если в строке файла недостаточное количество разделителей (т.е. разное количество во всех строках), то импорт будет работать некорректно.