SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Microsoft SQL Server » Быстрая визуализация данных с помощью MS SSMS. Или строим график по данным из таблицы.
Быстрая визуализация данных с помощью MS SSMS. Или строим график по данным из таблицы. [сообщение #80] Wed, 22 June 2022 18:18
BlackEric в настоящее время не в онлайне  BlackEric
Сообщений: 360
Зарегистрирован: June 2022
Senior Member
Иногда складывается такое ощущение, что народ ставит новые версии sql сервера просто не зная зачем, а разрабатывает софт как привык за 15 лет под MS SQL 2000. Новые возможности и типы данных, которые уже есть лет 7 вызывают недоумение. Если xml прижился, то использование CLR типов я не встречал.
А началось все с того, что у нас на клиенте график в отчете показывал совсем не то, что ожидалось пользователями.

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

Предположим, что нам нужно быстро визуализировать данные. Начиная с 2008, а лучше 2008R2 версии, сервер содержит встроенные CLR типы geometry и geography, которые позволяют визуализировать данные.
Для примера пусть у нас есть таблица c полями x, x*x.

Заполним ее


use testdb
go

create table data
(
id int primary key identity(1,1),
val_x int,
val_x2 int
)
Go

declare @i int
Set @i = -10

while @i < 10
begin
Insert Into data(val_x, val_x2)
Values(@i, @i + 1)

Set @i = @i + 1
end
Go

Затем отобразим точки на графике

use testdb
go

declare @graph table(
line geometry null
)

declare C cursor local fast_forward for
select
val_x,
val_x2
from data as i

open C

declare
@val_x int,
@val_x2 int,

@line geometry

Select @val_x=val_x, @val_x2=val_x2 from data

--Insert Geometry Values
while 1=1
begin
fetch next from C into @val_x, @val_x2
if @@fetch_status <> 0 break;

set @line = geometry::STPointFromText('POINT('+cast(@val_x as varchar(max))+' '+ cast(@val_x2 as varchar(max)) +')', 0)

insert into @graph([line])
values(@line)
end

--Display data
select * from @graph
В результате получится набор точек по которому можно прикинуть изменение данных в таблице. При желании можно вместо точек вывести линии.
Начиная с 2012 версии сервера можно использовать @line.BufferWithCurves(1) чтобы сделать точки или отрезки графика более жирными.
Предыдущая тема: Приветствие
Следующая тема: Один из трюков чтения данных из поврежденной бд
Переход к форуму:
  


Текущее время: Thu Nov 21 21:40:27 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00535 секунд