แชร์ผ่าน


Types ในภาษาสูตร Power Query M

ภาษาสูตร Power Query M เป็นภาษาผสมข้อมูลที่มีประโยชน์และแสดงออก แต่มีข้อจํากัดบางอย่าง ตัวอย่างเช่น ไม่มีการบังคับใช้ระบบชนิดที่แข็งแกร่ง ในบางกรณี จําเป็นต้องตรวจสอบอย่างเข้มงวดมากขึ้น โชคดีที่ M มีไลบรารีที่มีอยู่ภายในพร้อมการสนับสนุนสําหรับชนิดต่าง ๆ เพื่อให้สามารถตรวจสอบความถูกต้องที่แข็งแกร่งยิ่งขึ้น

นักพัฒนาควรมีความเข้าใจอย่างละเอียดเกี่ยวกับประเภทระบบเพื่อทําเช่นนี้กับความทั่วไปใด ๆ และในขณะที่ข้อมูลจําเพาะของภาษา Power Query M อธิบายประเภทระบบได้ดี แต่ก็มีเรื่องน่าประหลาดใจบางอย่าง ตัวอย่างเช่น การตรวจสอบความถูกต้องของอินสแตนซ์ของฟังก์ชันจําเป็นต้องมีวิธีการเปรียบเทียบชนิดสําหรับความเข้ากันได้

โดยการสํารวจระบบประเภท M อย่างระมัดระวังมากขึ้น ปัญหาเหล่านี้จํานวนมากสามารถชี้แจงได้ และนักพัฒนาจะได้รับอํานาจในการสร้างโซลูชันที่พวกเขาต้องการ

ความรู้เกี่ยวกับเพรดิเคต calculus และ naïve ทฤษฎีชุดควรเพียงพอที่จะเข้าใจสัญพจน์ที่ใช้

ข้อมูลเบื้องต้น

(1) B := { true; false }
B คือชุดทั่วไปของค่าบูลีน

(2) N := { ตัวระบุ M ที่ถูกต้อง }
N คือชุดของชื่อที่ถูกต้องทั้งหมดใน M ซึ่งถูกกําหนดไว้ที่อื่น

(3) P := ⟨B, T
P คือชุดของพารามิเตอร์ฟังก์ชัน แต่ละรายการอาจเป็นตัวเลือกและมีชนิด ชื่อพารามิเตอร์ไม่เกี่ยวข้อง

(4) Pn := ⋃0≤i≤ni, Pi⟩
Pn คือชุดของลําดับที่เรียงลําดับทั้งหมดของพารามิเตอร์ฟังก์ชัน n

(5) P := ⋃0≤i≤∞P i*
P* คือชุดของลําดับที่เป็นไปได้ทั้งหมดของพารามิเตอร์ฟังก์ชัน ตั้งแต่ความยาว 0 ขึ้นไป

(6) F := ⟨B, N, T
F คือชุดของเขตข้อมูลระเบียนทั้งหมด แต่ละเขตข้อมูลอาจเป็นตัวเลือก มีชื่อและชนิด

(7) Fn := ∏0≤i≤n F
Fn คือชุดของชุดเขตข้อมูลเรกคอร์ด n ทั้งหมด

(8) F := ( ⋃0≤i≤∞ Fi ) ∖ { F | ⟨b1, n1, t1⟩, ⟨b2, n2, t2⟩ ∈ Fn1 = n2 }*
F* คือชุดของชุดทั้งหมด (ความยาวใดก็ตาม) ของเขตข้อมูลระเบียน ยกเว้นชุดที่มากกว่าหนึ่งเขตข้อมูลมีชื่อเดียวกัน

(9) C := ⟨N,T
C คือชุดของชนิดคอลัมน์สําหรับตาราง แต่ละคอลัมน์มีชื่อและชนิด

(10) Cn ⊂ ⋃0≤i≤ni, C⟩
Cn คือชุดของลําดับที่เรียงลําดับทั้งหมดของชนิดคอลัมน์ n

(11) C := ( ⋃0≤i≤∞ Ci ) ∖ { Cm | ⟨a, ⟨n1, t1⟩⟩, ⟨b, ⟨n2, t 2, t2⟩⟩ ∈ Cmn1 = n2 }*
C* คือชุดของการรวมค่าทั้งหมด (ความยาวใดก็ตาม) ของชนิดคอลัมน์ ยกเว้นในกรณีที่มากกว่าหนึ่งคอลัมน์มีชื่อเดียวกัน

ชนิด M

(12) TF := ⟨P, P⟩*
ชนิดฟังก์ชันประกอบด้วยชนิดการส่งกลับและรายการตามลําดับของพารามิเตอร์ฟังก์ชัน zero-or-more

(13) TL :=〖T〗
ชนิดรายการจะแสดงด้วยชนิดที่กําหนด (เรียกว่า "ชนิดหน่วยข้อมูล") ที่ตัดในวงเล็บปีกกา เนื่องจากวงเล็บปีกกาถูกใช้ในโลหะ 〖 〗 ใช้วงเล็บปีกกาในเอกสารนี้

(14) TR := ⟨B, F⟩*
ชนิดเรกคอร์ด มีค่าสถานะที่ระบุว่าเป็น "เปิด" และมีค่าเป็นศูนย์หรือเขตข้อมูลเรกคอร์ดที่ไม่เรียงลําดับมากกว่า

(15) TRo := ⟨true, F⟩

(16) TR := ⟨false, F⟩
TRo และ TR เป็นทางลัดทางสรีรกรรมสําหรับระเบียนประเภทเปิดและปิดตามลําดับ

(17) T := C *
ชนิดตาราง เป็นลําดับที่มีการเรียงลําดับของชนิดคอลัมน์แบบศูนย์หรือมากกว่า ที่ไม่มีการชนของชื่อ

(18) TP := { any; none; null; ตรรกะ; ตัวเลข; เวลา; วันที่เวลา; datetimezone; duration; ข้อความ; ไบนารี; ชนิด; รายการ; เรกคอร์ด; ตาราง; ฟังก์ชัน anynonnull }
ชนิด Primitive คือหนึ่งจากรายการคําสําคัญ M นี้

(19) TN := { tn, u ∈ T | t n = u+null } = nullable t
นอกจากนี้ คุณสามารถทําเครื่องหมายชนิดใดๆ เป็น null ได้โดยใช้คําสําคัญ "nullable"

(20) T := TFTLTRTTPTN
ชุดของชนิด M ทั้งหมดคือการรวมกันของประเภทหกชุดนี้:
Function Types, List Types, Record Types, Table Types, Primitive Types และ Nullable Types

ฟังก์ชัน

จําเป็นต้องกําหนดฟังก์ชันหนึ่ง: NonNullable : TT
ฟังก์ชันนี้ใช้ชนิดและแสดงชนิดที่เทียบเท่า ยกเว้นว่าไม่สอดคล้องกับค่า null

ข้อมูลประจําตัว

ข้อมูลประจําตัวบางอย่างจําเป็นเพื่อกําหนดกรณีพิเศษบางอย่าง และอาจช่วยให้สามารถระบุข้อมูลข้างต้นได้

(21) nullable ใดๆ = any
(22) anynonnull nullable = any
(23) null ที่สามารถเป็น null ได้ = null
(24) ไม่มีค่าว่าง = null
(25) nullable nullable tT = nullable t
(26) NonNullable(nullable tT) = NonNullable(t)
(27) NonNullable(any) = anynonnull

ความเข้ากันได้ของชนิด

ตามที่กําหนดไว้ในที่อื่น ชนิด M สามารถใช้งานร่วมกับชนิด M ชนิดอื่นได้ หากและเฉพาะในกรณีที่ค่าทั้งหมดที่สอดคล้องกับชนิดแรกยังสอดคล้องกับชนิดที่สอง

ต่อไปนี้จะกําหนดความสัมพันธ์ของความเข้ากันได้ที่ไม่ขึ้นอยู่กับค่าที่สอดคล้องและขึ้นอยู่กับคุณสมบัติของชนิด ซึ่งคาดว่าความสัมพันธ์นี้ตามที่กําหนดไว้ในเอกสารนี้จะเทียบเท่ากับข้อกําหนดความหมายดั้งเดิมอย่างสมบูรณ์

ความสัมพันธ์ "เข้ากันได้กับ" : ≤ : BT × T
ในส่วนด้านล่าง ตัวพิมพ์เล็ก t จะแสดงถึงชนิด M ซึ่งเป็นองค์ประกอบของ T เสมอ

Φ จะแสดงชุดย่อยของ F* หรือ C *

(28) tt
ความสัมพันธ์นี้เป็นแบบสะท้อน

(29) tatbtbtctat c
ความสัมพันธ์นี้เป็นแบบส่งต่อ

(30) ไม่มี≤
ชนิด M จะสร้างแลตทิซเหนือความสัมพันธ์ นี้ ไม่มี เป็นด้านล่างและ ใด ๆ อยู่ด้านบน

(31) t, tTNt a ≤ t a → NonNullable(t) ≤ NonNullable(tb)
ถ้าสองชนิดเข้ากันได้ ค่าเทียบเท่า NonNullable จะเข้ากันได้เช่นกัน

(32) null ≤ tTN
null ชนิดแรกเริ่มเข้ากันได้กับชนิด null ทั้งหมด

(33) tTN ≤ anynonnull
ชนิดที่ไม่สามารถพูดได้ทั้งหมดเข้ากันได้กับ anynonnull

(34) NonNullable(t) ≤ t
ชนิดที่ไม่สามารถระบุได้เข้ากันได้กับค่าที่เทียบเท่า nullable

(35) t∈ฟังก์ชัน tFt
ชนิดฟังก์ชันทั้งหมดเข้ากันได้กับ ฟังก์ชัน

(36) tTLt ≤ รายการ
ชนิดรายการทั้งหมดเข้ากันได้กับ รายการ

(37) tTR ระเบียน≤
ชนิดระเบียนทั้งหมดเข้ากันได้กับ ระเบียน

(38) tTตาราง≤
ชนิดตารางทั้งหมดเข้ากันได้กับ ตาราง

(39) tatb ↔ 〖ta〗≤〖tb〗
ชนิดรายการสามารถใช้ร่วมกับรายการชนิดอื่นได้ถ้าชนิดหน่วยข้อมูลสามารถเข้ากันได้ และในทางกลับกันด้วย

(40) tTF = ⟨ pa, p* ⟩, tbTF = ⟨ pb, p* ⟩ ∧ ppbt a ≤ t b
ชนิดฟังก์ชันสามารถเข้ากันได้กับฟังก์ชันชนิดอื่นหากชนิดผลลัพธ์สามารถเข้ากันได้ และรายการพารามิเตอร์จะเหมือนกัน

(41) taTRo, tbTRtat b
ชนิดเรกคอร์ดแบบเปิดจะไม่เข้ากันกับชนิดของเรกคอร์ดแบบปิด

(42) taTR• = ⟨false, Φ⟩, tbTRo = ⟨true, Φ⟩ → tat b
ชนิดเรกคอร์ดแบบปิดสามารถเข้ากันได้กับชนิดเรกคอร์ดเปิดที่เหมือนกันเป็นอย่างอื่น

(43) t a ∈ TRo = ⟨true, (Φ, ⟨true, n, any⟩)⟩, tbTO = ⟨true, Φ⟩ → ttbt ≤ t
เขตข้อมูลที่เลือกได้ด้วยชนิด ใดก็ตาม อาจถูกละเว้นเมื่อเปรียบเทียบชนิดเรกคอร์ดที่เปิดอยู่สองชนิด

(44) t a ∈ TR = ⟨b, (Φ, ⟨β, n, u a⟩)⟩, tbT = ⟨b, (Φ, ⟨β, n, n, ub⟩)⟩ ∧ u ≤ u≤ t
เรกคอร์ดสองชนิดที่แตกต่างกันโดยหนึ่งเขตข้อมูลเท่านั้นจะเข้ากันได้ถ้าชื่อและตัวเลือกของเขตข้อมูลเหมือนกัน และชนิดของเขตข้อมูลดังกล่าวสามารถเข้ากันได้กับ

(45) t TR = ⟨b, (Φ, ⟨false, n, u⟩)⟩, tbT = ⟨b, (Φ, ⟨true, n, u⟩)⟩ → tt b
ชนิดเรกคอร์ดที่มีเขตข้อมูลที่ไม่ใช่ตัวเลือกเข้ากันได้กับชนิดของเรกคอร์ดเหมือนกัน แต่สําหรับเขตข้อมูลนั้นที่เลือกได้

(46) taTRo = ⟨true, (Φ, ⟨b, n, u⟩)⟩, tbTRo = ⟨true, Φ⟩ → tat b
ชนิดเรกคอร์ดแบบเปิดเข้ากันได้กับเรกคอร์ดชนิดเปิดอื่นที่มีเขตข้อมูลน้อยลงหนึ่งรายการ

(47) taT = (Φ, ⟨i, ⟨n, ua⟩⟩), tbT = (Φ, ⟨i, ⟨n, ub⟩⟩) ∧ u u tt b
ชนิดตารางเข้ากันได้กับชนิดตารางที่สอง ซึ่งเหมือนกันแต่สําหรับหนึ่งคอลัมน์ที่มีชนิดแตกต่างกัน เมื่อชนิดของคอลัมน์นั้นสามารถเข้ากันได้กับ

การอ้างอิง

Microsoft Corporation (สิงหาคม 2015)
ข้อมูลจําเพาะของ Microsoft Power Query สําหรับ Excel Formula Language [PDF]
ดึงข้อมูลจาก https://msdn.microsoft.com/library/mt807488.aspx

Microsoft Corporation (n.d.)
การอ้างอิงฟังก์ชัน Power Query M [เว็บเพจ]
ดึงข้อมูลจาก https://msdn.microsoft.com/library/mt779182.aspx