Ana içeriğe geç
Kesit Power BI
İleri · Fabric

Fabric’te veriyi hazırlamak: T-SQL görünümleri, saklı yordamlar, not defterleri ve işlem hatları

Doğru depoyu seçmek, ambarda görünüm, fonksiyon ve saklı yordam yazmak, PySpark not defterinde temizlik, görsel sorgu düzenleyici, işlem hatlarıyla düzenleme, yinelenen/eksik/null veri ve tür dönüşümü, anlam modeli için düzleştirme ve önceden toplama, OneLake kataloğu.

Uygulamada aç, 8 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

DP-600 sınavında en ağır alan, yaklaşık yarı ağırlıkla veriyi hazırlamaktır. Power BI geliştiricisi için bu, Power Query’de yaptığın işin bir katman aşağıya, lakehouse ve ambara inmesi demektir. Bu ders “Microsoft Fabric’e giriş” dersinin devamıdır: orada parçaları tanıdın, burada onlarla Anadolu Market’in satış verisini temizleyip modele hazır hâle getireceksin. Yıldız şema, vekil anahtar ve SCD Tip 2 ayrıntıları “Fabric’te yıldız şema” dersinde; burada tekrar etmiyoruz.

Önce depoyu seç

İhtiyaçDepoNeden?
Ham dosyalar (CSV, JSON) + Spark ile temizlikLakehouseDosyalar ve Delta tablolar bir arada; SQL analiz uç noktası salt okunur sorgu verir
T-SQL ile INSERT/UPDATE/MERGE, saklı yordamlar, SQL ekibiAmbar (warehouse)Tam okuma-yazma T-SQL
Saniyeler içinde gelen olay, log, tıklama verisiEventhouse (KQL veritabanı)Zamana göre düzenlenmiş akış verisi; KQL ile sorgu

Tipik düzen: ham veri lakehouse’ta, temizlenmiş ve modele hazır tablolar ambarda ya da yine lakehouse’ta. Gerçek zamanlı kısım “Gerçek zamanlı analitik” dersinde.

Ambarda T-SQL: görünüm, fonksiyon, saklı yordam

Fabric ambarı tablolar, görünümler, saklı yordamlar ve fonksiyonları destekler. Lakehouse’un SQL analiz uç noktasında da görünüm, fonksiyon ve yordam tanımlayabilirsin; ama orada tablo oluşturma, INSERT, UPDATE ve DELETE yoktur, çünkü tabloları Spark ya da veri akışı yazar.

Görünüm (view): Temizlik kuralını tek yerde tutar. Aşağıdaki görünüm iptalleri ayıklar, tutarı ondalık sayıya çevirir ve ürün kategorisini satırın yanına getirir:

CREATE VIEW dbo.vw_SatisTemiz AS
SELECT  s.SiparisNo,
        s.SatirNo,
        CAST(s.Tarih AS date)            AS Tarih,
        s.MusteriNo,
        s.UrunNo,
        u.Kategori,
        s.Kanal,
        CAST(s.Tutar AS decimal(18, 2))  AS Tutar,
        COALESCE(s.Indirim, 0)           AS Indirim
FROM    dbo.Satislar AS s
JOIN    dbo.Urunler  AS u ON u.UrunNo = s.UrunNo
WHERE   s.Durum <> 'İptal';

Satır içi tablo değerli fonksiyon: Parametre alan bir görünüm gibi düşün. Örneğin tek bir kanalın satışlarını döndürür:

CREATE FUNCTION dbo.fn_KanalSatis (@Kanal varchar(20))
RETURNS TABLE
AS
RETURN
    SELECT Tarih, Kategori, SUM(Tutar) AS Tutar
    FROM   dbo.vw_SatisTemiz
    WHERE  Kanal = @Kanal
    GROUP BY Tarih, Kategori;

-- Kullanım
SELECT * FROM dbo.fn_KanalSatis('Web');

Saklı yordam (stored procedure): Birden çok adımı tek komutta toplar ve işlem hattından çağrılır. Bu yordam aylık özet tabloyu baştan kurar:

CREATE PROCEDURE dbo.usp_AylikOzetYenile
AS
BEGIN
    DELETE FROM dbo.AylikKategoriOzet;

    INSERT INTO dbo.AylikKategoriOzet (YilAy, Kategori, NetSatis, Adet)
    SELECT  FORMAT(Tarih, 'yyyy-MM'), Kategori, SUM(Tutar), COUNT(*)
    FROM    dbo.vw_SatisTemiz
    GROUP BY FORMAT(Tarih, 'yyyy-MM'), Kategori;
END;
Learn’de önizleme olanlarT-SQL yüzey alanı sayfasında iç içe CTE, ALTER TABLE … ALTER COLUMN, düzenli ifade (regex) fonksiyonları ve birçok yapay zekâ fonksiyonu önizleme olarak işaretli. Tetikleyici (trigger), gerçekleştirilmiş görünüm (materialized view) ve özyinelemeli sorgu ambarda desteklenmiyor. MERGE ise genel kullanımda.

Not defterinde PySpark ile temizlik

Hacim büyüyünce ya da mantık SQL’e sığmayınca not defteri (notebook) kullanılır. PySpark DataFrame’i, pandas’a benzer ama veriyi birçok makineye dağıtarak işler. Aşağıdaki hücre ham satış tablosunu okur, temizler ve Delta tablo olarak yazar:

from pyspark.sql import functions as F

ham = spark.read.table("ham_satislar")

temiz = (
    ham
    .dropDuplicates(["SiparisNo", "SatirNo"])              # yinelenen satırlar
    .withColumn("Tutar", F.col("Tutar").cast("decimal(18,2)"))   # tür dönüşümü
    .withColumn("Tarih", F.to_date("Tarih", "dd.MM.yyyy"))
    .withColumn("Kanal", F.trim(F.col("Kanal")))
    .fillna({"Indirim": 0})                                # eksik indirim = 0
    .filter(F.col("Durum") != "İptal")
)

temiz.write.mode("overwrite").format("delta").saveAsTable("satislar_temiz")
İşPySparkpandasPower Query
Yinelenenleri kaldırdropDuplicates([...])drop_duplicates(subset=[...])Yinelenenleri kaldır
Boşu doldurfillna({...})fillna({...})Değerleri değiştir
Tür değiştircast("int")astype("int")Veri türü
Satır filtrelefilter(...)df[df.Durum != "İptal"]Satırları filtrele

Küçük tablolarda Fabric’in Python (Spark’sız) not defterleri ve pandas yeterli olabilir; büyük tabloda Spark tercih edilir.

Görsel sorgu düzenleyici

SQL yazmak istemeyen kullanıcılar için ambarda ve SQL analiz uç noktasında görsel sorgu düzenleyici (visual query editor) var. Power Query’nin diyagram görünümünü kullanır: tabloları tuvale sürükler, “Sorguları yeni olarak birleştir” gibi adımlar eklersin.

İşlem hatları: kopyala, çalıştır, zamanla

İşlem hattı (pipeline) adımları sıraya koyar. Anadolu Market’in gece hattı:

  1. Veri kopyala (Copy data) etkinliği: ERP’deki satış tablosunu lakehouse’un ham bölümüne taşır.
  2. Fabric not defteri etkinliği: yukarıdaki temizlik hücresini çalıştırır.
  3. Saklı yordam etkinliği: usp_AylikOzetYenile çağrılır.
  4. Anlam modeli yenileme etkinliği: modeli yeniler (Direct Lake’te çerçeveleme).
  5. Herhangi bir adım hata verirse Teams etkinliği ekibe mesaj atar; If condition ve ForEach ile koşul ve döngü kurulur.

Hat Zamanla düğmesiyle belirli aralıkta, Tetikleyici ile de bir olayda (ör. göle yeni dosya düştüğünde) çalışır. Yalnızca kaynaktan hedefe veri taşıyacaksan işlem hattı kurmadan Kopyalama işi (Copy job) da kullanılabilir; ilk çalışmada tam, sonra yalnızca yeni ve değişen satırları kopyalar.

Kirli veri: yinelenen, eksik, null ve tür

Temizliğe başlamadan önce ölç. Anadolu Market modelinde birkaç kontrol yapalım:

EVALUATE
ROW(
    "Satır", COUNTROWS(Satislar),
    "Farklı sipariş", DISTINCTCOUNT(Satislar[SiparisNo]),
    "Farklı satır no", DISTINCTCOUNT(Satislar[SatirNo])
)

1.620 satır, 910 farklı sipariş, 1.620 farklı satır numarası. Yani bir siparişin birden çok satırı var (bu normal, tanecik sipariş satırı), ama anahtar olan satır numarası hiç tekrar etmiyor: yinelenen kayıt yok. Yinelenen kontrolü her zaman tablonun anahtarıyla yapılır.

Müşteri tablosunda ise 150 kayıt ve 140 farklı ad var. Bu yinelenme mi? Hayır: müşteri numaraları 150 farklı. Aynı adı taşıyan farklı kişiler var. Adı anahtar sanıp “yinelenenleri kaldır” dersen gerçek müşterileri silersin.

BulguSayıKarar
Satislar[KargoGun] boş131 satır: 121’i iptal, 10’u hâlâ kargodaDoldurma! Boşluk anlamlı: teslim olmamış sipariş. Ortalama kargo günü boşları zaten saymaz.
Musteriler[Bolge] ve [Sehir] boş7 müşteri, 63.853 ₺ net satışSilme; “Bilinmiyor” üyesine ata ve kaynağa geri bildir.
Ad tekrarı150 kayıt, 140 farklı adYinelenme değil; anahtar MusteriNo.

Tür dönüşümünde iki kural: tarihleri metin olarak bırakma (zaman zekâsı çalışmaz) ve para tutarını float yerine decimal tut (toplamlarda kuruş kayması olmasın). Dönüşüm hatasında satırı sessizce atmak yerine hatalı satırları ayrı bir tabloya yaz ve say.

Düzleştir ve önceden topla

Anlam modeli için iki hazırlık daha var:

Özet tablonun doğru olup olmadığını DAX ile de kontrol edebilirsin. Ambarda GROUP BY ne yapıyorsa, DAX’ta SUMMARIZECOLUMNS aynısını yapar:

EVALUATE
SUMMARIZECOLUMNS(
    Tarih[Yil],
    Urunler[Kategori],
    "Net Satış", [Net Satış],
    "Adet", [Satılan Adet]
)

1.620 satış satırı, yıl × kategori düzeyinde 21 satıra iner. Ambardaki özet tablonun toplamları bu sorguyla aynı değilse, ya temizlik kuralı (iptaller) ya da tarih dönüşümü farklıdır.

OneLake kataloğu: veriyi bul, yönet, koru

Hazırladığın tabloyu başkalarının bulması gerekir. OneLake kataloğu (OneLake catalog), Fabric gezinti bölmesindeki OneLake simgesiyle açılır ve üç sekmeden oluşur:

Akış verisi için katalogun karşılığı Real-Time hub’dır; bir sonraki derste.

İşlem hattının içiBağımlılık, parametre, filigran ve teşhis İşlem hatları dersinde.
Alıştırmalara geç (8)