Bu sayfa analytics modülünün sorgu yolunu açıklar. src/cluster_erp/modules/analytics/registry.py doğrulanmış kataloğu tutar, src/cluster_erp/modules/analytics/query_builder.py doğruluk kapılarıyla güvenli toplu sorgular kurar ve src/cluster_erp/modules/analytics/recipe_engine.py ile recipe_schemas.py bildirime dayalı hazırlık tariflerini çalıştırır. Kataloğun diğer modüllerce nasıl doldurulduğu analitik olgular sayfasındadır.
Kısaca¶
- Kullanıcı yalnızca anlamsal anahtarlarla sorar: bir olgu, ölçüler, boyutlar, süzgeçler, sıra ve bir sayfa (
src/cluster_erp/modules/analytics/schemas.py:1-11,src/cluster_erp/modules/analytics/schemas.py:47-61). - Tablo ve sütun adları yalnızca modül bildirimlerinden gelir; değerler bağlı parametrelerdir. SQL'e dize birleştirme yoktur (
src/cluster_erp/modules/analytics/query_builder.py:5-10). - Dört kapı yanlış olacak bir sayıyı reddeder: toplanamaz toplamlar, sabitlenmemiş bir eksende yarı toplanabilir toplamlar, karışık para birimleri ve tanecik verilmemiş tarihler (
src/cluster_erp/modules/analytics/query_builder.py:11-23). - Tarif, kapalı bir sözlükten adımların saklanan bir listesidir; motor her adım için giren ve çıkan satırları kaydeder (
src/cluster_erp/modules/analytics/recipe_engine.py:1-21,src/cluster_erp/modules/analytics/recipe_schemas.py:1-33).
Nasıl çalışır¶
Tarif ve sorgu hattı¶
flowchart TD
A["AnalysisSpec ile POST /analysis/run"] --> C["AnalyticsService.catalogue: collect ve visible_to"]
P["RecipeDefinition ile POST /analysis/prepare"] --> C
C --> F["FactCatalogue.get olgu"]
F --> S{"summaries.plan uyuyor mu"}
S -->|evet| QS["query_builder._build_from_summary"]
S -->|hayır| QB["query_builder.build"]
QB --> G["kapılar: toplanabilirlik, para birimi, tanecik"]
QS --> G
G --> X["çalıştır, MAX_ROWS ile sınırla"]
X --> R["kaynak summary veya live olan AnalysisResult"]
F --> RE["RecipeEngine.run"]
RE --> ST["adımları uygula, giren ve çıkan satırları say"]
ST --> EX["beklentileri denetle"]
EX --> RR["gözlemlerle RecipeRunResult"]Düz anlatımla:
- İki giriş noktası da önce çağıranın kataloğunu kurar:
registry.collecther modüle sorar,visible_toyalnızca çağıranınread_permissioniznine sahip olduğu olgu kümelerini tutar (src/cluster_erp/modules/analytics/service.py:55-62,src/cluster_erp/modules/analytics/registry.py:100-109). - Bir çalıştırmada
summaries.plan, önceden toplanmış hücrelerin yanıt verip veremeyeceğine karar verir; aksi halde sorgu olgu tablosunda çalışır (src/cluster_erp/modules/analytics/service.py:139-148). Bkz. raporlar, özetler ve çapraz. query_builder.build, tüm bildirilmiş sütunlarla tek bir ilişki kurar; gruplanan boyutları, ölçüleri, süzgeçleri, canlı süzgeci, sırayı ve kesilmeyi algılamak için en fazlaMAX_ROWS10000 artı bir satırlık bir sayfayı ekler (src/cluster_erp/modules/analytics/query_builder.py:71-96,src/cluster_erp/modules/analytics/query_builder.py:375-470).- Sonuç
summaryveyalivekaynağından geldiğini ve canlı yolun neden seçildiğini belirtir (src/cluster_erp/modules/analytics/service.py:157-168). - Tarifte motor anlamsal adlarıyla anahtarlanmış tüm bildirilmiş sütunlardan başlar, canlı süzgeci uygular, etkin her adımı çalıştırır ve öncesi ile sonrasındaki satır sayısını ölçer (
src/cluster_erp/modules/analytics/recipe_engine.py:195-262).
Doğruluk kapıları¶
| Kapı | Reddeder | Hata kodu | Kaynak |
|---|---|---|---|
| Toplanabilirlik | non_additive bir ölçünün sum veya avg değeri |
ANALYTICS_NON_ADDITIVE |
src/cluster_erp/modules/analytics/query_builder.py:242-272 |
| Yarı toplanabilir eksen | non_additive_on boyutu eq ile sabitlenmedikçe semi_additive bir ölçünün sum değeri |
ANALYTICS_SEMI_ADDITIVE_AXIS |
src/cluster_erp/modules/analytics/query_builder.py:274-288 |
| Para birimi | para birimi kırılımı veya tek para birimli bir eq süzgeci olmadan parasal bir ölçünün toplamı; count ve count_distinct muaftır |
ANALYTICS_MIXED_CURRENCY |
src/cluster_erp/modules/analytics/query_builder.py:290-335 |
| Tanecik | açık ve bildirilmiş bir taneciği olmayan tarih boyutu | ANALYTICS_UNKNOWN_GRAIN |
src/cluster_erp/modules/analytics/query_builder.py:337-373 |
Yalnızca eq bir değeri sabitler; in sabitlemez, çünkü seçilen iki para biriminin toplamı yine karışık bir toplamdır (src/cluster_erp/modules/analytics/query_builder.py:62-68). İki kural daha geçerlidir: SQL içinde round() yoktur ve parasal medyanlar her rakam gerçekleşmiş bir tutar olsun diye percentile_disc kullanır (src/cluster_erp/modules/analytics/query_builder.py:24-31).
Tarifler¶
Tarifin (RecipeDefinition) bir girdisi, adımları, beklentileri ve 100000 satıra kadar bir sınırı vardır (src/cluster_erp/modules/analytics/recipe_schemas.py:255-283).
| Öğe | Değerler | Kaynak |
|---|---|---|
| Uygulanmış adım işlemleri | filter, rename, drop, sort, dedupe, derive, cast, fill, group |
src/cluster_erp/modules/analytics/recipe_schemas.py:182-184 |
| Ertelenmiş ve reddedilen işlemler | join, union, pivot, unpivot, window, split, merge, lookup, flag_outliers |
src/cluster_erp/modules/analytics/recipe_schemas.py:191-192 |
| Beklentiler | her biri error veya warning ciddiyetli not_null, unique, accepted_values, row_count_between, no_negative |
src/cluster_erp/modules/analytics/recipe_schemas.py:200-219 |
| Adım başına hata politikası | fail, null, keep_original, quarantine |
src/cluster_erp/modules/analytics/recipe_schemas.py:44 |
Her adımın kararlı bir id, bir gösterim seq, bir note ve bir disabled bayrağı vardır; devre dışı adım kaldırılmak yerine atlanır (src/cluster_erp/modules/analytics/recipe_schemas.py:47-60, src/cluster_erp/modules/analytics/recipe_engine.py:221). Adım kimlikleri benzersiz olmalıdır (src/cluster_erp/modules/analytics/recipe_schemas.py:274-281). Bir adım anlamsal anahtarları adlandırır; olgu kümesinin hiç bildirmediği bir anahtar reddedilir (src/cluster_erp/modules/analytics/recipe_engine.py:69-93).
Neden böyle kurulmuş¶
- Sorgu kurucu belge dizesi tek bir sözü adlandırır: asla yanlış bir sayı üretmemek (
src/cluster_erp/modules/analytics/query_builder.py:1-4). - Tarif şeması
opalanını kapalı bir sözlük olarak tutar; çünkü bu hiçbir enjeksiyon yüzeyi bırakmaz ve sonraki adım önerilerinin alanını küçük tutar (src/cluster_erp/modules/analytics/recipe_schemas.py:12-17). - Birleştirmeler uygulanmamıştır; çünkü satır çoğalması kapısı olmayan bir birleştirme her ölçüyü çoğaltır (
src/cluster_erp/modules/analytics/recipe_engine.py:17-21,src/cluster_erp/modules/analytics/recipe_schemas.py:186-190).
Kurallar ve sınırlar¶
- Tarif tam olarak bir girdi kabul eder; birleştirme kapısı var olana kadar birden fazlası reddedilir (
src/cluster_erp/modules/analytics/recipe_schemas.py:262-272). - Sıra anahtarı seçilen boyutlardan veya ölçülerden biri olmalıdır (
src/cluster_erp/modules/analytics/query_builder.py:454-463). - Kayıt defteri, ek savunma olarak katı bir tanımlayıcı kalıbına uymayan fiziksel adları reddeder (
src/cluster_erp/modules/analytics/registry.py:41-48).
Diğer parçalarla etkileşim¶
| Sözleşme | Yön | Amaç | Kaynak |
|---|---|---|---|
DescribeAnalyticsFacts |
analytics yayar | olgu kümelerini toplamak | src/cluster_erp/modules/analytics/registry.py:253 |
AnalyticsFactSet |
modüller yanıtlar | olguları, boyutları, ölçüleri, izni, canlı süzgeci bildirmek | src/cluster_erp/core/contracts.py:2126-2154 |
Sınırlar ve açık noktalar¶
RecipeInput.as_of, anlık görüntü anı olarak tarifle saklanır;recipe_engine.pyiçindeas_ofokuması bulunamadı (src/cluster_erp/modules/analytics/recipe_schemas.py:244-253).- Sonuç, üretilen SQL metnini
sqliçinde taşır (src/cluster_erp/modules/analytics/service.py:164,src/cluster_erp/modules/analytics/query_builder.py:543-552).
Tanıtılan terimler¶
| Terim | Kod tanımlayıcısı | Tanım | Türkçe terim | Kaynak |
|---|---|---|---|---|
| analysis spec | AnalysisSpec |
Anlamsal anahtarlarla bir istek: olgu, ölçüler, boyutlar, süzgeçler, sıra, sayfa. | Analiz tanımı | src/cluster_erp/modules/analytics/schemas.py:47 |
| recipe | RecipeDefinition |
Bir olgu kümesi üzerinde saklanan, yeniden çalıştırılabilir hazırlık adımları listesi. | Tarif | src/cluster_erp/modules/analytics/recipe_schemas.py:255 |
| step observation | StepObservation |
Bir tarif adımı için kaydedilen giren satırlar, çıkan satırlar ve fark. | Adım gözlemi | src/cluster_erp/modules/analytics/recipe_schemas.py:284 |
İlgili sayfalar¶
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.