Power Query M -kaavakielen tyypit

Power Query M -kaavakieli on hyödyllinen ja ilmeikäs tietojen koostekieli. Mutta sillä on joitakin rajoituksia. Tyyppijärjestelmää ei esimerkiksi valvota vahvasti. Joissain tapauksissa tarvitaan tiukempaa vahvistusta. Onneksi M tarjoaa sisäänrakennetun kirjaston, joka tukee tyyppejä, jotta vahvistus olisi toteuttamiskelpoinen.

Kehittäjien tulisi ymmärtää tyyppijärjestelmä perusteellisesti, jotta tämä tapahtuu yleisesti. Vaikka Power Query M:n kielimäärityksessä selitetään tyyppijärjestelmä hyvin, se aiheuttaa myös muutamia yllätyksiä. Esimerkiksi funktioesiintymien vahvistus edellyttää tapaa vertailla tyyppejä yhteensopivuuden vuoksi.

Tutkimalla M-tyyppijärjestelmää tarkemmin, monia näistä ongelmista voidaan selventää, ja kehittäjillä on valtuudet luoda tarvitsemiaan ratkaisuja.

Predikaattilaskin- ja naiivijoukkoteoria -tietämyksen tulisi olla riittävät käytetyn merkinnän ymmärtämiseksi.

AREENAA

(1) B := { true; epätosi }
B on tyypillinen totuusarvojen joukko

(2) N := { kelvolliset M-tunnisteet }
N on M:n kaikkien kelvollisten nimien joukko. Tämä on määritetty muualla.

(3) P := ⟨B, T
P on funktioparametrien joukko. Jokainen niistä on mahdollisesti valinnainen, ja sillä on tyyppi. Parametrien nimet ovat merkityksettömiä.

(4) Pn := ⋃0≤i≤ni, Pi⟩
Pn on kaikkien järjestettyjen n-funktioparametrien sarja.

(5) P := ⋃0≤i≤∞P i*
P* on kaikkien mahdollisten funktioparametrien jaksojen joukko, alkaen pituudesta 0 ylöspäin.

(6) F := ⟨B, N, T
F on kaikkien tietuekenttien joukko. Kukin kenttä on mahdollisesti valinnainen, sillä on nimi ja tyyppi.

(7) Fn := ∏0≤i≤n F
Fn on kaikkien n tietuekenttien joukko.

(8) F* := ( ⋃0≤i≤∞Fi ) ∖ { F | ⟨b1, n1, t1⟩, ⟨b2, n2, t2⟩ ∈ Fn1 = n2 }
F* on kaikkien tietuekenttien (minkä tahansa pituuden) joukko lukuun ottamatta joukkoja, joissa useammalla kuin yhdellä kentällä on sama nimi.

(9) C := ⟨N,T
C on taulukoiden saraketyyppien joukko. Kullakin sarakkeella on nimi ja tyyppi.

(10) Cn ⊂ ⋃0≤i≤ni, C⟩
Cn on kaikkien järjestettyjen n-saraketyyppien sarja.

(11) C := ( ⋃0≤i≤∞Ci ) ∖ { Cm | ⟨a, ⟨n1, t1⟩⟩, ⟨b, ⟨n2, t2⟩⟩ ∈ Cmn1 = n2 }*
C* on kaikkien saraketyyppien yhdistelmäen (minkä tahansa pituuden) joukko lukuun ottamatta niitä, joissa useammalla kuin yhdellä sarakkeella on sama nimi.

M-TYYPIT

(12) TF := ⟨P, P⟩*
Funktiotyyppi koostuu palautustyypistä ja järjestetystä nolla- tai useampien funktioparametrien luettelosta.

(13) TL :=〖T〗
Luettelotyyppi merkitään annetulla tyypillä (kutsutaan "kohdetyypiksi"), joka on pakattu aaltosulkeisiin. Koska metalanguagessa käytetään aaltosulkeita, 〖 〗 hakasulkeita käytetään tässä asiakirjassa.

(14) TR := ⟨B, F⟩*
Tietuetyypissä on merkintä, joka ilmaisee, onko se "avoin" ja onko se järjestämätön nolla- vai useampia tietuekenttiä.

(15) TRo := ⟨true, F⟩

(16) TR := ⟨false, F⟩
TRo ja TR ovat avoimien ja suljettujen tietuetyyppien notaatiokuvakkeita.

(17) T T := C *
Taulukkotyyppi on järjestetty saraketyyppien järjestys, jossa ei ole nimiyhteensyyksiä.

(18) TP := { any; ei mitään; tyhjäarvo; looginen; luku; aika; päivämäärä; päivämäärä; päivämäärä/aika; päivämäärä/aikavyöhyke; kesto; kesto; teksti; tyyppi; luettelo; tietue; taulukko; funktio; anynonnull }
Primitiivityyppi on yksi tästä M-avainsanaluettelosta.

(19) TN := { tn, u ∈ T | tn = u+null } = nullable t
Mikä tahansa tyyppi voidaan lisäksi merkitä tyhjäarvoja sallivaksi käyttämällä tyhjäarvoja sallivaa avainsanaa.

(20) T := TFTLTRT TTPT N
Kaikkien M-tyyppien joukko on näiden kuuden tyyppisen joukon yhdistys:
Funktiotyypit, luettelotyypit, tietuetyypit, taulukkotyypit, primitiivityypit ja tyhjäarvoiset tyypit.

TOIMINTOJA

Yksi funktio on määritettävä: NonNullable : TT
Tämä funktio ottaa tyypin ja palauttaa tyypin, joka on vastaava, paitsi että se ei ole tyhjäarvon mukainen.

IDENTITEETIT

Joitakin käyttäjätietoja tarvitaan määrittämään joitakin erityistapauksia, ja ne voivat myös auttaa edellä mainittujen määrittelyssä.

(21) tyhjäarvoja voi olla mikä tahansa = mikä tahansa
(22) tyhjäarvon salliva anynonnull = any
(23) tyhjäarvon salliva tyhjäarvo = tyhjäarvo
(24) tyhjäarvoja voi ei ole = tyhjäarvo
(25) tyhjäarvoja salliva t -∈ T = nullable t
(26) NonNullable(nullable tT) = NonNullable(t)
(27) NonNullable(any) = anynonnull

TYYPIN YHTEENSOPIVUUS

Kuten muualla on määritetty, M-tyyppi on toisen M-tyypin mukainen, jos ja vain jos kaikki ensimmäisen tyypin mukaiset arvot ovat myös toisen tyypin mukaisia.

Tässä on määritetty yhteensopivuussuhde, joka ei ole riippuvainen vaatimustenmukaisuusarvoista ja perustuu itse tyyppien ominaisuuksiin. On odotettavissa, että tämä tässä asiakirjassa määritetty suhde vastaa täysin alkuperäistä semanttista määritelmää.

"on yhteensopiva" -suhteen kanssa : ≤ : BT × T
Alla olevassa osassa pieni t on aina M-tyyppi, T-elementti.

A Φ edustaa F*- tai C-alijoukkoa*.

(28) tt
Tämä suhde on refleksiivinen.

(29) ttb ∧ ≤ t ctt c
Tämä suhde on transitiivinen.

(30) mitään ei ≤ ole
M-tyypit muodostavat säilön tälle suhteelle; Ei mitään ole alhaalla, ja mikään ei ole ylin.

(31) ta, tbTNt a ≤ taNonNullable(ta) ≤ NonNullable(tb)
Jos kaksi tyyppiä ovat yhteensopivia, myös NonNullable-vastaavat arvot ovat yhteensopivia.

(32) tyhjäarvot ≤ tTN
Primitiivityyppi on yhteensopiva kaikkien tyhjäarvoja sallivien tyyppien kanssa.

(33) tTN ≤ anynonnull
Kaikki ei-nullible-tyypit ovat yhteensopivia anynonnull-todennukset kanssa .

(34) NonNullable(t) ≤ t
NonNullible-tyyppi on yhteensopiva tyhjäarvoja sallivan vastineen kanssa.

(35) t T F → t-funktion ∈ t
Kaikki funktiotyypit ovat yhteensopivia funktioiden kanssa .

(36) t TL ∈ → t-luettelo
Kaikki luettelotyypit ovat yhteensopivia luettelon kanssa .

(37) t T R → ttietuetta ∈ t
Kaikki tietuetyypit ovat yhteensopivia tietueen kanssa .

(38) t ∈ TTt ≤ taulukko
Kaikki taulukkotyypit ovat yhteensopivia taulukon kanssa .

(39) t a ≤ tb ↔ 〖ta〗≤〖tb〗
Luettelotyyppi on ymmärrettävyys toisen luettelotyypin kanssa, jos kohdetyypit ovat yhteensopivia, ja päinvastoin.

(40) taTF = ⟨ pa, p* ⟩, tbT F = ⟨ pb, p* ⟩ ∧ papbtat b
Funktiotyyppi on yhteensopiva toisen funktiotyypin kanssa, jos palautustyypit ovat yhteensopivia ja parametriluettelot ovat identtisiä.

(41) t a ∈ TRo, tbTRt t b
Avoin tietuetyyppi ei ole koskaan yhteensopiva suljetun tietuetyypin kanssa.

(42) t a ∈ TR• = ⟨false, Β⟩, tbTRo = ⟨true, Β⟩ → tat b
Suljettu tietuetyyppi on yhteensopiva muuten samanlaisen avoimen tietuetyypin kanssa.

(43) t a ∈ TRo = ⟨true, (Β, ⟨true, n, any⟩)⟩, tbTRo = ⟨true, Β⟩ → t atbtbt a
Valinnainen kenttä, jonka tyyppi on mikä tahansa , voidaan ohittaa kahta avointa tietuetyyppiä verrattaessa.

(44) taTR = ⟨b, (Β, ⟨β, n, ua⟩)⟩, tbTR = ⟨b, (Β, ⟨β, n, u b⟩)⟩ ∧ uaubtat b
Kaksi tietuetyyppiä, jotka eroavat toisistaan vain yhden kentän mukaan, ovat yhteensopivia, jos kentän nimi ja valinnaisuus ovat identtisiä ja kyseisen kentän tyypit ovat yhteensopivia.

(45) t a ∈ TR = ⟨b, (Β, ⟨false, n, u⟩)⟩, tbTR = ⟨b, (Β, ⟨true, n, u⟩)⟩ → t a ≤ tb b
Tietuetyyppi, jolla on ei-valinnainen kenttä, on yhteensopiva tietuetyypin kanssa, joka on identtinen, mutta kentän ollessa valinnainen.

(46) taTRo = ⟨true, (Β, ⟨b, n, u⟩)⟩, tbTRo = ⟨true, Β⟩ → tat b
Avoin tietuetyyppi on yhteensopiva toisen avoimen tietuetyypin kanssa, jossa on yksi kenttä vähemmän.

(47) t a ∈ TT = (Β, ⟨i, ⟨n, ua⟩⟩), tbTT = (Β, ⟨i, ⟨n, ub⟩⟩) ∧ uaubtatb b
Taulukkotyyppi on yhteensopiva toisen taulukkotyypin kanssa, joka on samanlainen, mutta yhden erityyppisen sarakkeen kanssa, kun kyseisen sarakkeen tyypit ovat yhteensopivia.

REFERENCES

Microsoft Corporation (2015 elokuu)
Microsoft Power Query for Excel Formula Language Specification [PDF]
Noudettu kohteesta https://msdn.microsoft.com/library/mt807488.aspx

Microsoft Corporation (n.d.)
Power Query M -funktion viittaus [verkkosivu]
Noudettu kohteesta https://msdn.microsoft.com/library/mt779182.aspx