Power Query M formül dilindeki türler
Power Query M Formül Dili yararlı ve ifade edici bir veri karma dilidir. Ancak bazı sınırlamaları vardır. Örneğin, tür sisteminin güçlü bir zorlaması yoktur. Bazı durumlarda daha sıkı bir doğrulama gerekir. Neyse ki M, daha güçlü doğrulamayı uygulanabilir hale getirmek için türleri destekleyen yerleşik bir kitaplık sağlar.
Geliştiricilerin, bunu herhangi bir genellikle yapabilmek için tür sistemi hakkında kapsamlı bir anlayışa sahip olması gerekir. Ayrıca, Power Query M dil belirtimi tür sistemini iyi açıklasa da, birkaç sürpriz bırakır. Örneğin, işlev örneklerinin doğrulanması, uyumluluk türlerini karşılaştırmak için bir yol gerektirir.
M tipi sistemi daha dikkatli bir şekilde inceleyerek bu sorunların çoğu netleştirilebilir ve geliştiricilere ihtiyaç duydukları çözümleri oluşturma gücü verilecektir.
Koşul kalkülüs ve saf küme teorisi bilgisi, kullanılan gösterimi anlamak için yeterli olmalıdır.
ÖNSİYELER
(1) B := { true; false }
B, tipik Boole değerleri kümesidir
(2) N := { geçerli M tanımlayıcıları }
N, M'deki tüm geçerli adların kümesidir. Bu, başka bir yerde tanımlanır.
(3) P := ⟨B, T⟩
P, işlev parametreleri kümesidir. Her biri isteğe bağlıdır ve bir türü vardır. Parametre adları ilgisizdir.
(4) Pn := ⋃0≤i≤n ⟨i, Pi⟩
Pn , n işlev parametrelerinin sıralı tüm dizilerinin kümesidir.
(5) P := ⋃0≤i≤∞P i*
P* , 0 uzunluğundan yukarı doğru tüm olası işlev parametrelerinin dizisidir.
(6) F := ⟨B, N, T⟩
F, tüm kayıt alanlarının kümesidir. Her alan isteğe bağlıdır, bir adı ve türü vardır.
(7) Fn := ∏0≤i≤n F
Fn , tüm n kayıt alanı kümelerinden oluşan kümedir.
(8) F := ( ⋃0≤i≤∞ Fi ) ∖ { F | ⟨b1, n1, t1⟩, ⟨b2, n2, t2⟩ ∈ F ⋀ n 1 = n2 }*
F* , birden fazla alanın aynı ada sahip olduğu kümeler dışında, kayıt alanlarının tüm kümelerinin (herhangi bir uzunlukta) kümesidir.
(9) C := ⟨N,T⟩
C, tablolar için sütun türleri kümesidir. Her sütunun bir adı ve türü vardır.
(10) Cn ⊂ ⋃0≤i≤n ⟨i, C⟩
Cn , n sütun türündeki tüm sıralı dizilerin kümesidir.
(11) C := ( ⋃0≤i≤∞ Ci ) ∖ { Cm | ⟨a, ⟨n1, t1⟩⟩, ⟨b, ⟨n2, t2⟩⟩ ∈ Cm ⋀ n1 = n2 }*
C* , birden fazla sütunun aynı ada sahip olduğu durumlar dışında, sütun türlerinin tüm birleşimlerinin (herhangi bir uzunlukta) kümesidir.
M TİPLerİ
(12) TF := ⟨P, P⟩*
İşlev Türü bir dönüş türünden ve sıfır veya daha fazla işlev parametresinin sıralı listesinden oluşur.
(13) TL :=〖T〗
Liste türü, küme ayraçları içinde sarmalanmış belirli bir türle ("öğe türü" olarak adlandırılır) belirtilir.
Küme ayraçları metalanguage'da kullanıldığından, 〖 〗 köşeli ayraçlar bu belgede kullanılır.
(14) TR := ⟨B, F⟩*
Kayıt Türü,"açık" olup olmadığını ve sıfır veya daha fazla sıralanmamış kayıt alanı olduğunu belirten bir bayrak içerir.
(15) TRo := ⟨true, F⟩
(16) TR• := ⟨false, F⟩
TRo ve TR• sırasıyla açık ve kapalı kayıt türlerinin gösterimi kısayollarıdır.
(17) TT := C *
Tablo Türü, ad çakışmalarının olmadığı sıfır veya daha fazla sütun türünden oluşan sıralı bir dizidir.
(18) TP := { any; none; null; mantıksal; sayı; saat; tarih; tarih saat; datetimezone; süre; metin; ikili; tür; liste; kayıt; tablo; işlev; anynonnull }
İlkel Tür, bu M anahtar sözcükleri listesinden biridir.
(19) TN := { tn, u ∈ T | t n = u+null } = null atanabilir t
Ayrıca herhangi bir tür, "null atanabilir" anahtar sözcüğü kullanılarak null atanabilir olarak işaretlenebilir.
(20) T := T F ∪ TL ∪ TR ∪ T T ∪ TP ∪ T N
Tüm M türlerinin kümesi, şu altı tür kümesinin birleşimidir:
İşlev Türleri, Liste Türleri, Kayıt Türleri, Tablo Türleri, Temel Türler ve Null Atanabilir Türler.
İŞLEVLER
Bir işlevin tanımlanması gerekir: NonNullable : T ← T
Bu işlev bir tür alır ve null değerle uyumlu olmaması dışında eşdeğer bir tür döndürür.
KİMLİK
Bazı özel durumları tanımlamak için bazı kimlikler gereklidir ve ayrıca yukarıdakilerin açığa çıkışına yardımcı olabilir.
(21) null atanabilir any = any
(22) null atanabilir anynonnull = any
(23) null atanabilir null = null
(24) null atanabilir hiçbiri = null
(25) null atanabilir null atanabilir t ∈ T = null atanabilir t
(26) NonNullable(nullable t ∈ T) = NonNullable(t) (27) NonNullable(any) = anynonnull
TÜR UYUMLULUĞU
Başka bir yerde tanımlandığı gibi, ilk türe uyan tüm değerlerin ikinci türe de uygun olması durumunda bir M türü başka bir M türüyle uyumlu olur.
Burada, uyumlu değerlere bağımlı olmayan ve türlerin özelliklerini temel alan bir uyumluluk ilişkisi tanımlanmıştır. Bu belgede tanımlandığı gibi bu ilişkinin özgün anlamsal tanıma tamamen eşdeğer olduğu tahmin edilir.
"ile uyumludur" ilişkisi: ≤: B ← T × T
Aşağıdaki bölümde küçük harfli t her zaman T öğesi olan M Türünü temsil eder.
Φ, F* veya C* alt kümesini temsil eder.
(28) t ≤ t
Bu ilişki esnektir.
(29) t a ≤ tb ∧ tb ≤ tc → t ≤ t c
Bu ilişki geçişli.
(30) hiçbiri ≤ ≤
M türleri bu ilişki üzerinde bir kafes oluşturur; hiçbiri alt, herhangi biri ise en üsttedir.
(31) ta, tb ∈ TN ∧ t ≤ t → Kaldırılamaz(ta) ≤ Kaldırılamaz(tb)
İki tür uyumluysa, UnNullable eşdeğerleri de uyumludur.
(32) null ≤ t ∈ TN
Null temel türü tüm null atanabilir türlerle uyumludur.
(33) t ∉ TN ≤ anynonnull
Tüm iptal edilemeyen türler anynonnull ile uyumludur.
(34) UnNullable(t) ≤ t
NonNullible türü null atanabilir eşdeğeri ile uyumludur.
(35) t ∈ TF → t ≤ işlevi
Tüm işlev türleri işlevle uyumludur.
(36) t ∈ TL → t ≤ listesi
Tüm liste türleri listeyle uyumludur.
(37) t ∈ TR → t ≤ kaydı
Tüm kayıt türleri kayıtla uyumludur.
(38) t ∈ TT → t ≤ tablo
Tüm tablo türleri tabloyla uyumludur.
(39) t a ≤ tb ↔ 〖ta〗≤〖tb〗
Öğe türleri uyumluysa liste türü başka bir liste türüyle uyumlu olur ve tam tersi de geçerlidir.
(40) t a ∈ TF = ⟨ pa, p* ⟩, tb ∈ TF = ⟨ pb, p* ⟩ ∧ pa ≤ pb b → t ≤ t b
Dönüş türleri uyumluysa ve parametre listeleri aynıysa işlev türü başka bir işlev türüyle uyumludur.
(41) ta ∈ TRo, tb ∈ TR• → ta ≰ t b
Açık kayıt türü hiçbir zaman kapalı kayıt türüyle uyumlu değildir.
(42) t a ∈ TR• = ⟨false, Φ⟩, tb ∈ TRo = ⟨true, Φ⟩ → ta ≤ t b
Kapalı kayıt türü, aksi takdirde aynı açık kayıt türüyle uyumludur.
(43) t a ∈ TRo = ⟨true, (Φ, ⟨true, n, any⟩)⟩, tb ∈ TRo = ⟨true, Φ⟩ → ta ≤ tb ∧ tb ≤ t
İki açık kayıt türü karşılaştırılırken herhangi bir türüne sahip isteğe bağlı bir alan yoksayılabilir.
(44) a ∈ TR = ⟨b, (Φ, ⟨β, n, ua⟩)⟩, tb ∈ TR = ⟨b, (Φ, ⟨β, n, ub⟩)⟩ ∧ ua ≤ ub → t a ≤ tb b
Alanın adı ve isteğe bağlılığı aynıysa ve söz edilen alan türleri uyumluysa, yalnızca bir alana göre farklılık gösteren iki kayıt türü uyumludur.
(45) t a ∈ TR = ⟨b, (Φ, ⟨false, n, u⟩)⟩, tb ∈ TR = ⟨b, (Φ, ⟨true, n, u⟩))⟩ → t ≤ tb b
İsteğe bağlı olmayan bir alana sahip kayıt türü, aynı kayıt türüyle uyumludur ancak bu alanın isteğe bağlı olması gerekir.
(46) t a ∈ TRo = ⟨true, (Φ, ⟨b, n, u⟩)⟩, tb ∈ TRo = ⟨true, Φ⟩ → ta ≤ t b
Açık kayıt türü, bir alanı daha az olan başka bir açık kayıt türüyle uyumludur.
(47) t a ∈ T = (Φ, ⟨i, ⟨n, ua⟩⟩), tb ∈ T = (Φ, ⟨i, ⟨n, ub⟩⟩) ∧ ua ≤ ub → t≤ t bb
Tablo türü, aynı olan ikinci bir tablo türüyle uyumludur, ancak bu sütunun türleri uyumlu olduğunda, farklı türde bir sütun için.
BAŞVURULAR
Microsoft Corporation (2015 Ağustos)
Excel için Microsoft Power Query Formül Dili Belirtimi [PDF]
Şu kaynaktan alındı: https://msdn.microsoft.com/library/mt807488.aspx
Microsoft Corporation (n.d.)
Power Query M işlev başvurusu [web sayfası]
Şu kaynaktan alındı: https://msdn.microsoft.com/library/mt779182.aspx