Функции на прозореца на MS SQL 2005

Друго разширение на T-SQL

Автор: Иван Бодягин (Мерле)
Групата RSDN
Източник: Списание RSDN № 6-2004

прозореца

Поради факта, че следващата версия на MS SQL Server, която се очаква да излезе през 2005 г., има безумно много нововъведения, слонът трябва да бъде изяден на части. Това парче е посветено на нова функционалност, наречена "Функции на прозореца", известна на широката общественост и като "аналитична" или OLAP функции.

Самата идея не е нова. По предложение на IBM, Oracle, Informix и Compaq аналитичните функции бяха добавени към ANSI SQL 99. В Oracle поддръжката за такава функционалност, със специфичните си разширения, се появи от версия 8i R2, в DB2 - от версия 7.1 и налична в T-SQL включен в момента, функциите CUBE и ROLUP също могат да бъдат приписани на аналитични.

От една страна, Microsoft вече доставя заедно със SQL Server достатъчно мощен механизъм за анализ на данни - Analysis Services. Поради тази причина Microsoft бавно подкрепя инициативата за въвеждане на някои OLAP функции в SQL стандарта.

Но от друга страна, ако имате нужда от анализ на данни, не винаги е възможно и желаете да предложите друга услуга. В допълнение, строго погледнато, аналитичните функции не са напълно правилни, за да се отнасят към OLAP, те не са предназначени за многоизмерен анализ на данни, работа с хиперкубове и сложни йерархии, тези функции извършват само статистически анализ на данни в готова извадка. Въпреки това е доста мощен и удобен инструмент и следователно в крайна сметка Microsoft също не остана настрана.

Първо, няколко думи за това какво представляват аналитичните функции и как функционират като цяло. Една от основните разлики между аналитичните функции и обикновените скаларни функции е, че този клас оператори работи с готов избор. Първо се формира селекция, изпълняват се всички обединения, условията WHERE, GROUP BY, HAVING - всичко с изключение на сортирането и едва след това аналитичната функция се прилага към почти готовия набор от данни. Ето защо аналитичните функции могат да бъдат зададени само в списъка за избор или в условието за сортиране.