MSSQL Sorgusu Oluşturma (T-SQL)
Bu sayfa, Pirivision Compass modülünde bir MSSQL veri kaynağına T-SQL sorgusu yazıp kaydetme sürecini anlatır.
T-SQL Farkları
MSSQL, standart SQL'den farklı T-SQL (Transact-SQL) dialektini kullanır. LIMIT yerine TOP N, NOW() yerine GETDATE(), tarih işlemleri için DATEADD() / DATEDIFF() kullanılır.
Ön Koşul — Port Veri Kaynağı
Bu sorguyu oluşturmak için Port modülünde bir MSSQL veri kaynağı tanımlı olmalıdır. Henüz eklenmemişse önce Port'a gidin ve bir bağlantı oluşturun.
Oluşturma Öncesi Gerekli Bilgiler
Bu sayfadaki örnekler Demo Fabrika MSSQL demo_fabrika.vardiya_uretim tablosunu ve Port'taki Demo Fabrika - MSSQL veri kaynağını kullanır. Aynı veriyi kendi ortamınızda oluşturmak için bkz. Sentetik Veri Üretimi — MSSQL.
| Bilgi | Açıklama | Varsayılan | Örnek |
|---|---|---|---|
| Veri Kaynağı | Port'ta eklenmiş MSSQL bağlantısı | — | Demo Fabrika - MSSQL |
| Sorgu Adı | Compass listesinde görünen isim | — | mssql_vardiya_uretim |
| T-SQL İfadesi | Çalıştırılacak T-SQL sorgusu | — | SELECT TOP 50 * FROM demo_fabrika.vardiya_uretim WHERE hat_id = {{hat_id}} ORDER BY ts DESC |
| Hedef Klasör | Compass klasörü | Kök (Root) | Demo Fabrika / Üretim |
1. Compass Modülüne Girin
Sol menüden Compass modülüne tıklayın.
2. Yeni Sorgu Oluşturun
Add New Query butonuna tıklayın.
3. MSSQL Veri Kaynağı Seçin
Select Your Data Source ekranında MSSQL tipindeki veri kaynağını seçin. Next butonuna tıklayın.
4. SQL Editörü Açılır
T-SQL editör ekranı açılır. Sol panelde MSSQL veritabanındaki tablolar ve kolonlar listelenir.
5. T-SQL Sorgusu Yazın
-- Hızlı test — parametresiz, son 7 gün — Demo Fabrika
SELECT TOP 50
ts,
hat_id,
makine_id,
vardiya,
urun_ailesi,
uretim_adet
FROM demo_fabrika.vardiya_uretim
WHERE ts >= CAST(DATEADD(day, -7, GETDATE()) AS date)
ORDER BY ts DESC, hat_id;
-- Son N gün — {{days}} parametreli
-- NOT: CAST({{days}} AS int) zorunludur; aksi halde MSSQL nvarchar hatasını verir.
SELECT TOP 50
ts,
hat_id,
makine_id,
vardiya,
urun_ailesi,
uretim_adet
FROM demo_fabrika.vardiya_uretim
WHERE ts >= CAST(DATEADD(day, -CAST({{days}} AS int), GETDATE()) AS date)
AND hat_id = {{hat_id}}
ORDER BY ts DESC, hat_id;
-- Zaman aralığı — {{start_date}} / {{end_date}} parametreli
SELECT ts,
hat_id,
uretim_adet
FROM demo_fabrika.vardiya_uretim WITH (NOLOCK)
WHERE ts >= CAST({{start_date}} AS date)
AND ts <= CAST({{end_date}} AS date)
ORDER BY ts;
-- Vardiya bazlı özet
SELECT vardiya,
SUM(uretim_adet) AS toplam,
AVG(CAST(uretim_adet AS FLOAT)) AS ortalama,
COUNT(*) AS kayit_sayisi
FROM demo_fabrika.vardiya_uretim WITH (NOLOCK)
WHERE ts >= CAST({{start_date}} AS date)
AND ts <= CAST({{end_date}} AS date)
AND hat_id = {{hat_id}}
GROUP BY vardiya;
-- DATEDIFF ile gün farkı
SELECT hat_id,
DATEDIFF(day, MIN(ts), MAX(ts)) AS gun_araligi
FROM demo_fabrika.vardiya_uretim
WHERE ts >= CAST({{start_date}} AS date)
AND ts <= CAST({{end_date}} AS date)
GROUP BY hat_id;
T-SQL'e özgü notlar:
- TOP N kullanın — LIMIT N T-SQL'de çalışmaz
- ts kolonu date tipindedir; tarih parametrelerini her zaman CAST({{param}} AS date) ile dönüştürün
- GETDATE() ile anlık zaman alın; DATEADD(unit, amount, date) ile tarih hesaplama; sonucu CAST(... AS date) ile kesin
- Canlı tablolarda WITH (NOLOCK) kilit sorunlarını önler
- DATEDIFF(unit, start, end) ile iki tarih arasındaki farkı hesaplayın
- Boşluklu isimler için [tablo adi] sözdizimi kullanın
6. Makinist ile Sorgu Yazdırma (AI)
Makinist nedir?
Makinist, Compass SQL sorgu editörünün yapay zeka asistanıdır. Veritabanı tablolarını bağlam olarak seçin, doğal dille isteğinizi yazın; çalıştırılabilir T-SQL sorgusu olarak geri döner. Yanıt Langflow üzerinden üretilir ve oturum geçmişi korunur.
Data Explore ekranında, Write Query panelinin sağ üst köşesindeki Write with AI butonuna tıklayın.
Makinist paneli açılır; sol taraf sohbet arayüzüne dönüşür, sağ tarafta Table Preview aktif kalmaya devam eder.
| UI Öğesi | Açıklama |
|---|---|
| Makinist başlığı + 🤖 ikonu | Sol panelin sohbet moduna geçtiğini gösterir |
| Oturum dropdown | Geçmiş oturumlara geçiş; format: {VeriKaynağı}_{Ay}_{SS:dd:ss} |
| 🗑️ Silme ikonu | Aktif oturumu Langflow'dan siler; yeni boş oturum açılır |
| Close Chat | Makinist panelini kapatır; Write Query moduna döner |
| ≡ (Select Tables) | Tablo seçim modalını açar — tablo seçmeden mesaj gönderilemez |
| Input + ▶ | Mesaj yazma ve gönderme alanı |
1. Tablo Seçin
Sol alttaki ≡ (Select Tables) ikonuna tıklayın. Select Tables modalı açılır; MSSQL veritabanındaki tüm tablolar checkbox listesi halinde görünür.
Kullanacağınız tabloyu işaretleyip OK butonuna tıklayın. Seçilen tablolar input alanının solunda chip olarak görünür; chip'in × ikonu ile tek tek kaldırılabilir.
Az tablo, net sonuç
Sorgu için gerekli olan minimum tablo setini seçin. Fazla tablo eklemek modelin doğru bağlamı bulmasını zorlaştırır. Hiç tablo seçilmeden mesaj gönderilemez.
2. İsteğinizi Yazın ve Gönderin
Input alanına Türkçe veya İngilizce isteğinizi yazın ve ▶ (Gönder) butonuna tıklayın.
Yanıt beklenirken sohbet alanında typing... balonu görünür. Makinist yanıtı iki bölümden oluşur:
| Bölüm | Açıklama |
|---|---|
| Kullanıcı mesajı | Sağda yeşilimsi balonda gösterilir |
| SQL kod bloğu | Syntax highlighted T-SQL kodu; üst köşede Copy ve Use SQL butonları |
| SQL Sorgu Açıklaması | Sorgunun ne yaptığını açıklayan Türkçe metin |
T-SQL diyalektini belirtin
İsteğinizde "TOP N kullan, LIMIT kullanma" veya "DATEADD ile tarih hesapla" gibi notlar eklerseniz Makinist T-SQL'e daha uygun sorgu üretir.
3. SQL'i Editöre Aktarın
SQL kod bloğundaki Use SQL butonuna tıklayın.
- Sorgu sol Write Query editörüne syntax highlighted olarak yapıştırılır.
- Sağ panel otomatik olarak Query Result moduna geçer ve sorgu çalıştırılır.
- Makinist paneli kapanır; Write with AI butonu tekrar görünür.
Hardcoded değerleri parametreye çevirin
Use SQL sorguyu olduğu gibi aktarır ve çalıştırır. Üretilen sorguda 'HAT-1' veya 7 gibi sabit değerler varsa bunları {{hat_id}} / {{days}} şeklinde parametreye dönüştürün; Parameters bölümünde varsayılan değer atayın.
7. Sorguyu Test Edin
Run butonuna tıklayın. Sonuçlar tablo formatında görünür.
8. Kaydet → Display Info
Save butonuna tıklayın. Kayıt paneli açılır.
| Alan | Zorunlu | Varsayılan | Örnek |
|---|---|---|---|
| Name | Evet | — | mssql_vardiya_uretim |
| Description | Hayır | — | Son 7 günlük vardiya üretim kayıtları (MSSQL) |
9. Global Değişkenler
{{parametre}} kullanıldıysa sol panelde tanımlanır:
| Alan | Zorunlu | Açıklama | Varsayılan | Örnek |
|---|---|---|---|---|
| Değişken Adı | Evet | {{...}} içindeki isim |
— | start_date |
| Görünen Ad | Evet | Dashboard etiketi | — | Başlangıç Tarihi |
| Tip | Evet | Textbox / Datepicker / Dropdown | Textbox |
Datepicker |
| Varsayılan Değer | Hayır | İlk yükleniş değeri | — | 2024-01-01 |
10. Location — Hedef Klasör
Target Folder alanından klasörü seçin.
11. Kaydet Butonuna Tıklayın
Save butonuna tıklayın. Sorgu Compass listesine kaydedilir.
12. Sık Karşılaşılan Hatalar
| Hata / Belirti | Olası Neden | Çözüm |
|---|---|---|
mssql: login failed for user '...' |
Kullanıcı adı veya şifre yanlış | Port'ta MSSQL bağlantısını güncelleyin |
mssql: Cannot open database "..." requested by the login |
Veritabanı adı yanlış veya yetki yok | Port'taki bağlantı ayarlarını kontrol edin |
mssql: TCP provider: connection refused |
MSSQL sunucusuna ulaşılamıyor | Host, port ve ağ erişimini kontrol edin |
mssql: TLS Handshake failed |
SSL/TLS uyuşmazlığı | Port bağlantısındaki SSL ayarlarını kontrol edin |
mssql: Operand data type nvarchar is invalid for minus operator |
DATEADD içinde -{{param}} kullanımı |
CAST({{days}} AS int) ile sarın: DATEADD(day, -CAST({{days}} AS int), GETDATE()) |
'LIMIT' is not a recognized T-SQL keyword |
T-SQL'de LIMIT kullanılamaz |
SELECT TOP N kullanın |
mssql: Invalid object name 'tablo' |
Tablo yok | Tablo adını doğrulayın |
mssql: Invalid object name 'demo_fabrika.vardiya_uretim' |
Demo Fabrika verisi yüklenmemiş | Bkz. Sentetik Veri Üretimi — MSSQL |
mssql: Column 'kolon' does not exist |
Kolon adı yanlış | Tablo tarayıcısından kolon adını doğrulayın |
"you already have a query named '...'" |
Aynı adda sorgu mevcut | Farklı ad girin |
| Boş sonuç | WHERE koşulu eşleşmiyor | NOLOCK hint ekleyin; filtre değerlerini kontrol edin |











