Отправляет email-рассылки с помощью сервиса Sendsay

MS SQL Server

  Все выпуски  

MS SQL Server - дело тонкое...


Информационный Канал Subscribe.Ru

#232<<  #233

СОДЕРЖАНИЕ

1.СТАТЬИ
1.1.Исследуем возможности CASE
1.2.Поддержка XML в Microsoft SQL Server 2005 (окончание)
2.ССЫЛКИ НА СТАТЬИ
2.1.Статьи на русском языке
2.2.Англоязычные статьи
3.ФОРУМ SQL.RU
3.1.Самые популярные темы недели
3.2.Вопросы остались без ответа
4.АНОНСЫ
4.1.Журнал "SQL Server для профессионалов"
4.1.1.Ключи к базе данных
4.1.2.Применение MDX в Analysis Services: измерение происходящих изменений
4.1.3.Применение множеств в MDX­запросах
4.1.4.Улучшение откатов с помощью использования виртуальных машин
4.2.Rambler - разработчикам: поиск по MSDN

СТАТЬИ

Исследуем возможности CASE

По материалам статьи Arthur Fuller : Exploring the uses of CASE
Перевод Александра Гладченко

Вы имеете прекрасную возможность составлять условия выборки для своих запросов к SQL Server таким образом, что бы получить очень гибкие варианты представления возвращаемых данных.
Функция CASE, наверное, одна из наиболее редко используемых в SQL. Чаще всего её используют для генерации вариантов значений поля в выборках, однако, у этой функции есть ещё много полезных применений. Например, Вы можете использовать CASE в предложении WHERE.
Сначала давайте сделаем обзор синтаксиса CASE. В типичной SELECT - выборке, функцию можно применять так:


SELECT <myColumnSpec> =
CASE
WHEN <A> THEN <somethingA>
WHEN <B> THEN <somethingB>
ELSE <somethingE>
END

Нужно заменить взятые в треугольные скобки параметры из приведенного выше примера, например, как это делается в следующем примере:


USE pubs 
GO
SELECT
Title,
'Price Range' =
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END
FROM titles
ORDER BY price
GO

Это типичный вариант использования CASE, но Вы можете взять от CASE намного больше. Например, посмотрите как функция CASE может быть использована в предложении GROUP BY:


SELECT 'Number of Titles', Count(*)
FROM titles
GROUP BY
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END
GO

Вы даже можете дополнить этот запрос сортировкой, добавив предложение ORDER BY:


USE pubs
GO
SELECT
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END AS Range,
Title
FROM titles
GROUP BY
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END,
Title
ORDER BY
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END,
Title
GO

Обратите внимание, что в последнем примере запроса необходимо повторять относящийся к CASE блок кода в блоке SELECT, чтобы его можно было использовать в блоке GROUP BY.
Функция CASE полезна и в разнообразных ситуациях, не относящихся к выборкам данных. Но, приложив немного старания и находчивости, Вы сможете так группировать и сортировать результирующий набор запроса, что на первый взгляд казалось бы невозможным.

Артур Фаллер разрабатывает приложения базы данных уже в течение более 20 лет. Основными его инструментами являются Access ADP, Microsoft SQL 2000, MySQL и .NET.

[В начало]

Поддержка XML в Microsoft SQL Server 2005 (окончание)

По материалам статьи Shankar Pal, Mark Fussell и Irwin Dolobowsky: XML Support in Microsoft SQL Server 2005
Перевод Виталия Степаненко

Выполнение запросов к представлениям XML с использованием XPath

Создав представление XML в базе данных, Вы можете выполнять запросы к этому представлению так же, как если бы действительно существовал документ XML, используя язык запросов XPath. SQLXML поддерживает подмножество языка запросов XPath 1.0. Когда XPath используется вместе с конвертацией, SQLXML создает команду FOR XML EXPLICIT, которая посылается в SQL Server. Результирующие данные получаются и форматируются в соответствии с конвертацией.

Для дополнительной информации о подиножестве XPath, поддерживаемом представлениями XML, смотрите документацию о SQLXML.

Обновление через представления XML с использованием апдейтаграмм

Вы можете изменять (вставлять, обновлять или удалять) данные в базе данных SQL Server через представление XML, используя апдейтаграмму на представлении XML Вашей базы данных.

Структура апдейтаграммы

Апдейтаграмма - это документ XML с элементами <sync>, <before> и <after>, которые формируют синтаксис апдейтаграммы. Каждый блок <sync> содержит один или более блоков <before> и <after>. <before> отражает существующее состояние (также называемое "состояние до") экземпляра записи. <after> определяет новое состояние после изменения данных. Удаляет ли апдейтаграмма экземпляр записи, вставляет его или обновляет, зависит от содержимого блоков <before> и <after>.

Операции вставки

Апдейтаграмма указывает на операцию вставки, если экземпляр записи появляется в блоке <after>, но отсутствует в соответствующем блоке <before>. В этом случае апдейтаграмма вставляет запись из блока <after> в базу данных.

Операции удаления

Апдейтаграмма указывает на операцию удаления, если экземпляр записи появляется в блоке <before>, но отсутствует в соответствующем блоке <after>. В этом случае апдейтаграмма удаляет из базы данных запись из блока <before>.

If an element that is specified in the updategram either matches more than one row in the table or does not match any table row, the updategram returns an error and cancels the entire <sync> block. Only one record at a time can be deleted by an element in the updategram.

Если элемент, который определен в апдейтаграмме совпадает с более чем одной строкой в таблице или не совпадает ни с одной строкой, то апдейтаграмма возвращает ошибку и отменяет выполнение всего блока <sync>. За один раз при помощи элемента апдейтаграммы можно удалить только одну запись.

Операции обновления

Когда Вы обновляете существующие данные, Вы должны определить оба блока <before> и <after>. Апдейтаграмма использует элементы, которые определены в блоке <before>, чтобы идентифицировать существующие записи в базе данных. Соответствующие элементы в блоке <after> показывают, как должны выглядеть записи после выполнения операции обновления.

Элемент в блоке <before> должен совпадать только с одной строкой таблицы в базе данных. Если элемент совпадает с множеством строк талблицы или не совпадает ни с одной строкой, то апдейтаграмма возвращает ошибку и отменяет выполнение всего блока <sync>.

Дополнительная информация

Для дополнительной информации о создании и использовании апдейтаграмм для изменения данных через представления XML смотрите Использование апдейтаграмм для изменения данных.

Bulk загрузка данных XML через представления XML

Bulk загрузка XML - это COM-объект, который позволяет Вам загружать данные XML в таблицы SQL Server. Вы можете вставлять данные XML в базу данных SQL Server, используя команду INSERT и функцию OPENXML; однако утилита bulk загрузки обеспечивает более высокую производительность, когда Вам нужно вставить большое количество данных XML. Bulk загрузка XML обрабатывает схему конвертации и определяет таблицы, в которые нужно вставить данные XML. Затем она заносит данные XML в реляционные таблицы.

Т.к. исходный документ XML может быть большим, весь документ не читается в память для выполнения bulk загрузки. Вместо этого bulk загрузка представляет данные XML в виде потока и читает его. Когда утилита читает данные, она определяет таблицы базы данных, создает нужные записи из источника данных XML и после этого отправляет записи в SQL Server для вставки.

Для дополнительной информации о работе и использовании bulk загрузки смотрите Выполнение bulk загрузки данных XML.

Методы доступа к данным SQLXML

По сравнению с SQL Server 2000 были добавлены два новых способа использования функциональности SQLXML:

* Управляемые классы SQLXML
* Сетевые службы SQLXML

Кроме того, доступ HTTP к SQL Server был улучшен для обеспечения поддержки апдейтаграмм в шаблонах.

Управляемые классы SQLXML

Управляемые классы SQLXML обеспечивают функциональность SQLXML 3.0 в Microsoft .NET Framework. Используя управляемые классы SQLXML, Вы можете написать приложение C# для того, чтобы получить доступ к данным XML из экземпляра SQL Server, вытащить данные в среду .NET Framework, обработать их и отправить обновления обратно в SQL Server.

Для дополнительной информации об использовании управляемых классов SQLXML смотрите Поддержка SQLXML .NET.

Сетевые службы SQLXML

Поддержка сетевых служб в SQLXML представляет SQL Server в виде сетевой службы, которая предлагает функциональность SQL Server клиентам. Вы можете отправлять запросы SOAP HTTP на сервер, на котором работает SQLXML, для выполнения хранимых процедур, пользовательских функций (UDFs) и шаблонов.

Сетевые службы также устанавливаются с помощью IIS Virtual Directory Management в утилите SQL Server. Когда Web Services Virtual Directory установлена, Вы можете добавлять хранимые процедуры и шаблоны на Ваш сайт. Клиенты могут после этого получать доступ к этим службам по HTTP через протокол SOAP.

SQL Server 2005 теперь включает встроенную поддержку сетевых служб на сервере. Однако только SQLXML поддерживает доступ к шаблонам XML через сетевые службы. Кроме того, SQLXML может быть установлен не на сервере, на котором стоит база данных, создавая отдельный от базы данных средний уровень.

Для дополнительной информации о сетевых службах SQLXML смотрите Поддержка сетевых служб (SOAP) в SQLXML.

XQuery в .NET Framework 2.0

Чтобы дополнить появление XQuery в SQL Server 2005, процессор XQuery среднего уровня встроен в пространство имен System.Xml.Query в релизе .NET Framework V2.0 в Visual Studio 2005 Beta. В этой главе мы покажем, как это дает возможность выполнять запросы и объединять различающиеся источники данных, такие, как файлы и реляционные данные, хранимые в азах данных SQL Server.

Ниже дан самый простой пример кода запроса, использующегося для выборки всех книг в книжном магазине, которые имеют свойство литературного стиля - автобиография и вывода названий книг в виде нового магазина. Загружаемый локальный файл называется "books.xml", а результаты выполнения запроса сохраняются в другой локальный файл с названием "output.xml".


using (XmlWriter writer = XmlWriter.Create("output.xml"))
{
XQueryCommand xq = new XQueryCommand();
   string query =
         "<bookstore>" +
         "{ for $s in /bookstore/book " +
         "where $s/@genre='autobiography' " +
         "return $s/title }" +
         "</bookstore>";
   xq.Compile(query);
   xq.Execute("books.xml", new XmlUrlResolver(), writer);
}

Ниже показан запрос:


<bookstore>
{for $s in /bookstore/book
where $s/@genre='autobiography'
return $s/title}
</bookstore>

Класс XQueryCommand - это процессор XQuery. Запрос сначала компилируется методом Compile, которые выполняет проверку типа значений и генерирует исполнимый код. Метод Execute выполняет запрос, используя в качестве входных данных документ books.xml.

Класс XQueryCommand также может выполнять запросы по данным в реляционных таблицах в SQL Server с возможностью встроенных команд T-SQL в выражении XQuery. В результате это позволяет интегрировать два различных языка запросов, работающих в разных доменах, и дополняет SQL Server 2005, где команда XQuery встроена в команду T-SQL. В показанном ниже коде запрос используется для выборки всех клиентов из тестовой базы данных Northwind.


declare namespace sql='http://schemas.microsoft.com/framework/2003/xml/sql';
<Customers>{
$for $customer in sql:query("select * from customers", "conn")/*
return customer
}</Customers>

Метод sql:query позволяет Вам выполнить запрос T-SQL, результаты которого возвращаются в виде документа XML в том же виде, что и у функции XQuery doc(). Если результат состоит из реляционных типов, то он конвертируется в XML на клиенте в виде эффективного потока. Если результаты запроса SQL уже являются данными XML, например, в случае запроса FOR XML или запроса данных XML, то используется результат запроса. Если результат не возвращается, как в случае большинства команд T-SQL DML, то этот результат обрабатывается как пустой документ, т.е. это не воспринимается как ошибка. Ниже показан результат этого XQuery, который выводит всех клиентов из таблицы клиентов, обрамленных в элемент Customers. Элемент строки автоматически создается для каждой строки таблицы.


<Customers>
  <row>
    <CustomerID>ALFKI</CustomerID>
    <CompanyName>Alfreds Futterkiste</CompanyName>
    <ContactName>Maria Anders</ContactName>
    <ContactTitle>Sales Representative</ContactTitle>
    <Address>Obere Str. 57</Address>
    <City>Berlin</City>
    <PostalCode>12209</PostalCode>
    <Country>Germany</Country>
    <Phone>030-0074321</Phone>
    <Fax>030-0076545</Fax>
  </row>
  <row>
    <CustomerID>ANATR</CustomerID>
    <CompanyName>Ana Trujillo Emparedados y helados</CompanyName>
    <ContactName>Ana Trujillo</ContactName>
    <ContactTitle>Owner</ContactTitle>
    <Address>Avda. de la Constitucion 2222</Address
    <City>Mexico D.F.</City
    <PostalCode>05021</PostalCode>
    <Country>Mexico</Country>
    <Phone>(5) 555-4729</Phone>
    <Fax>(5) 555-3745</Fax>
  </row>
 ...
</Customers>

Чтобы выполнить этот запрос в SQL Server, используется следующий код.


static String ConnectionString = "database=Northwind;
   Data Source=localhost;Integrated Security=SSPI";

using (SqlConnection connection = new SqlConnection(ConnectionString))
{
       XmlDataSourceResolver resolver = new XmlDataSourceResolver();
   resolver.Add("conn", connection);
   XQueryCommand xq = new XQueryCommand();
   
StreamReader reader = new StreamReader("query.xml");
   xq.Compile(reader);
   
XmlWriterSettings settings = new XmlWriterSettings();
   settings.Indent = true;
   settings.ConformanceLevel = ConformanceLevel.Auto;
   using (XmlWriter writer =
      XmlWriter.Create("output.xml", settings))
   {
      try
      {
         connection.Open();
         xq.Execute(resolver, writer);
      }
      catch (Exception e)
      {
         Console.Out.WriteLine(e.Message);
         Console.Out.WriteLine(e.InnerException.Message);
      }
   }
}

Этот класс XmlDataSourceResolver играет роль связывания соединения базы данных с именем, которое может быть использовано в вызове sql:query. Запрос читается из локального файла query.xml, компилируется, и создается XmlWriter для записи результатов. Заметьте, что установка ConformanceLevel.Auto используется в XmlWriter, который автоматически определяет, что создано - фрагмент или документ, и, благодаря возможности конструировать элементы в результате, XQuery может генерировать и фрагмент, и документ. Перед выполнением запроса открывается соединение к базе данных, выполняется запрос и результаты записываются в файл.

Команда sql:query очень гибкая и мощная из-за возможности поддерживать именованные параметры в запросе T-SQL и вызывать хранимые процедуры на сервере. Именованные параметры в sql:query работают так же, как классы System.Data.SqlClient. Параметр передается в запрос T-SQL, обозначаемый как "@" и имя. Привязка между этим именем и действительным значением далее передается в виде параметра в запрос. Для каждого именованного параметра соответствующее значение (определяемое позицией в последовательности) используется для привязки. Количество имен параметров должно совпадать с количеством привязок языка. Лучше всего это представлено в следующем примере:


declare namespace sql='http://schemas.microsoft.com/framework/2003/xml/sql';
let $country := "USA"
<Customers>{
for $customer in sql:query("select * from customers where Country = @country",
"conn", {"@country"}, {$country})
return $customer/PostalCode
}</Customers>

В этом случае параметр country передается в запрос T-SQL, связывая переменную XQuery $country с параметром @country. Результатом является список всех почтовых индексов клиентов в США.

Функция sql:query также может использоваться для вызова хранимой процедуры T-SQL, передавая параметры описанным выше путем, если это необходимо. Показанный ниже пример демонстрирует, как вызвать хранимую процедуру "Ten Most Expensive Products" из базы данных Northwind, которая не имеет входных параметров.


declare namespace sql ='http://schemas.microsoft.com/framework/2003/xml/sql';
for $prod in sql:query('Exec "Ten Most Expensive Products"', "conn")
return $prod

Заключение

В этой статье описываются технологии, связанные с XML в SQL Server 2005. Особенности серверной стороны включают встроенное преобразование для хранения XML, индексирование и обработку запросов. Существующие особенности, такие, как FOR XML и OpenXML, также были улучшены. Поддержка клиентской стороны содержит улучшения в ADO.NET для поддержки данных типа XML и улучшения в System.Xml для поддержки XQuery для выполнения запросов на различных источниках данных XML. Кроме того, улучшения в технологии конвертации SQLXML теперь встроены в SQL Server 2005.

Поддержка серверной и клиентской стороны полезна для разных случаев. Тип XML обеспечивает простой механизм хранения данных XML через вставку данных XML в нетипизированный столбец XML. Использование схем XML для определения типизированного XML помогает ядру базы данных оптимизировать хранение этих данных и выполнение запросов помимо обеспечения проверки данных.

Тип XML сохраняют порядок документа и полезны для таких приложений, как приложения документооборота. Этот тип также может обрабатывать рекурсивные схемы XML. Реляционная модель данных и сейчас является лучшим выбором для структурированных данных с известной схемой. Даже [n]varchar(max) подходит для случаев, когда выполнение запросов и обновление не так важны.

Технология конвертации SQLXML полезна, когда Вы хотите использовать модель программирования на основе XML, с реляционными данными, хранящимися в таблицах на сервере. Конвертация основана на определении схемы XML в виде представления XML. Конвертация может быть использована для bulk загрузки данных XML в таблицы и для выполнения запросов по таблицам, используя XPath 1.0. Порядок документа при этом не сохраняется, поэтому технология конвертации полезна для обработки данных XML, в противоположность обработке документов XML.

Основные классы XML в System.Xml в будущем релизе .NET Framework V2.0 Beta 1 позволят Вам читать, записывать, перемещать и изменять XML. С улучшениями в производительности, типизировании и выполнении запросов поддержка XML в релизе V2.0 продолжает лидировать в инновациях, поддержке стандартов и простоте использования. Эта поддержка также включает процессор XQuery для управления источниками XML вне SQL Server.

Технологии серверной и клиентской стороны дополняют друг друга. Технология конвертации может усилить возможности серверной стороны, такие, как поддержка порядка документа и рекурсивные схемы, и найти больше применения в приложениях. С другой стороны, CLR расширяет возможности существующих инструментов XML, таких, как трансформация XSLT в данные XML. Обработки XQuery на сервере и на клиенте сильно связаны между собой, а также со спецификацией XQuery от ноября 2003 года. Обработки схем XML на серверном и среднем уровнях также сильно связаны.

Shankar Pal - Program Manager ядра SQL Server, работающий в области технологий XML на стороне сервера.

Mark Fussell - ведущий Program Manager в команде WebData в Microsoft, которая разрабатывает технологии доступа к данным, включая компоненты в пространствах имен System.Xml и System.Data в .NET Framework, Microsoft XML Core Services (MSXML) и Microsoft Data Access Components (MDAC). Его адрес: http://weblogs.asp.net/mfussell.

[В начало]

ССЫЛКИ НА СТАТЬИ

Статьи на русском языке

Создание таблиц средствами SQL-DMO
Рик Добсон
MSSQLServer: В статье "Постигаем основы SQL-DMO", опубликованной в 5 номере журнала SQL Server Magazine Online за 2001 год, я показал, как использовать распределенные объекты управления, SQL Distributed Management Objects (SQL-DMO), для перечисления объектов базы данных. Модель SQL-DMO показывает объекты, методы, свойства и события через интерфейс COM в процессе управления выполнением административных задач в SQL Server. В настоящей статье я расскажу о том, как создавать в проектах Microsoft Access таблицы, пользуясь объектами SQL-DMO и Visual Basic for Applications (VBA). Поскольку объекты SQL-DMO демонстрируют свои функциональные возможности через интерфейс COM, то предложенные в данной статье подходы применимы в любой программной среде, где существует возможность использовать инт...
Сопровождение тиражирования сведением в SQL Server 2000
Татьяна Крамарская
MSSQLServer: Изо всех механизмов тиражирования сведение требует особого внимания администратора, поскольку степень свободы участников в этом типе тиражирования самая высокая. Специальная база данных Distribution в сведении фактически не участвует, а вся служебная информация хранится в дополнительных объектах основных баз данных на издателе и подписчике. В этой статье я хочу кратко описать возможности SQL Server 2000, которые оказались наиболее полезными для поддержки тиражирования сведением, и рассказать об особенностях перевода сопровождаемых систем на новую версию. Статья основана на опыте сопровождения популярной системы www.netwizard.ru. Она адресована администраторам и, возможно, убедит их в целесообразности перехода на SQL Server 2000....
Аналитика в Юконе
Ivan's Blog
MSSQLServer: Ребята, пишущие 2005 сиквел безусловно молодцы. Они добавляют кучу нового функционала, причем делают это не абы как, а с умом, с чувством, с толком.... Сиквел, в этом плане, вообще выгодно отличается от того же Оракла, в котором, такое впечатление, что новы е фишечки добавляют "шоб было", а как это будет взаимодействовать с остальным и вписываться в общую концепцию - дело десятое, без допинга не разберешь... Но есть в этой идилии ложечка дегдя, некоторые вещи в новом сиквеле выглядят несколько недоделанными......
База данных как крепость
Сергей Гордейчик
MSSQLServer: Серверы баз данных занимают свою нишу в информационной инфраструктуре предприятия. Зачастую в них хранится конфиденциальная информация, нарушение доступности, целостности или конфиденциальности которой может привести к значительным финансовым потерям. Поскольку SQL Server представляет собой довольно сложный продукт, повышение уровня его защиты более рационально проводить в несколько этапов. В данной статье описывается методика поэтапной настройки сервера по уровням информационной инфраструктуры...

[В начало]

Англоязычные статьи

Showplan for non SA or DBO users
Larry Chesnut
I imagine if you are reading this you are just geekie enough to have also spent loads of time with execution plans over the years. We have all come to a comfortable routine using this simple expression to get the ball rolling
User Defined Function performance comparison
SimonS
For some time now I wanted a basic example that showed the impact of using functions, I was looking at SQLServerCentral and saw a new piece on an LPAD function
A Case Study in Performance Tuning
Gordon Pollokoff
The client for whom I am working recently released version 1.0 of an application to be used in their centers throughout the US and Canada. This application had undergone extensive testing and was rolled out to select beta sites. Once in the field, a performance issue was seen in a few centers. Initial analysis pointed to a specific stored procedure. However, the problem could not be replicated in the development environments
SQL Server Disaster Recovery
Mike Chapple
After completing the process of installing and configuring Microsoft SQL Server, any database administrator is entitled to sit back and take a well-deserved break. However, it's important to remember that the database administration process does not end when your database is humming along at a comfortable pace answering user requests. You considered a multitude of issues during the database design process -- performance, access controls, replication strategies, normalization and indexing to name a few. Have you taken the time to develop a contingency plan to cover unforeseen catastrophes that might threaten your database in the future?
Should I use COALESCE() or ISNULL()?
aspfaq
As with many technology questions involving roughly equivalent choices, it depends. There are a variety of minor differences between COALESCE() and ISNULL()
SQL Server 2005 Security Terminology
Randy Dyess
As you start to review the new security in SQL Server 2005 you will come across terminology describing security components that is different from earlier versions of SQL Server. As SQL Server 2005 continues to mature and new information is release, an understanding of these changes in terminology will help you to understand the information
Tuning YTD-style calculations
Chris Webb's BI Blog
This subject came up in a recent thread I was involved in on microsoft.public.sqlserver.olap, and in my experience poorly-performing queries using YTD-style calculations are a common problem. When you think about it the reason why is fairly clear: retrieving and then summing up up to 12 months of data is always going to take longer than retrieving one month of data alone, especially if the summing up ends up happening on the client rather than the server. When you are working with large resultsets or have other calculations in play then the effect often seems much worse; the fact that there may not be any aggregations designed at the month level (often the bottom level of the Time dimension) in the cube just compounds this problem
More on tuning YTD-style calculations
Chris Webb's BI Blog
I'm indebted to Deepak Puri for coming up with a much less complex MDX expression for finding the common ancestors in a set of months. Here it is
Aggregating values across a date range
Chris Webb's BI Blog
Very often you'll come across a requirement for users to be able to aggregate values across abitrary date ranges. For example, they might want to see the sum of Unit Sales between any two months, say Feburary and April 1997. While this is fairly easy to accomplish with a calculated member when you have control of the MDX, when your users want to use an off-the-shelf client it becomes more difficult - how do you allow people to pick a start date and an end date on your single time dimension?
Grouping members together
Chris Webb's BI Blog
One of the weaknesses of Analysis Services, in my opinion, is support for creating custom groupings of members. I reckon that 90% of all calculated members on non-measures dimensions must be doing just this, ie just doing an AGGREGATE or SUM over a set of members, and yes calculated members will return the right values but my complaint is something else. It's that you then have no idea what members were aggregated together inside this calculated member, and that functions like VISUALTOTALS, NONEMPTYCROSSJOIN etc that you would like to be 'group aware' of course aren't. Some examples needed, I think...
Building Aggregations Manually
Chris Webb's BI Blog
I’ll start with two disclaimers: This entry is based on my own understanding of how the AS engine works, based on my own experience and the occasional question I’ve asked the dev team. It might not be totally accurate on the details but hopefully the general principles are sound – I’ve used them successfully on a number of occasions. 99% of the time the Storage Design Wizard and Usage Based Optimisation Wizard will design the right aggregations for you, and you won’t need to build aggregations manually
Recursion in MDX - How deep can it go?
Mosha Pasumansky
Recursive calculations are not uncommon in MDX. For example, one way to compute rolling sum over Time is to define calculated member as
SQL Server 2005 Tools Introduction
Yih-Yoon Lee
The upcoming release of SQL Server 2005 introduces a revolutionary set of tools and utilities. Whether you are a database administrator or developer, there will be a learning curve for all.
PSSDiag, OSTRESS, and Read80Trace
Yih-Yoon Lee
Recently, Microsoft SQL Server Product Support team released three tools to the public. The tools are PSSDIAG, Ostress, and Read80trace. Microsoft Product Support team has been using the tools for years to help troubleshoot SQL Server cases. The tools can save DBA/developers plenty of time collecting and analyzing data for troubleshooting a problem or simply for benchmarking purpose.
Duration column in Profiler Tool is now measured in Microsecond
Yih-Yoon Lee
Today I was using Dec CTP build of SQL Profiler tool and experiment with the new showplan events when I noticed that the duration seems to be showing a large number. I was executing a short query that completed in less than a second. A little research reveals that the unit of measurement for the duration column is now in microsecond.
Dedicated Administrator Connection
Yih-Yoon Lee
Dedicated Administrator Connection is a powerful new feature in SQL Server 2005. DAC ensures that there will always be a connection available for system administrator to SQL Server. If you run into a situation where SQL Server appears to be not responding such as severe blocking, you can then connect to SQL Server using DAC and kill the offending SPID
Document Recovery Feature in SQL Server Management Studio
Yih-Yoon Lee
In a recent beta newsgroup, as well as discovered by one of my colleague Erin Welker, SQL Server Management Studio has a nice feature similar to Microsoft Word's document recovery. In the case where SQL Server Management Studio or machine shutdown unexpectedly, you will be able to recover from unsaved file
SQL Injection Attacks and Some Tips on How to Prevent Them
Colin Angus Mackay
Discusses various aspects of SQL Injection attacks, what to look for in your code, and how to secure it against SQL Injection attacks
New SQL Server 2005 Business Intelligence Features
Paul Ballard
In a recent interview, Bill Baker, the general manager for the SQL Server Business Intelligence group discusses upcoming enhancements for allowing access to business information to non-developers. These tools include Integration Services (formerly DTS), Reporting Services, and Analysis Services
Estimated and Actual Execution Plans In SQL Server
Randy Dyess
Microsoft has built in the ability to retrieve two different modes of execution plans in SQL Server: actual plans and estimated plans. As named, the actual execution plan will be obtained during the execution of the query and contains the actual route the optimizer took to complete the query as well as the result set for the query
Access Data Definition Language (DDL): Creating and Altering Tables On The Fly
Danny Lesandrini
One of the first things an Access developer learns is how to write SQL Queries. A simple request for data might look something like this
SQL Server 2005 Part 1 - Security (Authentication)
Marcin Policht
In this installment of our series covering new and improved functionality of SQL Server 2005 Beta 2, we will focus on the topic of security, which has been becoming increasingly prominent among the issues on every database and system administrator's agenda. A new approach to software development started with the Trustworthy Computing initiative launched in early 2002, necessitated by the growing number of exploits directed at the Microsoft operating system and applications, resulted in a "secure by default" product with highly customizable security features further increasing the degree of protection. We will start with the features related to authentication (the process of identifying logins connecting to the SQL Server and users accessing databases), and continue with authorization (determining the level of permissions granted once the initial connection is established) and encryption in the future articles. In particular, we will cover here, password policy implementation and management as well as endpoint-based authentication (in the context of native support for HTTTP SOAP requests)
Grouping in MDX - response to Mosha
Chris Webb's BI Blog
I'm honoured by my mention in Mosha's blog! But I think my entry on Grouping in MDX, and Mosha's comments on it, need some further clarification and discussion
Estimating Your Space Needs
Andre Vigneau
What do you consider and how close do you have to be to reality? I had to respond to that question many times. I had to come up with estimates many times also, and people were always surprised to get pages of explanation to accompany the magic number… It made the understanding more obvious, if you are not just estimating space but are estimating a storage strategy as well
Detecting and Reporting Errors in Stored Procedures - Part 1: SQL Server 2000
Rob Garrison
Detailed error reporting from stored procedures can be extremely valuable when debugging problems in your application. I will share different levels of detail that you can build into your stored procedures. You can choose the level of detail appropriate for your situation
How to improve SQL Server security
Barrie Sosinsky
There are several steps you can take to make SQL Server databases more resistant to tampering and hacking. Some are simply part of good server management, like keeping up with SQL Server's latest patches, while others involve active-user monitoring. The five steps below will get you started
Delete Old Files
Muthusamy Anantha Kumar
Script Language and Platform: SQL Server 7.0 and SQL Server 2000. This procedure deletes files that are older than a certain period from a folder
Yukon. Measure Lift over Global Statistics
Jamie
This tip describes how to create a lift chart showing lift over global statistics rather than a random guess. One of the typical method to validate a model is to measure the accuracy of the trained model in terms of correct classification rate. To facilitate this, Yukon supports a lift chart where prediction accuracy of a model is compared with an ideal model and random model. The following is an example
Optimizer Join Hints
Randy Dyess
I recently completed an article on optimizer joins and one the items that I decided to leave out was the ability to force a type of optimizer join by using an optimizer join hint. While it is strongly encouraged that you avoid optimizer hints and let the optimizer determine the type of optimizer join to use, you can use a join hint in the join syntax or with the OPTION clause to force a particular type of optimizer join if you feel that the optimizer has not made the correct decision
HOWTO: Create an Asynchronous Schedule For a Report Server Report
Andy Leonard
While it is possible to have a report execute asynchronously, scheduling it is not straightforward. Reporting Services offers awesome functionality – and it places more control in the hands on the end-user than any previous product. This alone is reason enough to adopt Reporting Services (and the price is right!)
Installing and Configuring SQL Server Reporting Services
This chapter details the installation and configuration of SQL Server reporting services, providing advice on testing and options for this useful function
Installing and Configuring SQL Server Reporting Services
William Vaughn, Peter Blackburn
This chapter details the installation and configuration of SQL Server reporting services, providing advice on testing and options for this useful function
Trace Messages Part II: Writing to the Trace
Andrew Novick
In the previous issue I discussed the AppSession table that I use as a way of organizing application trace lines that come from the same program. This issue is about writing trace lines in order to record information about your application. In .Net it's been my practice to write about 10% of my lines of code as TRACE.WriteLine statements. Writing trace lines in T-SQL is similar to writing them in .Net. In T-SQL percentage of lines devoted to tracing is higher of because of the verbose nature of some of the statements that I use
Release strategy for Microsoft Data Access Components
Microsoft
In the past, each release of Microsoft Data Access Components (MDAC) has been made publicly available as a stand-alone redistributable package (Mdac_typ.exe). MDAC has not always been included with Microsoft Windows operating system releases. Therefore, the stand-alone redistributable packages have been provided as mechanisms for installing the version of MDAC that the customer wanted on the customer's version of the operating system
Kerberos Authentication and Delegation in Analysis Services 2005
Mosha Pasumansky
Anybody who implemented multi-tier application which needs to access Analysis Services and tried to use Windows integrated security from end to end, has run into the issue of enabling delegation, which also meant forcing Analysis Services to use Kerberos (since this is only supported SSPI provider which implements delegation). One classic example is Intranet Web app, where domain users connect with IE to ASP.NET, and ASP.NET connects to Analysis Services
SQL Server 2005 Provides True Integration of XML Data
William Sheldon
In my last article, I started discussing Microsoft SQL Server 2005's native XML data type. This new data type brings with it some of the most important core changes to how developers will interact with SQL Server. As I noted in my previous article, XML structures are excellent for managing hierarchical data relationships. Being able to incorporate XML data into a relational database provides tremendous flexibility
Getting ahead of the curve on Yukon
Kevin Kline
Microsoft has made a lot of effort to do better with the Yukon release of SQL Server than with previous releases. The number and depth of improvements are significant, especially if you’ve gone through some of the other upgrades/migrations of the past
Zen and the Art of Hardware-Resource Distribution
Brian Moran
Do you have four processors, 4GB of memory, and RAID 5 in a single internal array? This week is for you. Many SQL Server professionals reading this commentary have I/O problems that they don't know about. For space reasons, I don't typically write in depth about bits and bytes here, and it will be difficult to discuss I/O problems in detail, but I'll do my best to enlighten you given the space that I have
Connect to Lotus Domino using SQL Server Linked Server
Muthusamy Anantha Kumar
Many Enterprises create and maintain applications that reside on "IBM Lotus Domino Server." Since the Lotus Domino server has the capability of handling applications and messaging, it has become a prime requirement for a SQL Server DBA to cross- reference data or import and export data to and from the Domino database and SQL Server databases. In this article, I am going to discuss how to use SQL Server Linked server to connect to databases that reside on the Lotus Domino server. The steps involved in connecting to the Lotus notes mail server database can be used for connecting to other databases that reside in "Lotus Notes Domino" server
Automating Database maintenance in SQL 2005 Express Edition Part I
Jasper Smith
In this series of articles, I'll demonstrate a couple of different approaches to writing a maintenance utility that mimics some of the behavior of the sqlmaint utility that is included with SQL Server 2000. SQL Server 2005 Express Edition does not include such a utility, so these articles will show how we can easily create one ourselves using either TSQL or SMO (SQL Management Objects - the successor to SQL-DMO). Rather than dive into the code, these articles will demonstrate how to use these utilities for backing up and maintaining your databases and how to schedule these tasks using the Scheduled Tasks facility in Windows XP and Windows 2003. In this article we will concentrate on the TSQL version of the utility which is in the form of a stored procedure - expressmaint
Automating Database maintenance in SQL 2005 Express Edition Part II
Jasper Smith
In this series of articles, I'll demonstrate a couple of different approaches to writing a maintenance utility that mimics some of the behavior of the sqlmaint utility that is included with SQL Server 2000. SQL Server 2005 Express Edition does not include such a utility so these articles will show how we can easily create one ourselves using either TSQL or SMO (SQL Management Objects - the successor of SQL-DMO). Rather than dive into the code, these articles will demonstrate how to use these utilities for backing up and maintaining your databases and how to schedule these tasks using the Scheduled Tasks facility in Windows XP and Windows 2003
Getting Started with SMO in SQL 2005
Jasper Smith
In this series of articles, I'll demonstrate how to use SMO (SQL Management Objects) to do a variety of common DBA tasks including Backups, Restores,Index Maintenance, Integrity checks and more. These are some of the operations available in the SMO database maintenance utility available on this site - ExpressMaint. In this article we will concentrate on how to build a SMO application and how to connect to a SQL Server and retrieve some server properties. Example code will use VB.NET and C# as well as VBScript. For those of you that don't have access to Visual Studio 2005 Beta 1 I'll include the command line compiler commands. It may be easier to get started using VBScript as this is the simplest way to develop a quick SMO application. I'd also highly recommend the SMO sample applications that are part of the SQL Server Engine samples that come with SQL2005 Beta 2 and are also available for download for Express users here
Workaround for compiling SMO applications with SQL 2005 Express Edition
Jasper Smith
There is an issue with the setup of SQL Server 2005 Express Edition with regard to the SMO assemblies required to compile SMO applications. Note that this does not affect the ability to run SMO applications, merely to compile them. The issue is that the required SMO assemblies are only installed in the GAC and are not available to be referenced when compiling an SMO application. Whilst I'm sure there has to be an easier way, the method below worked fine for me and it's a one time operation
Getting Started with SMO in SQL 2005 - Backups
Getting Started with SMO in SQL 2005 - Restores
Getting Started with SMO in SQL 2005 - Verifying Backups
Getting Started with SMO in SQL 2005 - Integrity Checks
Jasper Smith
In this series of articles, I'll demonstrate how to use SMO (SQL Management Objects) to do a variety of common DBA tasks including Backups, Restores,Index Maintenance, Integrity checks and more. These are some of the operations available in the SMO database maintenance utility available on this site - ExpressMaint. In this article we will concentrate on how to perform backups using SMO in SQL2005. For information on how to build and compile a SMO application please review Getting Started with SMO in SQL 2005. For SQL 2005 Express Edition Beta 2 please review Workaround for compiling SMO applications with SQL 2005 Express Edition
SM0 2005 - Populating a list of SQL Servers
Jasper Smith
In this article I'll look at a number of methods for enumerating SQL Servers to produce a list. I'll also present a procedure that can be used to populate a Windows Form combobox with a list of SQL Servers. For information on how to build and compile a SMO application please review Getting Started with SMO in SQL 2005. For SQL 2005 Express Edition Beta 2 please review Workaround for compiling SMO applications with SQL 2005 Express Edition
SQL 2005 Service Manager
Jasper Smith
With the lack of an equivalent in SQL2005 for the SQL Server Service Manager that comes with SQL2000, I've decided to write one myself using C# and SMO. The download in this article is the first beta of SQL2005 Service Manager. There are a number of known issues with it currently that are documented later in the article however if you have suggestions or want to report a bug either use the feedback link at the top of this article or email smbugs. Whilst the full soure code will not be available for some time, there will be a series of articles covering most of the functionality of managing services using SMO in SQL Server 2005, the first of which is already available on this site - SM0 2005 - Populating a list of SQL Servers
How To Configure SQL Mail to Work With Groupwise
Chris Shepherd
This document walks through how to configure SQL Mail for Microsoft SQL Server to work with Novell Groupwise. For the purpose of this document I will refer to the user account as sqluser and the password as sqlpassword
Reading an XML file from SQL Server
Builder AU
SQL Server 2000 makes it simple to export your data as XML; but importing XML and working with XML files are a little trickier
Encryption Hierarchy in SQL Server 2005
Randy Dyess
Seem to have picked up the flue or a strong respiratory infection this week and in between naps and bouts of fever, I tend to get bored quite easily. I had planned on working on a chapter in a SQL Server 2005 book Scalability Experts is producing, but my capacity for original, concise thought has eluded me this week. So to keep from going absolutely stir crazy, I thought I would at least write a blog or two this week
Determining if the predicted value is a good prediction
DMTeam
Make use of the built-in DMX functions to get the prediction confidence of your mining model for a given input. We can determine that the predicted value is a good prediction by looking at the most probable predictions and at their probabilities. For a mining model that has a predictable discrete attribute called [Class], the following query will return the value of the attribute [Class] from the test dataset and the first two most probable predictions for the associated case from the input dataset, together with their probability
SQL Server Execution Plan Cost Formulas
Joe Chang
Slides from my CMG 2004 presentation. A much more detail model for bookmark lookups, loop joins and hash joins. Also details cost model changes introduced in build 818 (MS03-031)
SQL Reporting Services Viewer Page Using SOAP API
Marian Dumitrascu
A report viewer page for SQL Reporting Services that uses exclusively it's SOAP API
Block-Buster: SQL 2005 and Blocking/Deadlocking
Cihangir Biyikoglu
If you'd like some help in going to sleep at night, try thinking about how concurrency is controlled behind the scenes in SQL Server. No guarantees however: you may wake up in the middle of the night having nightmares about blocking and deadlocking. Seriously though, the real nightmare would be the opposite... uncontrolled concurrency = sheer chaos
Copying a Database from Server to Server
Rahul Sharma
There are a number of ways this can be achieved
Exploring the uses of CASE
Arthur Fuller
You can do conditional queries in SQL Server which give you more flexibility how data is returned
Finding the currentmember on all dimensions
Chris Webb's BI Blog
In yesterday's entry I mentioned it would be nice if you could iterate over all the dimensions in your cube and find the currentmember on each of them. Mosha then hinted that this was possible, and there's nothing I like more than a challenge. Here's the solution in a Foodmart 2000 query - and it uses all-AS2K functionality too!
How to create a SQLPROPERTY value over 255 character
Andrew Novick
When using SQL Query Analyzer's user interface, extended properties, such as descriptions may only be 256 character. Recently I was asked how to create a longer property so that documentation for a stored procedure could be saved in sysproperties

[В начало]

ФОРУМ SQL.RU

Самые популярные темы недели

В блокировочнике никогда нельзя быть уверенным за правильность отчета?!
Почему SQL Server может сильно тормозить при Insert ?
Какие грабли перевода базы на другой сервер у которого другой Server collation
varchar 2 numeric (Проблема преобразования типов)
OPENDATASOURCE
нарастающие итоги: быстрее курсор ИЛИ join on id<id ?
Нестандартная репликацция
еще раз по поводу XML
Ошибка при запуске агента не с системной учетной записью
Индексы: требуется консультация по улучшению производительности.
SQL Profiler
MS SQL умеет запускать DCOM объекты?
DTS использует BCP?
Философские вопросы по проблеме DataStorage
Кто подключен?
Проблема с мерж репликацией
Дерево
Импорт данных из MS Excel
SQL Server Scheduled Job - Status: Failed
Репликация "многие-к-одному"

[В начало]

Вопросы остались без ответа

Пару вопросов по трассам
JSP+MSSQL
Вопрос про мерж репликацию
Вопрос про экспорт данных с помощью утилиты BCP
Хеш ресурса блокирования
MSIDXS провайдер для Indexing Service
Respect to Glory ! ! ! 20000 постов !
Reporting Services: ошибка при Deploy отчетов на сервере
OpenSSL и SQL
Distribution agent HELP

[В начало]

АНОНСЫ

Журнал "SQL Server для профессионалов", январский выпуск

Журнал, посвященный вопросам разработки и администрирования Microsoft SQL Server. Подписка без дискеты - индекс: 79946. Подписка с дискетой - индекс: 79947. На дискете размещаются исходные тексты ко всем статьям номера. Исходники также можно скачать с сайта журнала, если обратиться по адресу, приведенному ниже. Периодичность выпуска - один раз в месяц. Минимальный срок подписки - 1 месяц. Информацию о ранее вышедших номерах можно найти по адресу http://newsletter.narod.ru
Анонс журнала представляет собой полный текст передовицы и краткое изложение размещенных в номере статей.

Editorial: Ключи к базе данных

Джо Селко (Joe Celko)

Microsoft вовсю рекламирует применение CLR в следующей версии SQL Server 2005. Например: «Используя интеграцию с com­mon language runtime (CLR), вы сможете программировать ваши хранимые процедуры, функции и триггеры на любом из языков, поддерживающих .Net Framework».
Я выбираю COBOL, так как 78% программ во всем мире написано на этом языке. Для него нет версии CLR? Хорошо, попробуем старый PL/I­код, который все еще кое­где используется. Нечестно? Будь по­вашему: я выбираю ADA и стану работать по военным контрактам. Я хочу подчеркнуть следующее: «на любом из языков» подразумевает, что вы будете писать на одном из языков Microsoft. А что делать, если вы любите Java, а не C#?
Продолжим цитирование. «Многие задачи, которые было неудобно или затруднительно программировать на Transact­SQL, лучше реализовать средствами управляемого кода...» С этим я согласен. Но это не те задачи, которые следует программировать в рамках базы данных. Мы в свое время шутили, что SQL можно расшифровать как «Scarcely Qualifies as a Language» (Вряд ли Можно Назвать Языком), так как он не поддерживает прямые операции ввода­вывода и не способен форматировать результаты выполнения. Его математика ограничена в силу того, что он не предназначен для вычислений. Он не выполняет текстовый поиск, обработку списков, графика ему также недоступна. Единственная задача SQL — извлечение данных и манипулирование ими. Точка.
Добавляя новую и новую функциональность, вы получаете неудобоваримую кашу, которая хорошо не делает ничего. Как сказал Антуан де Сент­Экзюпери, «совершенство достигается не тогда, когда нечего добавить, а когда нечего отнять».

Меняем плохое на ужасное!

Следующая цитата от Microsoft поистине интересна: «Вы сможете лучше применить знания и опыт, ранее приобретенные при написании кода».
Вот вам и профессиональный рост в версии Mic­rosoft. «Огг не любит лук и стрелы. Огг не будет учиться стрелять. Огг прибьет добычу камнем. Как всегда!» Неважно, что на старый опыт не всегда можно положиться в новой ситуации. Вернемся к моему неандертальцу: «Огг прибьет ящерицу камнем, Огг шарахнет саблезубого тигра булыжником и съест кошку на обед». Видите потенциальную проблему? Для неандертальца с булыжником все выглядит, как ящерица.
Вас приглашают превратить СУБД в файловую систему и по­прежнему писать код на языке третьего поколения, вместо того чтобы обратиться к декларативному программированию. Если у вас проблемы с декларативным программированием, например, при написании кода ограничений в DDL, возможно, вам стоит попросить о помощи и все­таки научиться. Подобные средства доступа к структуре БД в руках программиста, не имеющего надлежащей подготовки, — не очень хорошая идея.
Есть еще один способ использования CLR для приведения организации к коллапсу — смешение нескольких языков в рамках СУБД.
Вам приходилось сравнивать реализацию функ­ции MOD() в разных языках программирования? Порядок предпочтений операторов? Когда поднимается флаг EOF? При достижении последней строки файла или при выходе за границы последней строки? (Кстати, вы знаете, как это делает стандартный курсор, реализованный на SQL?) Вы строите циклы с проверкой в начале или в конце? Как ваш язык обрабатывает трехзначную логику в конструкциях IF­THEN­ELSE или SWITCH?

Справедливости ради отметим, что по ссылке http://msdn.microsoft.com/sql/2005/2005articles/default.aspx?pull=/library/en-us/dnsql90/html/sqlclrguidance.asp вы сможете найти большую статью «Using CLR Integration in SQL Server 2005», в которой представлена позиция Microsoft в отношении использования CLR в рамках SQL Server 2005.

Говорите на Microsoft?

Когда языки располагались за рамками СУБД, у нас были стандарты, определенные ANSI/ISO, которые определяли интерфейсы. Но языки были вне СУБД и не вызывали срабатывания триггеров или исполнения хранимых процедур, написанных на множестве разных языков. Теперь все это в прошлом. Код представляет собой такую смесь, что вы никогда не выйдете из-под опеки Microsoft и не сможете взаимодействовать с иным источником данных.
Этот подход — повторение старых ошибок. Уничтожение послойной архитектуры — фундаментально неверный подход. Он угрожает целостности данных и возвращает нас в худшие времена файловых операций при обработке данных.
Несомненно, маленький Джонни, получивший сертификат администратора БД, считает себя профессионалом и способен пролезть внутрь СУБД, но может ли кто-то ответить мне, что за преимущества получит его фирма?

[В начало]

DB Design & Warehousing: Применение MDX в Analysis Services: измерение происходящих изменений

Уильям Пирсон (William Pearson)

Эта статья посвящена изучению применения реализующих концепцию времени функций MDX в аналитических продуктах, которые мы собираемся создать в контексте проектирования выражений. Мы на практике обеспечим поддержку анализа зависимости показателей от времени, такого как количественное представление изменений значений величин со временем, с помощью специально предназначенных для этого функций MDX. Более того, мы выполним упражнения по реализации этих концепций в рамках наших источников данных OLAP. Рисунки к данной статье находятся на прилагаемой к журналу дискете, а также по адресу htpp://newsletter.narod.ru.
Мы обратимся к тем аспектам, в которых MDX помогает удовлетворить нужды потребителей информации в анализе зависимости показателей от времени. Кроме того, мы углубим понимание применения MDX в Analysis Services путем:

  • встраивания концепции времени в проектируемые выражения;

  • обеспечения поддержки анализа происходящих со временем изменений при помощи функций MDX;

  • дополнительной практики создания вычисляемых членов «с нуля»;

  • отработки в вычисляемых членах сценариев «деление на ноль»;

  • генерации выражений для расчета отклонений.

Измерение происходящих изменений при помощи выражений MDX

Мы исследуем измерение времени Time, которое входит в подавляющее большинство создаваемых кубов. Потребности составления финансовых и прочих деловых отчетов практически всегда включают элемент времени. Это делается в целях отнесения результатов к определенному периоду отчетности, в целях создания базиса для сравнения результатов текущего периода с результатами только что закончившегося периода (будь то год, квартал, месяц или что угодно) или же для сравнения параллельных периодов (так в терминологии Analysis Services называется, например, текущий месяц предыдущего года). Это позволяет учесть в ведении бизнеса сезонные факторы, а также проверить эффективность новых инициатив (таких как маркетинговые кампании), внедренных в текущем квартале, по сравнению с прошлым кварталом и т. д.

[В начало]

DB Design & Warehousing: Применение множеств в MDX­запросах

Уильям Пирсон (William Pearson)

Эту статью мы посвятим исследованию множеств MDX. Для этого нам потребуется твердый фундамент знаний основ запросов MDX, поэтому в качестве подготовительного шага мы разберем строение и действие запросов MDX. Затем мы перейдем к анализу множеств MDX.
Нам предстоит:

  • обсудить различия между выражениями MDX и операторами запросов MDX;

  • создать простейшие запросы MDX, чтобы получить представление об их компонентах и использовании;

  • изучить множества MDX, их функциональное применение и шаги, необходимые для их создания;

  • попрактиковаться в использовании функций множеств, являющихся составной частью множеств MDX.

Представляем запросы MDX

Наша первостепенная задача — дать читателям хорошее знание операторов запросов MDX и понимание их отличий от многомерных выражений. Как мы заметили в предыдущих статьях, выражение вычисляет одиночное значение. Выражения могут применяться для извлечения информации из источников данных OLAP в различных приложениях, среди которых Excel PivotTable Reports и Office PivotTable List. В отличие от них запрос используется для извлечения множества значений из куба. Запросы лежат в основе составления отчетов с помощью компонентов PivotTable, зачастую мы не видим их, когда визуально формируем отчеты, используя эти или иные инструментальные средства.
Часто мы соединяем несколько выражений и значений, которые они извлекают, чтобы получить многомерную величину для анализа. Основываясь на материале этой статьи, вы научитесь создавать все более хитроумные запросы MDX и сможете понять компоненты запросов, которые генерируются на заднем плане, когда мы создаем выражения MDX с помощью визуальных средств. Умение создавать запросы позволит нам извлекать значения для незамедлительного удовлетворения нужд потребителей информации в нашей организации, равно как и обеспечивать соответствие этих запросов меняющимся требованиям. И все это достигается точным заданием многомерных критериев.

[В начало]

Other: Улучшение откатов с помощью использования виртуальных машин

Джон Пол Кук (John Paul Cook)

Каждый администратор и разработчик БД уже предохранен транзакционным откатом в некоторой точке. Возможно, это был оператор DELETE без конструкции WHERE или с некорректно определенной конструкцией WHERE. Несмотря на всю эффективность оператора ROLLBACK иногда его просто недостаточно, и даже восстановление БД из резервной копии не всегда решает проблему.
Разрешение некоторых проблем может потребовать переустановки всей машины. Виртуальные машины (virtual machine) позволяют соединить полноту переинсталляции с простотой оператора ROLLBACK.
Виртуальные машины являются идеальной средой для тестирования сценариев развертываний или изменения конфигурации. Порой не имеет значения, насколько тщательно выполнялось планирование: совершенствование сценария развертывания может потребовать повторяющегося тестирования и улучшения. Если при проверке сценария что­то идет не так, изменения виртуальной машины можно просто отменить, что приведет к ее возврату в исходное состояние. Изменяйте сценарий, пробуйте снова и снова и в зависимости от результата либо сохраняйте, либо отменяйте изменения виртуальной машины.
Проверка бета­версий программного обеспечения (далее ПО), несомненно, является наиболее очевидной причиной использования виртуальных машин. На самом деле установка бета­версии ПО на компьютер — не лучшая идея, если только он не выделен специально для этой цели. А ведь многие администраторы и разработчики БД хотели бы поэкспериментировать, например, с Yukon (SQL Server 2005) и Visual Studio.NET (известную ранее как Whidbey). При установке бета­версий этих продуктов на виртуальную машину компьютер, на котором она размещена, абсолютно не подвергается воздействию бета­версий. То, что происходит на виртуальной машине, остается только на ней.
Многие компании виртуализируют (virtualizing) старые компьютеры, поддерживающие традиционные приложения; все в большей степени становится привычным видеть перемещенными на виртуальные машины серверы NT 4, на которых запущены SQL Server 6.x. При этом несколько старых физических серверов может быть перенесено на один сервер, поддерживающий несколько виртуальных машин (существуют коммерческие продукты от компаний Leostream (http://www.leostream.com/), PlateSpin (http://www.platespin.com/) и VMware (http://www.vmware.com/products/vtools/p2v_features.html), предназначенные облегчить преобразование физических машин в виртуальные).
Microsoft и VMware предлагают продукты для создания виртуальных машин. Продукт Virtual PC 2004 компании Microsoft включен в подписку ПО Web­сайта MSDN. Продукт Virtual Server компании Microsoft в настоящее время находится на стадии бета­тестирования. Бесплатную пробную версию Virtual PC 2004 можно загрузить по следующей ссылке: http://www.microsoft.com/windowsxp/virtualpc/. Официальные требования для систем, размещающих Virtual PC 2004, можно найти по адресу http://www.microsoft.com/windowsxp/virtualpc/eva­lu­ati­on/sysreqs.asp, но в них не включена такая операционная система (далее ОС), как Windows Server 2003. Однако многие люди (включая меня) получают замечательные результаты, запуская Virtual PC 2004 на ОС Windows Server 2003. Использование подобной неподдерживаемой конфигурации полностью является вашим собственным риском и не должно выполняться на производственном ПО и системах.

[В начало]

Rambler - разработчикам: поиск по MSDN

Компания Rambler продолжает расширять линейку сервисов, предназначенных для разработчиков и технических специалистов. В конце ноября 2004 года был официально запущен проект msdn.rambler.ru, позволяющий быстро и легко найти информацию о всех средствах разработки, программных интерфейсах и языках программирования, поддерживаемых Microsoft. За два месяца, прошедших с момента официального запуска сервиса, им воспользовались уже 10 тыс. человек.
Microsoft Developer Network (MSDN) представляет собой набор on-line и off-line сервисов, созданных для того, чтобы помочь разработчикам создавать приложения на базе продуктов и технологий Microsoft. MSDN Library - это наиболее полная и подробная web-библиотека, содержащая документацию, технические статьи и справочные руководства для программистов и системных администраторов.
База данных msdn.rambler.ru содержит более 645 000 уникальных документов. Восстановленное меню рубрик соответствовало оригинальной структуре информации MSDN. Тематический рубрикатор заметно упрощает поиск информации в библиотеке, позволяя выбрать именно те документы, которые непосредственно относятся к интересующей пользователя технологии. Например, новый сервис очень удобен для поиска информации о таких технологиях, как "Registry Redirection" и "Execution Protection". В базу была также добавлена документация на русском языке - около 40 тыс. документов, представляющих собой русскоязычные версии наиболее часто используемых инструментов и программных интерфейсов Microsoft.
Все результаты поиска дополнительно сопровождаются цитатами, содержащими слова запроса. Цитаты помогают определить наиболее релевантную запросу страницу библиотеки. Рубрикатор и механизм цитирования бывают особенно полезны в случаях, когда пользователь знает, что делает искомая функция, но не знает, как она называется.
Как и большинство специализированных поисковых сервисов Rambler, поиск по MSDN Library интегрирован с основной поисковой машиной. Если запрос пользователя содержит название программной функции или объекта, описание которого есть в библиотеке, ссылка на него автоматически добавляется в начало страницы с результатами поиска. К примеру, если набрать в поисковой строке на головной странице Rambler запрос "CreateFile" или "Istorage", то результаты поиска по базе MSDN появятся на итоговой странице перед началом общего списка. Если вы хотите сэкономить время и ограничить область поиска только MSDN Library, к запросу в основном поисковике надо добавить префикс "msdn:". В этом случае запрос будет выглядеть как "msdn: wow64" или "msdn: td".
Поиск по MSDN - это уже третий по счету профессиональный поисковый сервис, запущенный в рамках программы "Rambler - разработчикам". Как и два предыдущих - поиск по архивам FreeBSD и Linux - он уже нашел свою аудиторию. Целью программы является создание в рамках портала Rambler универсального ресурса для разработчиков, позволяющего искать документацию по всем актуальным и популярным технологиям и программным продуктам.

[В начало]

#232<<  #233

Вопросы, предложения, коментарии, замечания, критику и т.п. оставляйте Виталию Степаненко и Александру Гладченко в форуме: Обсуждение рассылки

СЕМИНАРЫ  КОНФЕРЕНЦИИ

МИНИФОРМА
ПОДПИСКИ



ПУБЛИКАЦИИ  АРХИВ


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.winsoft.sqlhelpyouself
Отписаться

В избранное