แนะ นำ
ภาพรวม
Microsoft Power Query มอบประสบการณ์ "รับข้อมูล" อันทรงประสิทธิภาพที่ครอบคลุมคุณลักษณะหลายอย่าง ความสามารถหลักของ Power Query คือการกรองและจุดกลุ่ม นั่นคือ "การรวม" ข้อมูลจากคอลเลกชันของแหล่งข้อมูลที่ได้รับการสนับสนุนอย่างน้อยหนึ่งรายการ การรวมข้อมูลดังกล่าวจะแสดงโดยใช้ภาษาสูตร Power Query (รู้จักกันอย่างไม่เป็นทางการว่า "M") Power Query จะฝังเอกสาร M ในผลิตภัณฑ์ Microsoft ที่หลากหลาย รวมถึง Excel, Power BI, Analysis Services และ Dataverse เพื่อเปิดใช้งานการรวมข้อมูลที่ทําซ้ําได้
เอกสารนี้มีข้อมูลจําเพาะสําหรับ M หลังจากการแนะนําแบบย่อที่มีจุดมุ่งหมายเพื่อสร้างการหยอกหลีกแรกและความคุ้นเคยกับภาษาเอกสารครอบคลุมภาษาอย่างแม่นยําในขั้นตอนต่อเนื่องหลายขั้นตอน:
โครงสร้างเลกซิคัล กําหนดชุดของข้อความที่ถูกต้องตามหลักเลกซิคัล
ค่า นิพจน์ สภาพแวดล้อมและตัวแปร ตัวระบุ และแบบจําลองการประเมินจะสร้างแนวคิดพื้นฐาน ภาษา
ข้อมูลจําเพาะโดยละเอียดของค่า ทั้งแบบดั้งเดิมและแบบมีโครงสร้าง จะกําหนดโดเมนเป้าหมายของภาษาดังกล่าว
ค่ามี ชนิดเนื่องจากเป็นค่าชนิดพิเศษ ที่กําหนดลักษณะพื้นฐานของค่า และดําเนินการเมตาดาต้าเพิ่มเติมที่เฉพาะเจาะจงกับรูปร่างของค่าที่มีโครงสร้าง
ชุดของตัวดําเนินการ ใน M จะกําหนดชนิดของนิพจน์ที่สามารถสร้างได้
Functionค่าพิเศษชนิดอื่น ระบุพื้นฐานสําหรับไลบรารีมาตรฐานที่หลากหลายสําหรับ M และอนุญาตให้สามารถเพิ่มนามธรรมใหม่ได้
Errors สามารถเกิดขึ้นได้เมื่อใช้ตัวดําเนินการหรือฟังก์ชันในระหว่างการประเมินนิพจน์ ในขณะที่ข้อผิดพลาดไม่ใช่ค่า มีหลายวิธีใน จัดการข้อผิดพลาด ข้อผิดพลาดที่แมปกลับไปยังค่า
อนุญาตให้นิพจน์ อนุญาตให้มีการนําข้อกําหนดเสริมที่ใช้ในการสร้างนิพจน์ที่ซับซ้อนขึ้นในขั้นตอนที่น้อยกว่า
นิพจน์ If สนับสนุนการประเมินแบบมีเงื่อนไข
Sections มีกลไกแบบโมดูลอย่างง่าย (Power Query. ยังไม่ได้ใช้ประโยชน์จากส่วน)
สุดท้าย ไวยากรณ์รวม รวบรวมส่วนต่างๆ ของไวยากรณ์จากส่วนอื่นๆ ทั้งหมดของเอกสารนี้ไปเป็นข้อกําหนดแบบสมบูรณ์เพียงรายการเดียว
สําหรับนักทฤษฎีด้านภาษาคอมพิวเตอร์: ภาษาสูตรที่ระบุในเอกสารนี้ โดยส่วนใหญ่เป็นภาษาบริสุทธิ์ อยู่ในลําดับที่สูงกว่า เป็นชนิดไดนามิก และมีการใช้งานแบบขี้เกียจบางส่วน
นิพจน์และค่า
รายการที่สร้างขึ้นที่ส่วนกลางใน M คือนิพจน์ สามารถประเมินนิพจน์ (คํานวณ) ให้ผลลัพธ์เป็นค่า เดียว
แม้ว่าคุณสามารถเขียนค่าจํานวนมากเป็นนิพจน์ได้อย่างแท้จริง แต่ค่าจะไม่ใช่นิพจน์ ตัวอย่างเช่น นิพจน์ 1
ประเมินเป็นค่า 1; นิพจน์ 1+1
ประเมินเป็นค่า 2 ความแตกต่างนี้จะละเอียดมาก แต่มีความสําคัญมาก นิพจน์เป็นสูตรสําหรับการประเมินผล ค่า คือผลลัพธ์ของการประเมิน
ตัวอย่างต่อไปนี้แสดงชนิดของค่าต่าง ๆ ที่พร้อมใช้งานใน M ตามแบบแผน ค่าจะถูกเขียนโดยใช้รูปแบบสัญพจน์ซึ่งจะปรากฏในนิพจน์ที่ประเมินเป็นค่านั้น (โปรดทราบว่า //
ระบุจุดเริ่มต้นของข้อคิดเห็นซึ่งยังคงถึงจุดสิ้นสุดของบรรทัด)
ค่า ดั้งเดิม
เป็นค่าส่วนเดียว เช่น ตัวเลข ตรรกะ ข้อความ หรือ null ค่า null สามารถใช้เพื่อระบุการขาดหายไปของข้อมูลใด ๆ 123 // A number true // A logical "abc" // A text null // null value
รายการ ค่าเป็นลําดับค่าที่มีการเรียงลําดับ M สนับสนุนรายการอนันต์ แต่หากเขียนเป็นสัญพจน์ รายการจะมีความยาวคงที่ อักขระเครื่องหมายวงเล็บปีกกา
{
และ}
แสดงจุดเริ่มต้นและสิ้นสุดของรายการ{123, true, "A"} // list containing a number, a logical, and // a text {1, 2, 3} // list of three numbers
ระเบียน
คือชุดของเขตข้อมูล เขตข้อมูล คือคู่ชื่อ/ค่าที่ชื่อเป็นค่าข้อความที่ไม่ซ้ํากันภายในเรกคอร์ดของเขตข้อมูล ไวยากรณ์สัญพจน์สําหรับค่าเรกคอร์ด อนุญาตให้สามารถเขียนชื่อได้โดยไม่มีอัญประกาศ รูปแบบนี้ยังเรียกว่า ตัวระบุ รายการต่อไปนี้แสดงเรกคอร์ดที่มีเขตข้อมูลสามรายการที่มีชื่อว่า " A
", "B
" และ "C
" ซึ่งมีค่า1
,2
และ3
[ A = 1, B = 2, C = 3 ]
ตาราง คือชุดของค่าที่จัดระเบียบเป็นคอลัมน์ (ซึ่งถูกระบุด้วยชื่อ) และแถว ไม่มีไวยากรณ์สัญพจน์สําหรับการสร้างตาราง แต่มีฟังก์ชันมาตรฐานต่างๆ ที่สามารถใช้เพื่อสร้างตารางจากรายการหรือเรกคอร์ด
เช่น:
#table( {"A", "B"}, { {1, 2}, {3, 4} } )
การดําเนินการนี้จะสร้างตารางที่มีรูปร่างต่อไปนี้:
ฟังก์ชัน คือค่าที่เมื่อเรียกใช้กับอาร์กิวเมนต์ จะสร้างค่าใหม่ ฟังก์ชันจะถูกเขียนโดยการแสดงรายการพารามิเตอร์ ของฟังก์ชัน ในวงเล็บ ตามด้วยสัญลักษณ์
=>
ตามด้วยนิพจน์ที่กําหนดฟังก์ชัน โดยทั่วไป นิพจน์ดังกล่าวจะอ้างอิงถึงพารามิเตอร์ (ตามชื่อ)(x, y) => (x + y) / 2`
การประเมิน
แบบจําลองการประเมินผลของภาษา M จะถูกจัดรูปแบบหลังจากที่พบแบบจําลองการประเมินโดยทั่วไปในสเปรดชีต ซึ่งสามารถกําหนดลําดับการคํานวณโดยยึดตามการขึ้นต่อกันระหว่างสูตรต่างๆ ในเซลล์
หากคุณเขียนสูตรในสเปรดชีตเช่น Excel คุณอาจรู้จักสูตรทางด้านซ้ายของผลลัพธ์ทางด้านขวาเมื่อคํานวณแล้ว:
ใน M ส่วนต่างๆ ของนิพจน์สามารถอ้างอิงถึงส่วนอื่นๆ ของนิพจน์ตามชื่อ และกระบวนการประเมินผลจะกําหนดลําดับที่มีการคํานวณนิพจน์ที่อ้างอิงโดยอัตโนมัติ
คุณสามารถใช้เรกคอร์ดเพื่อสร้างนิพจน์ที่เทียบเท่ากับตัวอย่างสเปรดชีตก่อนหน้าได้ เมื่อเริ่มต้นค่าของเขตข้อมูล คุณสามารถอ้างอิงไปยังเขตข้อมูลอื่นภายในเรกคอร์ดโดยใช้ชื่อของเขตข้อมูลดังนี้:
[
A1 = A2 * 2,
A2 = A3 + 1,
A3 = 1
]
นิพจน์ข้างต้นเทียบเท่ากับรายการต่อไปนี้ (ในการประเมินค่าที่เท่ากัน):
[
A1 = 4,
A2 = 2,
A3 = 1
]
ระเบียนสามารถมีอยู่ภายใน หรือ ซ้อนภายในระเบียนอื่น คุณสามารถใช้ตัวดําเนินการค้นหา ([]
) เพื่อเข้าถึงเขตข้อมูลของเรกคอร์ดตามชื่อได้ ตัวอย่างเช่น ระเบียนต่อไปนี้มีเขตข้อมูลที่ชื่อ Sales
ที่มีระเบียน และเขตข้อมูลที่ชื่อ Total
ที่เข้าถึงเขตข้อมูล FirstHalf
และเขตข้อมูล SecondHalf
ของระเบียน Sales
:
[
Sales = [ FirstHalf = 1000, SecondHalf = 1100 ],
Total = Sales[FirstHalf] + Sales[SecondHalf]
]
นิพจน์ข้างต้นเทียบเท่ากับรายการต่อไปนี้เมื่อมีการประเมิน:
[
Sales = [ FirstHalf = 1000, SecondHalf = 1100 ],
Total = 2100
]
นอกจากนี้ ยังสามารถมีเรกคอร์ดภายในรายการได้อีกด้วย คุณสามารถใช้ตัวดําเนินการดัชนีตําแหน่ง ({}
) เพื่อเข้าถึงหน่วยข้อมูลในรายการตามดัชนีตัวเลข ค่าภายในรายการจะถูกอ้างอิงโดยใช้ดัชนีที่ยึดตามศูนย์จากจุดเริ่มต้นของรายการ ตัวอย่างเช่น มีการใช้ดัชนี 0
และ 1
เพื่ออ้างอิงหน่วยข้อมูลที่หนึ่งและสองในรายการด้านล่าง:
[
Sales =
{
[
Year = 2007,
FirstHalf = 1000,
SecondHalf = 1100,
Total = FirstHalf + SecondHalf // 2100
],
[
Year = 2008,
FirstHalf = 1200,
SecondHalf = 1300,
Total = FirstHalf + SecondHalf // 2500
]
},
TotalSales = Sales{0}[Total] + Sales{1}[Total] // 4600
]
นิพจน์สมาชิกเรกคอร์ดและรายการ (รวมถึง อนุญาตให้นิพจน์) ได้รับการประเมินโดยใช้ การประเมินผลเบื่อ ซึ่งหมายความว่านิพจน์ดังกล่าวได้รับการประเมินเมื่อจําเป็นเท่านั้น นิพจน์อื่นๆ ทั้งหมดจะถูกประเมินโดยใช้การประเมิน เบราเซอร์ซึ่งหมายความว่านิพจน์เหล่านั้นจะได้รับการประเมินทันทีเมื่อพบในระหว่างกระบวนการประเมินผล วิธีการที่ดีอีกวิธีหนึ่งคือ จดจําว่าการประเมินรายการหรือนิพจน์เรกคอร์ดจะแสดงรายการหรือค่าเรกคอร์ดที่ระบบจดจําว่าจําเป็นต้องคํานวณเขตข้อมูลเรกคอร์ดหรือหน่วยข้อมูลของรายการอย่างไร เมื่อได้รับคําขอ (โดยตัวดําเนินการค้นหาหรือดัชนี)
ฟังก์ชัน
ใน M ฟังก์ชัน คือการแมปจากชุดของค่าอินพุตไปยังค่าเอาต์พุตเดียว ฟังก์ชันจะถูกเขียนโดยการตั้งชื่อชุดค่าอินพุตที่จําเป็น (พารามิเตอร์ของฟังก์ชันดังกล่าว) จากนั้นการระบุนิพจน์ที่คํานวณผลลัพธ์ของฟังก์ชันโดยใช้ค่าอินพุตเหล่านั้น (เนื้อความของฟังก์ชัน) ตามด้วยสัญลักษณ์ (=>
) เช่น:
(x) => x + 1 // function that adds one to a value
(x, y) => x + y // function that adds two values
ฟังก์ชัน เป็นค่าเช่นเดียวกับค่าตัวเลขหรือข้อความ ตัวอย่างต่อไปนี้แสดงฟังก์ชันที่เป็นค่าของเขตข้อมูล เพิ่ม ซึ่ง เรียกใช้หรือปฏิบัติการ จากเขตข้อมูลอื่นๆ เมื่อมีการเรียกใช้ฟังก์ชัน ระบบจะระบุชุดของค่าที่แทนที่เชิงตรรกะสําหรับชุดค่าอินพุตที่จําเป็นภายในนิพจน์เนื้อความของฟังก์ชัน
[
Add = (x, y) => x + y,
OnePlusOne = Add(1, 1), // 2
OnePlusTwo = Add(1, 2) // 3
]
ห้องสมุด
M รวมถึงชุดข้อกําหนดทั่วไปที่พร้อมใช้งานสําหรับใช้จากนิพจน์ที่เรียกว่า ไลบรารีมาตรฐาน หรือเพียงแค่ไลบรารี สั้นๆ ข้อกําหนดเหล่านี้ประกอบด้วยชุดของค่าที่มีชื่อ ชื่อของค่าที่ระบุโดยไลบรารีมีไว้สําหรับใช้ภายในนิพจน์หนึ่ง โดยไม่จําเป็นต้องกําหนดอย่างชัดแจ้งโดยนิพจน์ดังกล่าว เช่น:
Number.E // Euler's number e (2.7182...)
Text.PositionOf("Hello", "ll") // 2
ผู้ ประกอบการ
M รวมถึงชุดของตัวดําเนินการที่สามารถใช้ในนิพจน์ต่างๆ ได้ ตัวดําเนินการ 1 + 2
ตัวเลข 1
และ 2
เป็นตัวถูกดําเนินการ และตัวดําเนินการคือตัวดําเนินการเพิ่มเติม (+
)
ความหมายของตัวดําเนินการอาจแตกต่างกันโดยขึ้นอยู่กับชนิดของค่าตัวถูกดําเนินการ ตัวอย่างเช่น ตัวดําเนินการบวก สามารถใช้กับค่าชนิดอื่น นอกเหนือจากตัวเลขได้:
1 + 2 // numeric addition: 3
#time(12,23,0) + #duration(0,0,2,0)
// time arithmetic: #time(12,25,0)
ตัวอย่างอื่นของตัวดําเนินการที่มีความหมายขึ้นอยู่กับตัวถูกดําเนินการ คือ ตัวดําเนินการรวม (&
):
"A" & "BC" // text concatenation: "ABC"
{1} & {2, 3} // list concatenation: {1, 2, 3}
[ a = 1 ] & [ b = 2 ] // record merge: [ a = 1, b = 2 ]
โปรดทราบว่าตัวดําเนินการบางตัวไม่สนับสนุนการรวมค่าทั้งหมด เช่น:
1 + "2" // error: adding number and text isn't supported
นิพจน์ที่เมื่อประเมิน พบเงื่อนไขของตัวดําเนินการที่ไม่ได้กําหนดจะประเมินเป็นข้อผิดพลาด
เมตาดาต้า
เมตาดาต้า คือข้อมูลเกี่ยวกับค่าที่เชื่อมโยงกับค่า เมตาดาต้าจะแสดงเป็นค่าเรกคอร์ด ที่เรียกว่าเรกคอร์ดเมตาดาต้า เขตข้อมูลของเรกคอร์ดเมตาดาต้าสามารถใช้เพื่อจัดเก็บเมตาดาต้าสําหรับค่าได้
ทุกค่ามีเรกคอร์ดเมตาดาต้า หากไม่ได้ระบุค่าของเรกคอร์ดเมตาดาต้า เรกคอร์ดเมตาดาต้าจะว่างเปล่า (ไม่มีเขตข้อมูล)
เรกคอร์ดของเมตาดาต้าจะแสดงวิธีการเชื่อมโยงข้อมูลเพิ่มเติมกับค่าชนิดใดๆ ในลักษณะที่ไม่ขัดขวางการทํางาน การเชื่อมโยงเรกคอร์ดของเมตาดาต้ากับค่าหนึ่งๆ จะไม่เปลี่ยนแปลงค่าหรือลักษณะการทํางาน
ค่าเรกคอร์ดของเมตาดาต้า y
เชื่อมโยงกับค่าที่มีอยู่ x
โดยใช้ไวยากรณ์ x meta y
ตัวอย่างเช่น รหัสต่อไปนี้เชื่อมโยงเรกคอร์ดของเมตาดาต้ากับเขตข้อมูล Rating
และ Tags
ที่มีค่าข้อความ "Mozart"
:
"Mozart" meta [ Rating = 5, Tags = {"Classical"} ]
สําหรับค่าต่างๆ ที่ดําเนินการไปแล้วใช้เรกคอร์ดของเมตาดาต้าที่ไม่ว่างเปล่า ผลลัพธ์ของการปรับใช้เมตาคือผลลัพธ์ของการคํานวณการผสานเรกคอร์ดของเรกคอร์ดเมตาดาต้าใหม่และที่มีอยู่ ตัวอย่างเช่น นิพจน์สองรายการต่อไปนี้จะเทียบเท่ากันและกัน และเทียบเท่ากับนิพจน์ก่อนหน้า:
("Mozart" meta [ Rating = 5 ]) meta [ Tags = {"Classical"} ]
"Mozart" meta ([ Rating = 5 ] & [ Tags = {"Classical"} ])
เรกคอร์ดของเมตาดาต้าสามารถเข้าถึงได้สําหรับค่าที่กําหนดโดยใช้ฟังก์ชัน Value.Metadata ในตัวอย่างต่อไปนี้ นิพจน์ในเขตข้อมูล ComposerRating
เข้าถึงเรกคอร์ดเมตาดาต้าของค่าในเขตข้อมูล Composer
จากนั้น เข้าถึงเขตข้อมูล Rating
ของเรกคอร์ดเมตาดาต้า
[
Composer = "Mozart" meta [ Rating = 5, Tags = {"Classical"} ],
ComposerRating = Value.Metadata(Composer)[Rating] // 5
]
กําหนดนิพจน์
ตัวอย่างจํานวนมากที่แสดงจะรวมค่าสัญพจน์ทั้งหมดของนิพจน์ไว้ในผลลัพธ์ของนิพจน์ นิพจน์ let
อนุญาตให้มีการคํานวณชุดค่า ชื่อที่กําหนด และใช้ในนิพจน์ที่ตามมาที่อยู่หลัง in
ตัวอย่างเช่น ในตัวอย่างข้อมูลยอดขายของเรา คุณสามารถทําสิ่งต่อไปนี้ได้:
let
Sales2007 =
[
Year = 2007,
FirstHalf = 1000,
SecondHalf = 1100,
Total = FirstHalf + SecondHalf // 2100
],
Sales2008 =
[
Year = 2008,
FirstHalf = 1200,
SecondHalf = 1300,
Total = FirstHalf + SecondHalf // 2500
]
in Sales2007[Total] + Sales2008[Total] // 4600
ผลลัพธ์ของนิพจน์ข้างต้นคือค่าตัวเลข (4600
) ที่คํานวณจากค่าที่ผูกไว้กับชื่อ Sales2007
และ Sales2008
นิพจน์ ถ้า
นิพจน์ if
จะเลือกระหว่างนิพจน์สองรายการโดยยึดตามเงื่อนไขตรรกะ เช่น:
if 2 > 1 then
2 + 2
else
1 + 1
นิพจน์แรก (2 + 2
) จะถูกเลือก หากนิพจน์เชิงตรรกะ (2 > 1
) เป็นจริง และนิพจน์ที่สอง (1 + 1
) จะถูกเลือก หากเป็นค่าเท็จ นิพจน์ที่เลือก (ในกรณีนี้ 2 + 2
) จะได้รับการประเมิน และจะกลายเป็นผลลัพธ์ของนิพจน์ if
(4
)
ข้อ ผิด พลาด
ข้อผิดพลาด เป็นข้อบ่งชี้ว่ากระบวนการประเมินนิพจน์ไม่สามารถสร้างค่าได้
ข้อผิดพลาดเกิดจากตัวดําเนินการและฟังก์ชันที่เป็นไปตามเงื่อนไขของข้อผิดพลาดหรือโดยใช้นิพจน์ข้อผิดพลาด ข้อผิดพลาดจะได้รับการจัดการโดยใช้นิพจน์ try
เมื่อเกิดข้อผิดพลาด จะมีการระบุค่าที่สามารถใช้เพื่อระบุสาเหตุที่เกิดข้อผิดพลาด
let Sales =
[
Revenue = 2000,
Units = 1000,
UnitPrice = if Units = 0 then error "No Units"
else Revenue / Units
],
UnitPrice = try Number.ToText(Sales[UnitPrice])
in "Unit Price: " &
(if UnitPrice[HasError] then UnitPrice[Error][Message]
else UnitPrice[Value])
ตัวอย่างข้างต้นเข้าถึงเขตข้อมูล Sales[UnitPrice]
และจัดรูปแบบค่าทําให้เกิดผลลัพธ์:
"Unit Price: 2"
ถ้าเขตข้อมูล Units
เป็นศูนย์ จากนั้นเขตข้อมูล UnitPrice
จะทําให้เกิดข้อผิดพลาด ซึ่งจะถูกจัดการโดย try
จากนั้น ค่าผลลัพธ์จะเป็นดังนี้:
"No Units"
นิพจน์ try
แปลงค่าและข้อผิดพลาดที่เหมาะสมเป็นค่าเรกคอร์ดที่ระบุว่านิพจน์ try
จัดการกับข้อผิดพลาดหรือไม่ และค่าที่เหมาะสมหรือเรกคอร์ดข้อผิดพลาดที่ถูกแยกออกเมื่อจัดการข้อผิดพลาดหรือไม่ ตัวอย่างเช่น พิจารณานิพจน์ต่อไปนี้ที่ทําให้เกิดข้อผิดพลาด และจัดการทันที:
try error "negative unit count"
นิพจน์นี้จะประเมินเป็นค่าเรกคอร์ดที่ซ้อนกันต่อไปนี้ อธิบาย [HasError]
[Error]
และ [Message]
การค้นหาเขตข้อมูลในตัวอย่างราคาต่อหน่วยก่อนหน้า
[
HasError = true,
Error =
[
Reason = "Expression.Error",
Message = "negative unit count",
Detail = null
]
]
กรณีทั่วไปคือการแทนที่ข้อผิดพลาดด้วยค่าเริ่มต้น นิพจน์ try
สามารถใช้กับคําสั่ง otherwise
ที่เลือกได้เพื่อให้ได้ผลลัพธ์ในรูปแบบกะทัดรัด:
try error "negative unit count" otherwise 42
// 42