Delphi'de OLAP'ı nasıl yapılandırılır ve analitik görevleri çözmek için veri kesitleri nasıl kullanılır

2026-10-21

Delphi'de OLAP'ı nasıl kurarsınız ve analiz görevlerini çözmek için veri kesiği nasıl kullanılır

Herhangi bir muhasebe sistemi geliştiricisi, büyük veri hacimlerini analiz etme göreviyle karşı karşıya kalır. "Bilgi çorbasını" yapılandırılmış raporlara dönüştürmek, yönetim kararları almak için kritik önem taşır. Bu, örneğin şunları kapsar:

  • stok muhasebesi ve stok yönetimi;
  • üretim analizi ve maliyet hesabı;
  • satış ve zaman serisi analizi.

Örneğin, OLAP küpleri (FastCube), bu görevleri hızlı, görsel ve karmaşık SQL sorguları yazmadan çözmenizi sağlar. İki boyutlu tabloların aksine, çok boyutlu pivot tablolar veriye farklı açılardan (veri kesiği ile) gerçek zamanlı olarak bakma imkânı sunar.

Bu makalede, Delphi'de TfrGrid (kaynak veriler için) ve TfcxSliceGrid (pivot özeti oluşturmak için) bileşenlerini kullanarak analitik bir uygulama oluşturma sürecini adım adım inceleyeceğiz. 

 


 


Adım 1. Ham Verilerin TfrGrid ile Görselleştirilmesi

Analitiği kurmadan önce ilk veri kesiğini görmemiz gerekir. Örnek olarak 2025 yılına ait bir makine imalat işletmesinin verilerini alalım.

TfrGrid bileşenine ihtiyacımız olacak; bu bileşen FastReport VCL paketinin parçasıdır ve demo sürümünde ücretsiz olarak sunulur.

  1. TfrGrid bileşenini Delphi araç paletinde bulun.
  2. Onu forma yerleştirin ve Align = alBottom özelliğini ayarlayın (formun altına sabitlemek için).
  3.  

TfrGrid bileşeninin forma eklenmesi

  1. Gridi, frGrid1TableView1 bağlam menüsü üzerinden veri kaynağına (TDataSource) bağlayın.

Gridin bağlam menüsü üzerinden veri kaynağına bağlanması


 

Adım 2. Bileşenin Görüntülenmesinin ve Düzenlenmesinin Yapılandırılması

Grid bileşeninin ana özelliği — hücrelerin doğrudan düzenlenmesidir (veritabanı alanındaki kaynak verilerin değiştirilmesi). FastGrid'de bu, alan türüne göre editörlerin otomatik olarak atanmasıyla gerçekleştirilir. Örneğin:

  • tarih alanları için – açılır liste takvim.
  • sayısal değerler için – SpinEdit.

Sütunlar Nasıl Yapılandırılır

  1. Yerelleştirme. Alanları teknik adlardan Türkçe okunabilir adlara dönüştürmek için sütun başlığına tıklayın (örneğin, Product → Parça Adı).

"Tarih" sütunu için yerelleştirmenin eklenmesi

  1. Genişlik. Sütun genişliklerini elle ayarlayın (Tasarım Zamanı modu).

Bileşende sütun genişliklerinin elle ayarlanması

  1. Stil. Okunabilirliği artırmak için çift ve tek satırlara farklı renkler atayın (BackgroundColorEven / BackgroundColorOdd).

Satırların renk değişimi için stillerin seçilmesi

  1. Editörlerin ayrıntılı yapılandırılması. Gerektiğinde, "Properties" adlı özellikten editör seçeneklerinden birini seçerek her sütunun özelliklerini nokta atışı yapılandırın.

"Properties" özelliği üzerinden editörlerin ayrıntılı yapılandırılması

Önemli: Bu aşamada kaynak verileri görüntülemek ve elle düzeltmek için bir arayüz elde ettik. Bu henüz analitiğin nihai sonucu değil.

 


 

Adım 3. FastCube ile Çok Boyutlu Küpün (OLAP) Oluşturulması

Şimdi ana araca geçiyoruz — pivot tabloya. Bunun için TfcxSliceGrid bileşenini kullanacağız ve onu TfrGrid ile aynı veri kaynağına bağlayacağız.

  1. Forma TfcxSliceGrid yerleştirin ve Align = alClient ayarını yapın (bileşeni kalan alanın tamamına yaymak için).
  2. TfrGrid ile TfcxSliceGrid arasına TSplitter ayırıcısını ekleyin. Bu, kullanıcının bileşenlerin boyutlarını değiştirmesini sağlar. Bir nesnenin boyutu, diğerinin boyutu hesabına artar.

TSplitter ayırıcısının eklenmesi

  1. Veri kaynağına bağlantı için forma bir bileşen zinciri yerleştirin:
  • TfcxDBDataSet → DataSet'i belirtiyoruz (ana veri kümemiz).
  • TfcxDataSource → onu TfcxDBDataSet'e bağlıyoruz. Sağ tıklayarak "Add all fields" (tüm alanları oluştur) seçeneğini seçiyoruz.
  • TfcxCube → DataSource'u belirtiyoruz ve CubeSource = fccs_DataSource ayarını yapıyoruz. Active = True özelliğini etkinleştiriyoruz.
  • TfcxSlice → Cube özelliğini TfcxCube ile, TfcxSliceGrid.Slice'ı ise TfcxSlice ile bağlıyoruz.

 

Adım 4. Boyutların Ayrıntılı Yapılandırılması (DateSplitPaths)

Zaman dönemleriyle rahat çalışmak için tarihin bölünmesini yapılandırmak gerekir:

  1.    fcxDataSource.Fields koleksiyonunda Date alanını seçin.

fcxDataSource.Fields koleksiyonundaki alanların listesi

  1. SourceFieldProperties.SplitProperty.DateSplitPaths özelliğinde şu seçenekleri etkinleştirin: Year, Month, Day. Bu, tarihi hiyerarşik gruplama için kullanmayı sağlar (yıl → ay → gün).

 


 

Adım 5. Rapor Yapısının Programatik Olarak Başlatılması

Ardından, uygulamayı her başlattığımızda alanları fareyle sürüklememek için formun OnShow olay işleyicisini yazacağız.

Başlatma kodu:

uses …, fcxTypes;
procedure TForm1.FormShow(Sender: TObject);
var
  LIndex: Integer;
begin
  fcxSlice1.BeginUpdate;
  try
// Adding fields to the Filters area
    fcxSlice1.PageContainer.AddFilterField(fcxSlice1.SliceFields.ItemByName['Machine'], 'Machine', 'Machine');
    fcxSlice1.PageContainer.AddFilterField(fcxSlice1.SliceFields.ItemByName['Date'], 'Date', 'Date');
    fcxSlice1.PageContainer.AddFilterField(fcxSlice1.SliceFields.ItemByName['Department'], 'Department', 'Work Area');
    fcxSlice1.PageContainer.AddFilterField(fcxSlice1.SliceFields.ItemByName['Shift'], 'Shift', 'Shift');
    fcxSlice1.PageContainer.AddFilterField(fcxSlice1.SliceFields.ItemByName['Operator'], 'Operator', 'Operator');
    fcxSlice1.PageContainer.AddFilterField(fcxSlice1.SliceFields.ItemByName['Product'], 'Product', 'Product');
    fcxSlice1.PageContainer.AddFilterField(fcxSlice1.SliceFields.ItemByName['Product_Category'], 'Product_Category', 'Product Category');
    fcxSlice1.PageContainer.AddFilterField(fcxSlice1.SliceFields.ItemByName['Work_Order'], 'Work_Order', 'Product Order');
    fcxSlice1.PageContainer.AddFilterField(fcxSlice1.SliceFields.ItemByName['Downtime_Reason'], 'Downtime_Reason', 'Downtime Reason');
    fcxSlice1.PageContainer.AddFilterField(fcxSlice1.SliceFields.ItemByName['Plant'], 'Plant', 'Workshop');
 
// Adding fields to the Rows area
    fcxSlice1.YAxisContainer.AddDimension(fcxSlice1.SliceFields.ItemByName['Supervisor'], 'Supervisor', 'Foreman');
 
// Setting up data fields
    LIndex := fcxSlice1.MeasuresContainer.AddMeasure(fcxSlice1.SliceFields.ItemByName['Planned_Qty'], 'Planned_Qty', 'Plan, pcs', af_Sum);
    fcxSlice1.MeasuresContainer.Measures[LIndex].Visible := False;
    fcxSlice1.MeasuresContainer.AddMeasure(fcxSlice1.SliceFields.ItemByName['Produced_Qty'], 'Produced_Qty', 'Produced, pcs', af_Sum);
    fcxSlice1.MeasuresContainer.AddMeasure(fcxSlice1.SliceFields.ItemByName['Defective_Qty'], 'Defective_Qty', 'Defects, pcs', af_Sum);
    LIndex := fcxSlice1.MeasuresContainer.AddMeasure(fcxSlice1.SliceFields.ItemByName['Operating_Hours'], 'Operating_Hours', 'Operating Time, h', af_Sum);
    fcxSlice1.MeasuresContainer.Measures[LIndex].Visible := False;
    LIndex := fcxSlice1.MeasuresContainer.AddMeasure(fcxSlice1.SliceFields.ItemByName['Downtime_min'], 'Downtime_min', 'Downtime, min', af_Sum);
    fcxSlice1.MeasuresContainer.Measures[LIndex].Visible := False;
    LIndex := fcxSlice1.MeasuresContainer.AddMeasure(fcxSlice1.SliceFields.ItemByName['Unit_Cost'], 'Unit_Cost', 'Unit Cost', af_Sum);
    fcxSlice1.MeasuresContainer.Measures[LIndex].Visible := False;
 
// Adding fields to the Data area
    fcxSlice1.XAxisContainer.AddMeasuresField;
  finally
// The table is rebuilt only here
    fcxSlice1.EndUpdate;
  end;
end;

BeginUpdate ve EndUpdate kullanımı performans için kritik önemdedir, çünkü her alan eklenirken arayüzün birden çok kez yeniden çizilmesini engeller.

 


 

Adım 6. Elde Edilen Veri Kesiği Temelinde İş Çıkarımları

Raporu oluşturduktan sonra, alanları fareyle sürükleyerek (drag and drop) anormallikleri anında bulabiliriz. OLAP'ın gerçek görevlerde nasıl yardımcı olduğuna dair 3 örneği inceleyelim.

Örnek 1. En İyi Çalışanların Belirlenmesi

Elde edilen gridte şu gruplandırmaları ayarlıyoruz: "Ustabaşı" Y ekseninde, "Fire" X ekseninde.

Örnek 1. En İyi Çalışanların Belirlenmesi

Sonuç çıkarıyoruz: Ustabaşı Smirnov'un fire oranı şüpheli biçimde düşükse, bu, onun çalışma yöntemlerini incelemek için bir sinyal veya onu ödüllendirmek için bir gerekçedir. Veriler, en iyi uygulamaların nerede aranacağını gösteriyor.

 

Örnek 2. Vardiyaların Verimliliğinin Değerlendirilmesi

Gruplandırma kurallarını değiştiriyoruz. Artık "Vardiya" — Y ekseninde; "Plan, Üretim, Fire" — X ekseninde.

Örnek 2. Vardiyaların Verimliliğinin Değerlendirilmesi

Bu veriler temelinde, üçüncü vardiyanın düşük plana ama yüksek fire oranına sahip olduğu sonucuna varıyoruz. Bu, gece çalışma organizasyonunun verimsizliğine işaret edebilir.

 

Örnek 3. Ekipman Analizi (Fire Oranı)

Bir kez daha gruplandırma parametrelerini değiştiriyoruz. Bu kez "Makine Türü" Y ekseninde, "Fire" X ekseninde.

Örnek 3. Ekipman Analizi (Fire Oranı)

Özetlersek: Belirli bir makine türünde fire değeri ortalama göstergeyi önemli ölçüde aşıyorsa, takım ekipmanının değiştirilmesi veya onarım gereklidir.

 


 

Derinlemesine Analiz İmkânları

Derinlemesine veri analizi için FastCube kullanımının gösterimi

FastCube, farklı karmaşıklıkta çok sayıda veri kesiği oluşturmanıza olanak tanır:

  • birim maliyet ürün kategorilerine ve adlarına göre;
  • duruşların dinamikleri (örneğin, yaz aylarında tatiller nedeniyle duruşların artması);
  • faktöryel analiz (dişlinin birim maliyeti en yüksek çıktı).

Önemli işlevler:

  • Ayrıntıya inme (Drill-down). Pivot tablonun bir hücresine çift tıklamak, özeti oluşturan kaynak satırların listesini gösterir.
  • FastGrid'de toplama. TfrGrid de toplamları ve ortalamaları gösterebilir, ancak FastCube bunu daha esnek biçimde yapar.

 


 

Sonuç

Delphi/Lazarus ortamındaki FastGrid + FastCube bağlaşımı — kurumsal uygulamalara BI analitiği eklemek için hazır bir çözümdür. Şunları elde edersiniz:

  1. FastGrid üzerinden ham verilerin düzenlenmesi.
  2. FastCube üzerinden SQL zahmeti olmadan anında çok boyutlu analitik.
  3. Karar alınması için gizli örüntülerin görselleştirilmesi.

Sitemizdeki FastReport VCL'in demo sürümünde belirtilen tüm işlevleri deneyin.

VCL FastCube OLAP FastReport Delphi
26 Ekim 2026, Pazartesi

TfrImageComboBox: FastReport VCL’de resim ve metin başlıklarını içeren bir açılır liste

FastEditors VCL'den TfrImageComboBox: FastReport VCL için simgeler ve etiketler içeren bir açılır liste. Delphi'de özellikler, olaylar ve kullanım örnekleri.
26 Ekim 2026, Pazartesi

Delphi’de İlerleme Çubuğu: FastReport VCL’den TfrProgressBar ve TfrxProgressBar Bileşenleri

FastReport VCL'deki TfrProgressBar ve TfrxProgressBar bileşenlerini daha yakından inceleyelim: ilerleme ölçeğini, eşik değerlerini ve işaretçileri yapılandırma, verilere bağlama ve bir Delphi örneği.
23 Ekim 2026, Cuma

FastGrid’in iç yapısı: Delphi ızgara bileşeninin View nesnesi, sütunlar ve olaylar

FastGrid'in iç yapısı: View nesnesi, Appearance özelliği, sütunlar, olaylar ve Delphi'de DB ve Unbound veri işleme modları. GridDemo.dpr demo projesini örnek alarak inceleme.

© 1998-2026 Fast Reports Inc.