Typy v jazyku vzorca Power Query M

Jazyk Formule Power Query M je užitočným a expresívnym jazykom údajových mashupov. Má však určité obmedzenia. Napríklad neexistuje žiadne silné presadzovanie systému typu. V niektorých prípadoch je potrebná prísnejšia validácia. Našťastie M poskytuje vstavanú knižnicu s podporou typov, aby bolo možné lepšie overenie.

Vývojári by mali mať dôkladné pochopenie systému typu, aby to bolo možné vykonať s akoukoľvek všeobecnosťou. A zatiaľ čo v špecifikácii jazyka Power Query M sa vysvetľuje typ systém No, zanechá niekoľko prekvapení. Napríklad validácia inštancií funkcie vyžaduje spôsob porovnania typov kompatibility.

Po dôkladnom preskúmaní systému typu M sa mnohé z týchto problémov dajú objasniť a vývojári budú mať oprávnenie na remeselné riešenia, ktoré potrebujú.

Znalosť počtu predikátov a teórie naïve by mala byť adekvátna na pochopenie použitého zápisu.

PREDBEŽNÉ

(1) B : = { true; False }
B je typická množina boolovských hodnôt

(2) N : = {platné identifikátory M}
N je množina všetkých platných názvov v M. Toto je definované inde.

(3) P : = ⟨B, T
P je množina parametrov funkcií. Každá z nich je možná voliteľná a má typ. Názvy parametrov sú irelevantné.

(4) P n : = 0≤i≤ni, Pi
P n je množina všetkých zoradených sekvencií parametrov funkcie n.

(5) p * : = 0≤i≤∞ P i
P * je množina všetkých možných sekvencií parametrov funkcií od dĺžky od 0 po.

(6) F : = ⟨B, N, T
F je množina všetkých polí záznamov. Každé pole je pravdepodobne voliteľné, má názov a typ.

(7) Fn : = 0≤i≤n F
F n je množina všetkých množín polí záznamu n.

(8) f * : = (⋃ 0≤i≤∞ Fi ) ∖ { F | ⟨b 1, n 1, t 1⟩, ⟨b 2, n 2, t 2⟩ ∈ Fn 1 = n 2 }
F * je množina všetkých množín (ľubovoľnej dĺžky) polí záznamu, s výnimkou množín, kde má viac ako jedno pole rovnaký názov.

(9) C : = ⟨N,T
C je množina typov stĺpcov pre tabuľky. Každý stĺpec má názov a typ.

(10) Cn 0≤i≤ni, C
C n je množina všetkých zoradených sekvencií typov stĺpcov n.

(11) C * : = (⋃ 0≤i≤∞ Ci ) ∖ { Cm | ⟨a, ⟨n 1, t 1⟩⟩, ⟨b, ⟨n 2, t 2⟩⟩ ∈ C mn 1 = n 2 }
C * je množina všetkých kombinácií (ľubovoľnej dĺžky) typov stĺpcov, s výnimkou tých, v ktorých má viac ako jeden stĺpec rovnaký názov.

TYPY M

(12) TF : = ⟨p, p *
Typ funkcie pozostáva z typu návratu a zoradeného zoznamu parametrov funkcie nula alebo viac.

(13) tL : =〖T
Typ zoznamu je označený daným typom (nazýva sa "typ položky") zabalený v zložených zložených zátvorkách. Keďže v metajazyk sa používajú zložené zátvorky, v tomto dokumente sa používajú 〖 〗 zátvorky.

(14) TR : = ⟨B, F *
Typ záznamu má príznak označujúci, či je otvorený, a nula alebo viac neusporiadaných polí záznamu.

(15) TRo : = ⟨true, F

(16) TR : = ⟨False, F
tro a tr sú Popis symbolov klávesové skratky pre otvorené a uzavreté typy záznamov.

(17) tt : = C*
Typ tabuľky je zoradená sekvencia typov stĺpcov s nulovým alebo viacerými stĺpcami, kde neexistujú žiadne kolízie názvov.

(18) TP : = {any; none; null; Logical; Number; time; Date; DateTime; DateTimeZone; Trvanie text binárne typ Zoznam záznam tabuľky funkcie anynonnull }
Primitívny typ je jeden z tohto zoznamu kľúčových slov M.

(19) tn : = { T N, u ∈ t | t n = u + NULL} = s hodnotou null t
Akýkoľvek typ môže byť okrem toho označený ako null, a to pomocou kľúčové slovo s hodnotou null.

(20) t : = t F t L t R t t t P t N
Skupina všetkých typov M je zjednotením týchto šiestich sád typov: typy funkcií, typy zoznamov, typy záznamov, typy tabuliek, jednoduché typy a typy s povolenou hodnotou null.

FUNKCIE

Je potrebné definovať jednu funkciu: nenull : tt
Táto funkcia zaberie typ a vráti typ, ktorý je ekvivalentný s výnimkou, že nie je v súlade s hodnotou null.

IDENTÍT

Niektoré identity sú potrebné na definovanie niektorých špeciálnych prípadov a môžu tiež pomôcť objasniť vyššie uvedené.

(21) všetky hodnoty s hodnotou null
(22) hodnota null anynonnull = any
(23) hodnota null null = null
(24) null žiadne = null
(25) hodnota null s hodnotou null tt = s hodnotou null t
(26) nenull(s hodnotou null tt) = nenull(t)
(27) nenull(ľubovoľné) = anynonnull

KOMPATIBILITA TYPU

Ako je definované inde, typ M je kompatibilný s iným typom M, ak a iba vtedy, ak všetky hodnoty, ktoré zodpovedajú prvému typu, zodpovedajú aj druhému typu.

Tu je definovaný vzťah kompatibility, ktorý nie je závislý od vyhovujúcich hodnôt a je založený na vlastnostiach samotných typov. Je anticiplated, že tento vzťah, ako je definovaný v tomto dokumente, je úplne rovnocenný s pôvodnou sémantickou definíciou.

Vzťah "je kompatibilný s": ≤: Bt × t
V časti nižšie bude malé písmeno t vždy predstavovať typ M, prvok t.

Φ bude reprezentovať podmnožinu F * alebo C * .

(28) tt
Tento vzťah je zvratné.

(29) t . ≤ t bt bt ct at c
Tento vzťah je tranzitívny.

(30) žiadne ≤ t ≤ žiadne
Typy M tvoria mriežku nad týmto vzťahom; žiadna z nich nie je v dolnej časti a je horná.

(31) t a, t bt Nt at nenull(t a) ≤ nenull(t b)
Ak sú dva typy kompatibilné, sú tiež kompatibilné ekvivalenty s hodnotou null.

(32) hodnota null ≤ tt N
Typ primitívneho typu null je kompatibilný so všetkými typmi s povolenou hodnotou null.

(33) tt N ≤ anynonnull
Všetky typy s nepovolenou hodnotou null sú kompatibilné s anynonnull.

(34) nenull(t) ≤ t
Typ NonNullible je kompatibilný s ekvivalentom null.

(35) funkcia t ∈ t Ft
Všetky typy funkcií sú kompatibilné s funkciou function.

(36) tt Lt ≤ zoznam
Všetky typy zoznamov sú kompatibilné so zoznamom.

(37) tt Rt ≤ záznam
Všetky typy záznamov sú kompatibilné so záznamom.

(38) tt tt ≤ tabuľka
Všetky typy tabuliek sú kompatibilné s tabuľkou.

(39) t t b ↔ 〖t a〗≤〖t b
Typ zoznamu je compaible s iným typom zoznamu, ak sú typy položiek kompatibilné a naopak.

(40) t t f = ⟨ p a, p * ⟩, t bt f = ⟨ p b, p * ⟩ ∧ p ap bt at b
Typ funkcie je kompatibilný s iným typom funkcie, ak sú typy návratu kompatibilné a zoznamy parametrov sú identické.

(41) t tro, t btR t at b
Typ otvoreného záznamu nie je nikdy kompatibilný s uzavretým typom záznamu.

(42) t tR = ⟨False, Φ⟩, t btRo = ⟨true, Φ⟩ → t at b
Uzavretý typ záznamu je kompatibilný s iným identickým typom otvoreného záznamu.

(43) t atro = ⟨true, (Φ, ⟨true, n, any⟩) ⟩, t btro = ⟨true, Φ⟩ → t ∧ t bt b t a
Voliteľné pole s typom môže byť ignorované pri porovnaní dvoch otvorených typov záznamov.

(44) t at R = ⟨b, (Φ, ⟨β, n, u a⟩) ⟩, t bt R = ⟨b, (Φ, ⟨β, n, u b⟩) ⟩ ∧ u au bt at b
Dva typy záznamov, ktoré sa líšia iba jedným poľom, sú kompatibilné, ak je názov a voliteľnosť poľa identické a typy uvedeného poľa sú kompatibilné.

(45) t at r = ⟨b, (Φ, ⟨False, n, u⟩) ⟩, t bt R = ⟨b, (Φ, ⟨True, n, u⟩) ⟩ → t at b
Typ záznamu s nevoliteľným poľom je kompatibilný s typom záznamu zhodný, ale pre toto pole je voliteľný.

(46) t atro = ⟨true, (Φ, ⟨b, n, u⟩) ⟩, t btro = ⟨true, Φ⟩ → t at b
Typ otvoreného záznamu je kompatibilný s iným typom otvoreného záznamu s jedným menším poľom.

(47) t at t = (Φ, ⟨i, ⟨n, u a⟩⟩), t bt t = (Φ, ⟨i, ⟨n, u b⟩⟩) ∧ u u b → t at b
Typ tabuľky je kompatibilný s druhým typom tabuľky, ktorý je identický, ale pre jeden stĺpec s odlišným typom, keď sú typy pre tento stĺpec kompatibilné.

ODKAZUJE

Microsoft Corporation (2015. august)
Microsoft Power Query for Excel špecifikácia jazyka vzorca [PDF]
Načítané z https://msdn.microsoft.com/library/mt807488.aspx

Microsoft Corporation (ND)
Odkaz na funkciu Power Query M [webová stránka]
Načítané z https://msdn.microsoft.com/library/mt779182.aspx