Начало » Использование СУБД » Microsoft SQL Server » Быстрая визуализация данных с помощью MS SSMS. Или строим график по данным из таблицы.
Быстрая визуализация данных с помощью MS SSMS. Или строим график по данным из таблицы. [сообщение #80] |
Wed, 22 June 2022 18:18 |
BlackEric
Сообщений: 368 Зарегистрирован: 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) чтобы сделать точки или отрезки графика более жирными.
|
|
|
Переход к форуму:
Текущее время: Sun Dec 22 19:43:50 GMT+3 2024
Общее время, затраченное на создание страницы: 0.00597 секунд
|