воскресенье, 24 июля 2112 г.

Всем привет! Меня зовут Сергей Голиков. Я программист баз данных и специалист в области BI (Business Intelligence). В основном я работаю с технологиями Microsoft, поэтому в блоге будут всякие статьи, связанные именно с ними.

Зачем я создал этот блог?
1. Часто бывает, что в результате работы появляется какое-то изящное решение или просто решение проблемы, которое не хотелось бы забыть и в дальнейшем его использовать. Иногда это решение есть только в проекте. Теперь еще будет здесь.
2. Колллеги просят поделиться опытом и для того, чтобы вспомнить всякие "трюки", нужно время. Теперь будет место, куда можно заглянуть и вспомнить некоторые :)
3. Может кому-то будет полезно.

воскресенье, 4 сентября 2016 г.

Как перенести SSIS пакеты с одного сервера на другой (package deployment model)

В предыдущем посте я рассказывал о том, как делать массовую загрузку SSIS пакетов в хранилище. Сегодня расскажу, как скопировать пакеты с одного сервера на другой. Например, у вас есть сервер QA, на который вы загрузили все ваши пакеты SSIS, а теперь нужно сделать тоже самое на основном сервере (PRD). При небольшом количестве пакетов можно это сделать стандартными средствами, ну а для массового копирования я предлагаю использовать скрипт, который будет запускать утилиту  dtutil. Прежде чем писать скрипты, я посмотрел советы специалистов в интернете. Вот здесь неплохая статья, на основании которой я строил свое решение : Using dtutil to copy SSIS packages stored in SQL Server

Что нужно сделать:
1. Скопировать структуру папок на сервере SSIS, в которые установлены наши пакеты
2. Создать скрипт для переноса всех пакетов на основании утилиты dtutil
3. Запустить скрипт


четверг, 25 августа 2016 г.

Как далать массовую загрузку пакетов SSIS в хранилище

Не так давно на моей работе мы проводили миграцию с MSSQL2008 на MSSQL2014. Больше всего хлопот доставил перенос пакетов SSIS. Учитывая, что в новой версии SSIS поменялись типы объектов и вообще структура пакета, для преобразования придется открыть все проекты и конвертировать пакеты штатными средствами. Это простой, но довольно утомительный процесс, который я здесь не буду описывать.

Когда все пакеты преобразованы, их нужно установить на новом сервере (здесь я имею ввиду, что хранилище пакетов MSSQL сервера). Если вы используете project deployment model, то, возможно, этот процесс будет тривиальным. Проблемы могут возникнуть при использовании package deployment model. Штатными средствами Visual Studio нет возможности осуществить деплоймент всех пакетов проекта одной операцией - нужно каждый пакет устанавливать отдельно. Если вы используете утилиту BIDSHelper, то она позволяет осуществлять массовую установку пакетов проекта. В свойствах проекта на закладке Deploy нужно лишь указать куда устанавливать пакеты. К сожалению, у утилиты BIDSHelper не очень много настроек для управления процессами деплоймента пакетов, и поэтому, если ваши пакеты хранят sensitive данные (ProtectionLevel = EncryptSensitiveWithPassword) и обычно вы его сохраняете в хранилище с опцией rely on server storage and roles for access control, то утилита сохранит их некорректно.

Что можно сделать в данной ситуации?

вторник, 20 мая 2014 г.

Проблема отображения переводов (translations) OLAP кубов при просмотре с помощью EXCEL

Если вы для работы с кубами в качестве просмотрщика используете EXCEL и в ваших кубах есть переводы (translations), иногда возникает ситуация, когда для некоторых атрибутов не отображаются переводы. Для решения этой проблемы нужно сделать следующие действия:

1. Найти необходимый файл соединения с кубом, который вы используете в книге EXCEL.

Для этого на закладке Data есть пункт Existing Connections. Находим в разделе Connection in this Workbook необходимое соединение. Затем открываем папку с файлами соединений (D:\Documents\My Data Sources), находим там файл с соответствующим названием и расширением odc (Microsoft Office Data Connection)

понедельник, 19 мая 2014 г.

Использование рекурсии в CTE

Задачка:
Есть табличка с 3мя полями
ID DATE QTY

Для каждого клиента(ID) каждый день(DATE) может быть запись с количеством(QTY) N.
Нужно выбрать для каждого клиента(ID) все записи по такому принципу:
1. Находим для ID первую запись, где QTY больше 5 (если меньше - пропускаем) - выбираем эту запись
2. Находим для ID следующую запись, где QTY больше 5 и прошло не меньше 14 дней от даты предыдущей выбранной записи - выбираем эту запись
3. Повторяем итерацию 2, пока не выберем все записи

Решение.

среда, 27 марта 2013 г.

Особенности загрузки данных из Excel с помощью SSIS

При загрузке данных из Excel файлов мы столкнулись со следующей проблемой:

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

После недолгого гугления было обнаружено решение:

http://support.microsoft.com/kb/194124
Решение простое: в ConnectionString необходимо добавить "IMEX=1;"

понедельник, 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]