ชนิดข้อมูล
หมายเหตุ
Microsoft Power Fx เป็นชื่อใหม่สำหรับภาษาสูตรของแอปพื้นที่ทำงาน บทความเหล่านี้คืองานที่อยู่ระหว่างดำเนินการ ในขณะที่เราแยกภาษาจากแอปพื้นที่ทำงาน รวมเข้ากับผลิตภัณฑ์ Microsoft Power Platform อื่นๆ และทำให้พร้อมใช้งานในรูปแบบโอเพนซอร์ส เริ่มต้นด้วย ภาพรวมของ Microsoft Power Fx สำหรับการแนะนำภาษา
ข้อมูลไหลผ่านแอปขนาดเล็กที่มีค่าไม่ต่อเนื่องคล้ายกับเซลล์ของสเปรดชีต ตัวอย่างเช่น ข้อมูลในฟิลด์ วันเกิด และฟิลด์ วันครบรอบ ทั้งงสองจะไหลผ่านเป็นค่า วันที่ ที่มีปี เดือน และวัน แอปรู้วิธีจัดรูปแบบค่าเหล่านี้ จำกัดข้อมูลป้อนเข้าให้เหมาะสมกับแต่ละค่าและแชร์ค่ากับฐานข้อมูล วันเกิดแตกต่างจากวันครบรอบ แต่ระบบจัดการพวกเขาในลักษณะเดียวกัน ในกรณีนี้ วันที่ เป็นตัวอย่างของ ชนิดข้อมูล
บทความนี้ให้รายละเอียดเกี่ยวกับชนิดข้อมูลที่แอปพื้นที่ทำงานสนับสนุน เมื่อแอปเชื่อมต่อกับแหล่งข้อมูลภายนอก ชนิดข้อมูลแต่ละชนิดในแหล่งที่มานั้นจะถูกแมปกับชนิดข้อมูลสำหรับแอปพื้นที่ทำงาน
ชนิดข้อมูล | คำอธิบาย | ตัวอย่าง |
---|---|---|
แบบบูลีน | ค่า จริง หรือ เท็จ สามารถใช้โดยตรงใน If Filter และฟังก์ชั่นอื่นๆ โดยไม่มีการเปรียบเทียบ | จริง |
สี | ข้อกำหนดสี รวมถึงช่องทางอัลฟา | สี.แดง ค่าสี( "#102030" ) RGBA( 255, 128, 0, 0.5 ) |
สกุลเงิน | ค่าสกุลเงินที่จัดเก็บในหมายเลขทศนิยม ค่าสกุลเงินเหมือนกับค่าตัวเลขพร้อมตัวเลือกการจัดรูปแบบสกุลเงิน | 123 4.56 |
วันที่ | วันที่ที่ไม่มีเวลา ในเขตเวลาของผู้ใช้แอป | วันที่( 2019, 5, 16 ) |
วันที่เวลา | วันที่ที่มีเวลา ในเขตเวลาของผู้ใช้แอป | DateTimeValue( "16 พ.ค. 2554, 2019 1:23:09 น." ) |
ทศนิยม | ตัวเลขที่มีความแม่นยำสูง การดำเนินการฐาน 10 และช่วงที่จำกัด | 123 ทศนิยม( "1.2345" ) |
GUID | รหัสตัวระบุที่ไม่ซ้ำแบบส่วนกลาง | GUID() GUID( "123e4567-e89b-12d3-a456-426655440000 - |
ไฮเปอร์ลิงก์ | สตริงข้อความที่มีไฮเปอร์ลิงก์ | -https://powerapps.microsoft.com" - |
ภาพ | สตริงข้อความ รหัสเฉพาะของทรัพยากรแบบสากล (URI) ไปยังรูปภาพในรูปแบบ .jpeg, .png, .svg, .gif หรือรูปแบบทั่วไปอื่นๆ ของเว็บ | รูปภาพของฉัน เพิ่มเป็นทรัพยากรแอป -https://northwindtraders.com/logo.jpg" - "แอพ://blobmanager/7b12ffa2..." |
สื่อมวลชน | สตริงข้อความ URI สำหรับการบันทึกวิดีโอหรือเสียง | วิดีโอของฉัน เพิ่มเป็นทรัพยากรแอป -https://northwindtraders.com/intro.mp4" - "แอพ://blobmanager/3ba411c..." |
ตัวเลข หรือ ลอย | ตัวเลขที่มีความแม่นยำมาตรฐาน การดำเนินการฐาน 2 และช่วงที่กว้าง | 123 8.903e121 1.234e200 |
ทางเลือก | ตัวเลือกจากชุดของตัวเลือกที่สำรองไว้โดยตัวเลข ชนิดข้อมูลนี้รวมป้ายกำกับข้อความที่แปลได้แบบท้องถิ่นพร้อมค่าตัวเลข ป้ายกำกับจะปรากฏในแอป และค่าตัวเลขจะถูกจัดเก็บและใช้สำหรับการเปรียบเทียบ | สถานะการสั่งซื้อรายการนี้ |
บันทึก | เรกคอร์ดของค่าข้อมูล ชนิดข้อมูลผสมนี้มีอินสแตนซ์ของชนิดข้อมูลอื่นๆ ที่ระบุไว้ในหัวข้อนี้ ข้อมูลเพิ่มเติม: การทำงานกับตาราง | { บริษัท: "Northwind Traders" พนักงาน: 35, NonProfit: เท็จ} |
การอ้างอิงบันทึก | การอ้างอิงไปยังเรกคอร์ดในตาราง การอ้างอิงดังกล่าวมักใช้กับการค้นหาโพลีมอร์ฟิค ข้อมูลเพิ่มเติม: การทำงานกับการอ้างอิง | (บัญชี)เจ้าของคนแรก |
โต๊ะ | ตารางของเรกคอร์ด เรกคอร์ดทั้งหมดจะต้องมีชื่อเดียวกันสำหรับฟิลด์ที่มีชนิดข้อมูลเดียวกัน และฟิลด์ที่ละเว้นจะถือเป็น ว่างเปล่า ชนิดข้อมูลผสมนี้มีอินสแตนซ์ของชนิดข้อมูลอื่นๆ ที่ระบุไว้ในหัวข้อนี้ ข้อมูลเพิ่มเติม: การทำงานกับตาราง | โต๊ะ( { ชื่อจริง: "ซิดนีย์" LastName: "Higa" }, { FirstName: "Nancy", LastName: "Anderson" } ) |
ข้อความ | สตริงของข้อความ Unicode | "สวัสดีโลก" |
เวลา | เวลาที่ไม่มีวันที่ ในเขตเวลาของผู้ใช้แอป | เวลา( 11, 23, 45 ) |
สองตัวเลือก | ตัวเลือกจากชุดของสองตัวเลือก ที่สำรองไว้โดยค่าบูลีน ชนิดข้อมูลนี้รวมป้ายกำกับข้อความที่แปลได้แบบท้องถิ่นพร้อมค่าบูลีน ป้ายกำกับจะปรากฏในแอป และค่าบูลีนจะถูกจัดเก็บและใช้สำหรับการเปรียบเทียบ | รายการนี้ต้องเสียภาษี |
ออบเจ็กต์ที่ไม่ได้ระบุชนิด | ออบเจ็กต์ชนิดที่ไม่ได้ประกาศ ออบเจ็กต์พื้นฐานสามารถเป็นชนิดที่มีอยู่และสามารถแปลงเป็นชนิดที่เข้ากันได้โดยใช้ฟังก์ชันต่างๆ เช่น Boolean(), Value(), Table() ฯลฯ สำหรับข้อมูลเพิ่มเติม โปรดดู ออบเจ็กต์ไม่ระบุชนิด และ การทำงานกับ JSON | การแยกวิเคราะห์ JSON("{ "สนาม" : 1234 } ").สนาม |
ชนิดข้อมูลเหล่านี้จำนวนมากมีความคล้ายคลึงกันและมีการแสดงที่เหมือนกัน เช่น ฟิลด์ ไฮเปอร์ลิงก์ ที่ถูกถือว่าเป็น ข้อความ ชนิดข้อมูลเพิ่มเติมให้ประสบการณ์เริ่มต้นที่ดีขึ้นในฟอร์มและการควบคุมอื่นๆ
Blank
ชนิดข้อมูลทั้งหมดสามารถมีค่าเป็น ว่างเปล่า (ในคำอื่นๆ ไม่มีค่า) คำว่า "null" มักใช้ในฐานข้อมูลสำหรับแนวคิดนี้
ใช้ฟังก์ชัน Blank ด้วย Set หรือฟังก์ชัน Patch เพื่อตั้งค่าตัวแปรหรือฟิลด์เป็น ว่างเปล่า ตัวอย่างเช่น, ตั้งค่า( x, ว่างเปล่า() ) ลบค่าใดๆ ในตัวแปรแบบส่วนกลาง x
ทดสอบหาค่า ว่างเปล่า โดยใช้ฟังก์ชัน IsBlank แทนค่า ว่างเปล่า ที่เป็นไปได้ ด้วยค่า ไม่-ว่างเปล่า โดยใช้ฟังก์ชัน Coalesce
เพราะข้อมูลทุกประเภทรองรับชนิดข้อมูล ว่างเปล่า บูลีน และ สองตัวเลือก อย่างมีประสิทธิภาพมีสามค่าที่เป็นไปได้
ข้อความ ไฮเปอร์ลิงก์ รูปภาพ และสื่อ
ทั้งสี่ประเภทข้อมูลเหล่านี้จะขึ้นอยู่กับสตริงข้อความ Unicode
ข้อความฝังตัว
สตริงข้อความแบบฝังในสูตรถูกล้อมรอบด้วยเครื่องหมายอัญประกาศคู่ ใช้เครื่องหมายอัญประกาศคู่สองตัวพร้อมกัน เพื่อเป็นตัวแทนของเครื่องหมายอัญประกาศคู่เดียวในสตริงข้อความ ตัวอย่างเช่น ใช้สูตรต่อไปนี้ในคุณสมบัติ OnSelect ของกาีรควบคุม Button:
Notify( "Jane said ""Hello, World!""" )
ให้ผลลัพธ์ในแบนเนอร์เมื่อกดปุ่ม โดยไม่ใส่เครื่องหมายอัญประกาศคู่แรกและสุดท้าย (ขณะที่คั่นสตริงข้อความ) และเครื่องหมายอัญประกาศคู่ซ้ำรอบๆ Hello, World! จะถูกแทนที่ด้วยเครื่องหมายอัญประกาศคู่เดียว:
เครื่องหมายอัญประกาศเดี่ยวใช้สำหรับ ชื่อตัวระบุ ที่มีอักขระพิเศษและไม่มีความสำคัญพิเศษภายในสตริงข้อความ
การใช้ตัวแปรในสตริง
ใช้การใช้ตัวแปรในสตริงเพื่อฝังสูตรภายในสตริงข้อความ การดำเนินการนี้มักจะง่ายกว่าและเห็นภาพผลลัพธ์มากกว่าการใช้ฟังก์ชัน Concatenate หรือตัวดำเนินการ &
วางเครื่องหมายดอลลาร์ $ นำหน้าสตริงข้อความและใส่สูตรที่ฝังในวงเล็บปีกกา {} หากต้องการใส่วงเล็บปีกกาในสตริงข้อความ ให้ใช้วงเล็บปีกกาซ้ำๆ: {{ หรือ }} สามารถใช้การใช้ตัวแปรในสตริงได้ทุกที่ที่สามารถใช้สตริงข้อความมาตรฐานได้
ตัวอย่างเช่น พิจารณาสูตรนี้ด้วยตัวแปรส่วนกลาง แอปเปิ้ล ตั้งค่าเป็น 3 และ กล้วย ตั้งค่าเป็น 4:
$"We have {Apples} apples, {Bananas} bananas, yielding {Apples+Bananas} fruit total."
สูตรนี้ส่งคืนสตริงข้อความ เรามีแอปเปิ้ล 3 ลูก กล้วย 4 ลูก รวมเป็น 7 ผล ตัวแปร แอปเปิ้ล และ กล้วย จะถูกแทรกในข้อความแทนที่วงเล็บปีกกาพร้อมกับผลลัพธ์ของสูตรทางคณิตศาสตร์ แอปเปิ้ล+กล้วย ช่องว่างและอักขระอื่นๆ ที่อยู่ในวงเล็บปีกกาจะยังคงเหมือนเดิม
สูตรที่ฝังสามารถรวมฟังก์ชันหรือตัวดำเนินการใดๆ ก็ได้ ทั้งหมดที่จำเป็นก็คือผลลัพธ์ของสูตรสามารถถูกบังคับให้เป็นสตริงข้อความได้ ตัวอย่างเช่น สูตรนี้จะแทรก NickName หากมีการระบุ หรือ FirstName หากไม่ระบุในคำทักทาย:
$"Welcome {Coalesce( NickName, FirstName )}, it's great to meet you!" )
หาก NickName ตั้งค่าเป็น "Joe" จากนั้นสูตรนี้จะสร้างสตริงข้อความ สวัสดี Joe ยินดีที่ได้พบคุณ หาก NickName เป็น ว่างเปล่า และ FirstName เป็น "Joseph" จากนั้นสูตรนี้จะสร้าง สวัสดี Joseph ยินดีที่ได้เจอคุณ แทน
การใช้ตัวแปรในสตริงสามารถรวมสตริงข้อความมาตรฐานในสูตรที่ฝังได้ ตัวอย่างเช่น หากไม่ได้ระบุ NickName หรือ FirstName เรายังคงระบุ "Friend" เป็นชื่อแทน:
$"Welcome {Coalesce( NickName, FirstName, "Friend" )}!"
การใช้ตัวแปรในสตริงสามารถวางซ้อนกันได้ พิจารณาตัวอย่างนี้โดยที่ชื่อ ชื่อ, ชื่อกลาง และ นามสกุล จะรวมกันเป็นคำทักทาย แม้ว่าหนึ่งหรือสองค่าเหล่านี้จะเป็น ว่างเปล่า จำนวนช่องว่างที่ถูกต้องจะอยู่ระหว่างส่วนชื่อ หากไม่ได้ระบุส่วนใดส่วนหนึ่ง การใช้ตัวแปรในสตริงภายในจะยุบเป็นสตริงว่าง และมีการแทนที่ด้วยฟังก์ชัน Coalesce ด้วย "Friend"
$"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!"
ชื่อ | ชื่อกลาง | นามสกุล | ผลลัพธ์ |
---|---|---|---|
John | Qunicy | Doe | Welcome John Quincy Doe! |
John | ว่างเปล่า | Doe | Welcome John Doe! |
ว่างเปล่า | ว่างเปล่า | Doe | Welcome Doe! |
ว่างเปล่า | ว่างเปล่า | ว่างเปล่า | Welcome Friend! |
ขึ้นบรรทัดใหม่
สตริงข้อความที่ฝังสามารถมีการขึ้นบรรทัดใหม่ได้ ตัวอย่างเช่น พิจารณาการตั้งค่าคุณสมบัติ Text ของตัวควบคุม Label ดังต่อไปนี้:
"Line 1
Line 2
Line 3"
สูตรข้างต้นส่งผลให้มีสามบรรทัดแสดงในตัวควบคุม label:
การขึ้นบรรทัดใหม่ยังได้รับการสนับสนุนด้วยการใช้ตัวแปรในสตริงดังที่แสดงด้านล่าง:
$"Line {1}
Line {1+1}
Line {1+1+1}"
สูตรข้างต้นให้ผลลัพธ์ที่เหมือนกัน:
ทรัพยากรรูปภาพและสื่อ
ผ่านเมนู ไฟล์ คุณสามารถเพิ่มไฟล์รูปภาพ วิดีโอ และเสียง เป็นทรัพยากรแอป ชื่อของไฟล์ที่นำเข้าจะกลายเป็นชื่อทรัพยากรในแอป ในกราฟิกนี้ โลโก้ Northwind Traders ซึ่งมีชื่อว่า nwindlogo ถูกเพิ่มลงในแอปแล้ว:
หากต้องการใช้ทรัพยากรนี้ในแอป ให้ระบุในคุณสมบัติ Image ของการควบคุม Image:
URIs สำหรับรูปภาพและสื่ออื่นๆ
คุณสามารถขุดลึกลงไปในตัวอย่างที่ผ่านมา โดยตั้งค่าคุณสมบัติ Text ของตัวควบคุม Label เป็น nwindlogo ป้ายกำกับแสดงสตริงข้อความ:
แอปพื้นที่ทำงานอ้างอิงภาพแต่ละภาพหรือไฟล์สื่ออื่นๆ ไม่ว่าจะอยู่ในคลาวด์หรือเพิ่มเป็นทรัพยากรแอป โดยสตริงข้อความ URI
ตัวอย่างเช่น คุณสมบัติ Image ของตัวควบคุมรูปภาพยอมรับ ไม่เพียงแต่ทรัพยากรแอปเท่านั้น แต่ยังลิงก์ไปยังรูปภาพบนเว็บ เช่น "https://northwindtraders.com/logo.jpg" คุณสมบัตินี้ยังยอมรับรูปภาพแบบอินไลน์ที่ใช้ data URI scheme เช่นในตัวอย่างนี้:
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAFAQMAAACtnVQoAAAABlBMVEUAAAB0J3UMNU6VAAAAAXRSTlMAQObYZgAAABRJREFUCNdjUGJgCGVg6GgAkkA2AA8/AffqCEBsAAAAAElFTkSuQmCC"
URI นั้นแสดงเพชรสีม่วงสองก้อนขนาดใหญ่ขึ้น:
คุณสามารถแสดงภาพล่าสุดที่ถ่ายไว้ใน การควบคุม Camera ถ้าคุณตั้งค่าคุณสมบัติ Image ของตัวควบคุมรูปภาพ เป็นคุณสมบัติ Photo ของการควบคุมกล้อง แอปถือภาพในหน่วยความจำและคุณสมบัติ Photo ของการควบคุมกล้อง ส่งกลับการอ้างอิง URI ไปยังภาพ ตัวอย่างเช่น คุณอาจถ่ายภาพ และคุณสมบัติของกล้อง Photo สามารถส่งคืนได้ "appres://blobmanager/7b12ffa2ea4547e5b3812cb1c7b0a2a0/1"
คุณใช้ URI เพื่ออ้างอิงรูปภาพหรือไฟล์สื่ออื่นที่เก็บไว้ในฐานข้อมูล ด้วยวิธีนี้ แอปจะไม่ดึงข้อมูลจริงจนกว่าจะต้องการจริงๆ ตัวอย่างเช่น ไฟล์แนบในตาราง Microsoft Dataverse อาจส่งคืน "appres://datasources/Contacts/table/..." ในตัวอย่างกล้อง คุณสามารถแสดงภาพนี้ได้โดยการตั้งค่าคุณสมบัติ Image ของตัวควบคุมรูปภาพสำหรับการอ้างอิงนี้ ซึ่งดึงข้อมูลไบนารี
เมื่อคุณบันทึกประเภทข้อมูลสื่อ เช่น รูปภาพ ไปยังฐานข้อมูล แอปจะส่งภาพหรือข้อมูลสื่อจริง ไม่ใช่การอ้างอิง URI
ขีดจำกัดของขนาด
ในฐานะที่เป็นสตริงข้อความและ URIs ชนิดข้อมูลเหล่านี้ไม่มีการจำกัดความยาวไว้ล่วงหน้า
ข้อมูลไบนารีที่อ้างอิงชนิดข้อมูลเหล่านี้ ยังไม่มีการจำกัดขนาดไว้ล่วงหน้า ตัวอย่างเช่น ภาพที่ถ่ายผ่านส่วนควบคุมกล้องที่อ้างอิงในขณะนี้ "appres://..." สามารถมีขนาดใหญ่และความละเอียดสูงเท่าที่กล้องของอุปกรณ์สามารถรวบรวม ความละเอียด อัตราเฟรม และคุณสมบัติอื่นๆ ของไฟล์สื่อไม่ได้ถูกจำกัดโดยชนิดข้อมูล แต่การควบคุมเฉพาะสำหรับการเล่นและการจับภาพสื่ออาจมีข้อจำกัดของตัวเอง
อย่างไรก็ตาม ขนาดข้อมูลทั้งหมดขึ้นอยู่กับจำนวนหน่วยความจำที่มีอยู่ในแอป เบราว์เซอร์ที่ทำงานบนคอมพิวเตอร์เดสก์ท็อปมักรองรับข้อมูลมากกว่า 100 เมกะไบต์ อย่างไรก็ตาม จำนวนหน่วยความจำที่มีอยู่ในอุปกรณ์ เช่น โทรศัพท์ อาจต่ำกว่าปกติ โดยทั่วไปอยู่ในช่วง 30-70 เมกะไบต์ ในการตรวจสอบว่าแอปของคุณจะทำงานภายในขีดจำกัดเหล่านี้หรือไม่ ให้ทดสอบสถานการณ์ทั่วไปในอุปกรณ์ทั้งหมดที่ควรใช้
วิธีปฏิบัติที่ดีที่สุด ให้เก็บข้อมูลไว้ในหน่วยความจำตราบเท่าที่จำเป็น อัปโหลดภาพไปยังฐานข้อมูลทันทีที่คุณทำได้; ดาวน์โหลดรูปภาพเฉพาะเมื่อผู้ใช้แอปร้องขอเท่านั้น
ตัวเลข
หมายเหตุ
Power Apps รองรับเฉพาะ Float วันนี้และเป็นชนิดของตัวเลขทั้งหมด ทศนิยม จะเพิ่มการสนับสนุนในเร็ว ๆ นี้
Power Fx รองรับตัวเลขสองประเภท: Decimal และ Float (พร้อมคำพ้องความหมาย ตัวเลข และ สกุลเงิน)
ทศนิยม เหมาะที่สุดสำหรับการคำนวณทางธุรกิจส่วนใหญ่ สามารถแสดงตัวเลขในฐาน 10 ได้อย่างแม่นยำ ซึ่งหมายความว่า 0.1
สามารถแสดงได้อย่างแม่นยำและจะไม่เกิดข้อผิดพลาดในการปัดเศษระหว่างการคำนวณ มีช่วงกว้างเพียงพอสำหรับความต้องการทางธุรกิจ สูงสุด 1028 พร้อมความแม่นยำสูงสุด 28 หลัก ทศนิยม เป็นชนิดข้อมูลตัวเลขเริ่มต้นสำหรับส่วนใหญ่ Power Fx โฮสต์ ใช้ถ้าเขียนแบบง่ายๆ 2*2
-
ลอย เหมาะที่สุดสำหรับการคำนวณทางวิทยาศาสตร์ สามารถแสดงตัวเลขในช่วงที่กว้างกว่ามาก ได้ถึง 10308 ความแม่นยำถูกจำกัดไว้ที่ทศนิยม 15 ตำแหน่ง และคณิตศาสตร์จะขึ้นอยู่กับฐาน 2 ดังนั้นจึงไม่สามารถแสดงค่าทศนิยมทั่วไปบางค่าได้อย่างแม่นยำ ลอย อีกทั้งยังมีประสิทธิภาพสูงกว่าและเป็นที่นิยมหากปัจจัยดังกล่าวและความแม่นยำไม่ใช่สิ่งสำคัญ
เลขทศนิยม
ชนิดข้อมูล Decimal มักใช้ชนิดข้อมูล ชนิดข้อมูลทศนิยม .NET โฮสต์บางแห่ง เช่น คอลัมน์สูตร Dataverse ที่ทำงานใน SQL Serer จะใช้ชนิดข้อมูลฐานสิบของ SQL Server
ทศนิยม ทำคณิตศาสตร์แบบที่คุณเรียนในโรงเรียนโดยใช้เลขฐาน 10 นั่นเป็นสิ่งสำคัญมากที่จะต้องหลีกเลี่ยงข้อผิดพลาดในการปัดเศษจากความแตกต่างเล็กๆ น้อยๆ ที่สามารถสะสมได้เมื่อใช้คณิตศาสตร์ฐาน 2 (ตามที่ใช้โดย Float)
ช่วงนี้มีตั้งแต่ค่าบวก 79,228,162,514,264,337,593,543,950,335 ไปจนถึงค่าลบ 79,228,162,514,264,337,593,543,950,335 ตัวคั่นทศนิยมสามารถวางไว้ที่ใดก็ได้ภายในตัวเลขเหล่านี้ ซึ่งให้ความแม่นยำสูงสุด 28 หลัก และยังคงแสดงได้อย่างแม่นยำ ตัวอย่างเช่น 79,228,162,514,264.337593543950335 สามารถแสดงได้เหมือนกันทุกประการ เช่นเดียวกับ 7.9228162514264337593543950335
จำนวนจุดทศนิยมลอยตัว
ชนิดข้อมูล Float หรือที่เรียกว่า หมายเลข หรือ สกุลเงิน ใช้มาตรฐานจุดทศนิยมลอยตัวที่เที่ยงตรงแม่นยำสองเท่าของ IEEE 754 มาตรฐานนี้ให้ตัวเลขจำนวนมากที่ใช้งานได้ตั้งแต่ –1.79769 x 10308 ถึง 1.79769 x 10308 ค่าที่น้อยที่สุดที่สามารถแทนได้คือ 5 x 10-324
ลอย สามารถแสดงจำนวนเต็ม (หรือจำนวนเต็ม) ระหว่าง –9,007,199,254,740,991 (–(2) ได้อย่างแน่นอน 53 – 1)) และ 9,007,199,254,740,991 (2 53 – 1) รวม. ช่วงนี้มีขนาดใหญ่กว่าชนิดข้อมูลจำนวนเต็มแบบ 32 บิต (หรือ 4 ไบต์) ที่ฐานข้อมูลใช้โดยทั่วไป อย่างไรก็ตาม แอปพื้นที่ทำงานไม่สามารถแสดงชนิดข้อมูลจำนวนเต็ม 64 บิต (หรือ 8 ไบต์) คุณอาจต้องการจัดเก็บหมายเลขในฟิลด์ข้อความหรือใช้คอลัมน์การคำนวณเพื่อทำสำเนาของตัวเลขในฟิลด์ข้อความ เพื่อให้แมปเข้ากับชนิดข้อมูล ข้อความ ในแอปพื้นที่ทำงาน ในลักษณะนี้ คุณสามารถถือ แสดง และป้อนค่าเหล่านี้ รวมทั้งเปรียบเทียบกับค่าเหล่านั้นเพื่อพิจารณาว่ามีค่าเท่ากันหรือไม่ อย่างไรก็ตามคุณไม่สามารถคำนวณตัวเลขในฟอร์มนี้ได้
เลขทศนิยมเป็นค่าประมาณ ดังนั้นบางครั้งก็สามารถให้ผลลัพธ์ที่ไม่คาดคิดกับตัวอย่างเอกสารมากมาย คุณอาจคาดหวังสูตร 55 / 100 * 100 เพื่อส่งคืน 55 และ (55 / 100 * 100) - 55 เพื่อกลับเป็นศูนย์อย่างแน่นอน อย่างไรก็ตา มสูตรหลังจะคืนค่า 7.1054 x 10-15 ซึ่งเล็กมาก แต่ไม่เป็นศูนย์ ความแตกต่างเล็กๆ น้อยๆ นั้นไม่ได้ทำให้เกิดปัญหาแต่อย่างใด และแอปจะปัดเศษออกเมื่อแสดงผลลัพธ์ อย่างไรก็ตาม ความแตกต่างเล็กน้อยสามารถรวมกันในการคำนวณครั้งต่อไปและดูเหมือนจะให้คำตอบที่ผิด
ระบบฐานข้อมูลมักจะเก็บสกุลเงินและทำการคำนวณโดยใช้คณิตศาสตร์ทศนิยม ซึ่งมีช่วงที่เล็กลง แต่ควบคุมความแม่นยำได้มากขึ้น ตามค่าเริ่มต้น แอปพื้นที่ทำงานจะแมปสกุลเงินเในและนอกจากค่าทศนิยม ดังนั้น ผลลัพธ์อาจแตกต่างจากการคำนวณที่กระทำในรูปแบบฐานสิบแบบเนทีฟ หากความแตกต่างประเภทนี้จะทำให้เกิดปัญหา คุณอาจต้องการทำงานกับค่าเหล่านี้เป็น ข้อความ เช่นเดียวกับที่คุณอาจต้องการด้วยจำนวนเต็มขนาดใหญ่ที่อธิบายไว้ก่อนหน้าในส่วนนี้
ค่าเริ่มต้นและการแปลง
หมายเหตุ
Power Apps รองรับเฉพาะ Float วันนี้และเป็นชนิดของตัวเลขทั้งหมด ทศนิยม จะเพิ่มการสนับสนุนในเร็ว ๆ นี้
โฮสต์ Power Fx ส่วนใหญ่ใช้ Decimal ตามค่าเริ่มต้น สิ่งนี้ส่งผลกระทบ:
- ตัวเลขสัญพจน์ในสูตร ตัวเลข
1.234
จะถูกตีความว่าเป็นค่า Decimal ตัวอย่างเช่น สูตร1.234 * 2
จะตีความ1.234
และ2
เป็น Decimal และส่งกลับค่าผลลัพธ์ Decimal - ฟังก์ชัน Value
Value( "1.234" )
จะกลับคืนมา ทศนิยม ค่า. ตัวอย่างเช่น สูตรValue( "1.234" ) * 2
ฟังก์ชัน Value จะตีความเนื้อหาของสตริงข้อความ"1.234"
เป็น Decimal
หากต้องการทำงานกับค่า Float จะใช้ฟังก์ชัน Float หากขยายตัวอย่างข้างต้น Float( 1.234 )
จะแปลง Float1.234
เป็น Float ลอย ยังสามารถนำมาใช้ทดแทน ค่า เพื่อแปลงสตริงที่มีเลขทศนิยมลอยตัว เช่น Float( "1.234" )
ถึง ลอย ค่าซึ่งจำเป็นหากไม่สามารถแสดงตัวเลขเป็นค่า ทศนิยม -
โดยสรุป:
การใช้ | ทศนิยม | ลอย |
---|---|---|
ตัวเลขสัญพจน์ในสูตร | 1.234 |
Float( 1.234 ) Float( "1.234" ) |
การแปลงจากสตริงข้อความ | Value( "1.234" ) Decimal( "1.234" ) |
Float( "1.234" ) |
การแปลงระหว่างชนิดตัวเลข | Decimal( float ) |
Float( decimal ) |
การแปลงเป็นสตริงข้อความ | Text( decimal ) |
Text( float ) |
การผสมชนิดตัวเลข
ลอย และ ทศนิยม สามารถผสมค่าต่างๆ ได้อย่างอิสระ เมื่อผสมกัน ค่า Decimal จะถูกแปลงเป็นค่า Float เนื่องจากมีช่วงที่กว้างกว่า เนื่องจากอาจส่งผลให้สูญเสียความแม่นยำได้ จึงเป็นสิ่งสำคัญที่จะไม่ผสมทั้งสองอย่างโดยไม่จำเป็น เนื่องจาก Decimal เป็นชนิดข้อมูลสัญพจน์เริ่มต้น และฟังก์ชันตัวเลขส่วนใหญ่จะคงประเภทไว้ จึงค่อนข้างง่ายที่จะหลีกเลี่ยงการย้ายไปที่ Float โดยไม่ต้องการ
ตัวอย่างเช่น พิจารณาการคำนวณต่อไปนี้โดยใช้ pac power-fx repl
หลังจากติดตั้ง Power Platform CLI เนื่องจากตัวเลขทั้งสองเป็น Decimal การคำนวณจึงเสร็จสิ้นใน Decimal และผลลัพธ์ยังคงความแม่นยำครบถ้วน:
>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002
หากตัวถูกดำเนินการตัวที่สองเปลี่ยนเป็น Float แทน การคำนวณทั้งหมดจะดำเนินการใน Float และค่าเศษส่วนเล็กน้อยจะหายไป:
>> 1.0000000000000000000000000001 * Float(2)
2
วันที่ เวลา และ วันที่เวลา
โซนเวลา
ค่าวันที่/เวลา อยู่ในหมวดหมู่เหล่านี้:
- ผู้ใช้ในพื้นที่ :ค่าเหล่านี้จะถูกเก็บไว้ใน UTC (เวลาสากลเชิงพิกัด) แต่เขตเวลาของผู้ใช้แอปส่งผลต่อวิธีที่แอปแสดงค่าเหล่านี้และวิธีที่ผู้ใช้แอประบุค่าเหล่านี้ ตัวอย่างเช่ นช่วงเวลาเดียวกันนั้นปรากฏให้ผู้ใช้ในแคนาดาแตกต่างจากผู้ใช้ในญี่ปุ่น
- อิสระจากเขตเวลา :แอปจะแสดงค่าเหล่านี้ในลักษณะเดียวกัน และผู้ใช้แอปจะระบุในลักษณะเดียวกัน โดยไม่คำนึงถึงโซนเวลา ช่วงเวลาเดียวกันปรากฏในรูปแบบเดียวกันกับผู้ใช้ในแคนาดาเหมือนกับผู้ใช้ในญี่ปุ่น ผู้เขียนแอปที่ไม่คาดว่าแอปจะทำงานในเขตเวลาที่ต่างกันให้ใช้ค่าเหล่านี้
ตารางนี้แสดงตัวอย่าง:
ชนิดวันที่/เวลา | ค่าที่เก็บไว้ในฐานข้อมูล | ค่าที่แสดงและป้อน 7 ชั่วโมงทางตะวันตกของ UTC | ค่าที่แสดงและป้อน 4 ชั่วโมงทางตะวันออกของ UTC |
---|---|---|---|
ผู้ใช้ในพื้นที่ | วันอาทิตย์พฤษภาคม192019 4:00 AM |
วันเสาร์พฤษภาคม182019 9:00 PM |
วันอาทิตย์พฤษภาคม192019 8:00 AM |
อิสระจากเขตเวลา | วันอาทิตย์พฤษภาคม192019 4:00 AM |
วันอาทิตย์พฤษภาคม192019 4:00 AM |
วันอาทิตย์พฤษภาคม192019 4:00 AM |
สำหรับวันที่/เวลา เวลาท้องถิ่นของผู้ใช้ แอปพื้นที่ทำงานใช้เขตเวลาของเบราว์เซอร์หรืออุปกรณ์ แต่แอปแบบจำลองใช้การตั้งค่าของผู้ใช้ ใน Dataverse โดยทั่วไปการตั้งค่าเหล่านี้จะตรงกัน แต่ผลลัพธ์จะแตกต่างกันหากการตั้งค่าเหล่านี้แตกต่างกัน
ใช้ฟังก์ชั่น DateAdd และ TimeZoneInformation ในการแปลงเวลาท้องถิ่นเป็น UTC และกลับมาอีกครั้ง ดูตัวอย่างในตอนท้ายของเอกสารประกอบสำหรับฟังก์ชั่นเหล่านี้
ตัวเลขเทียบเท่า
แอปพื้นที่ทำงานยึดถือและคำนวณค่าวันที่/เวลาทั้งหมดไม่ว่าจะเป็น เวลาท้องถิ่นของผู้ใช้ หรือ เขตเวลาอิสระ ใน UTC แอปแปลค่าตามเขตเวลาของผู้ใช้แอป เมื่อแสดงและเมื่อผู้ใช้แอประบุ
เมื่อแอปพื้นที่ทำงานอ่านค่า เขตเวลาอิสระ จากแหล่งข้อมูลหรือเขียนค่าดังกล่าวไปยังแหล่งข้อมูล แอปจะปรับค่าโดยอัตโนมัติเพื่อชดเชยโซนเวลาของผู้ใช้แอป แอปจะถือว่าค่าเป็นค่า UTC สอดคล้องกับค่าวันที่/เวลาอื่นๆ ทั้งหมดในแอป เนื่องจากการชดเชยนี้ ค่า เขตเวลาอิสระ ต้นฉบับจะปรากฏขึ้นเมื่อแอปปรับค่า UTC สำหรับเขตเวลาของผู้ใช้แอป
คุณสามารถสังเกตพฤติกรรมนี้อย่างใกล้ชิดยิ่งขึ้น โดยใช้ฟังก์ชั่น Value ในการเข้าถึงค่าตัวเลขพื้นฐานสำหรับค่าวันที่/เวลา ฟังก์ชันนี้ส่งคืนค่าวันที่/เวลาเป็นจำนวนมิลลิวินาที นับตั้งแต่วันที่ 1 มกราคม 1970 00:00:00.000 UTC
เนื่องจากทุกค่าวันที่/เวลา ถูกเก็บไว้ใน UTC สูตร Value( Date( 1970, 1, 1 ) ) จะไม่กลับมาเป็นศูนย์ในส่วนใหญ่ของโลกเพราะฟังก์ชัน Date ส่งคืนวันที่ใน UTC ตัวอย่างเช่น สูตรจะส่งคืน 28,800,000 ในเขตเวลาที่ชดเชยจาก UTC ภายในแปดชั่วโมง ตัวเลขนั้นแสดงถึงจำนวนมิลลิวินาทีในแปดชั่วโมง
กลับไปที่ตัวอย่างของเราจากด้านบน:
ชนิดวันที่/เวลา | ค่าที่เก็บไว้ในฐานข้อมูล | ค่าที่แสดงและป้อน 7 ชั่วโมงทางตะวันตกของ UTC | ค่า ฟังก์ชันส่งคืน |
---|---|---|---|
ผู้ใช้ในพื้นที่ | วันอาทิตย์พฤษภาคม192019 4:00 AM |
วันเสาร์พฤษภาคม182019 9:00 PM |
1,558,238,400,000 (วันอาทิตย์พฤษภาคม192019 4:00 AM UTC) |
อิสระจากเขตเวลา | วันอาทิตย์พฤษภาคม192019 4:00 AM |
วันอาทิตย์พฤษภาคม192019 4:00 AM |
1,558,263,600,000 (วันอาทิตย์พฤษภาคม192019 11:00 AM UTC) |
การแปลงเวลา Unix
เวลา Unix แสดงจำนวนวินาทีตั้งแต่วันที่ 1 มกราคม 1970 00:00:00 UTC เนื่องจากแอปพื้นที่ทำงานใช้มิลลิวินาทีแทนที่จะเป็นวินาที คุณสามารถแปลงระหว่างสองรายการด้วยการคูณหรือหารด้วย 1,000
ตัวอย่างเช่น เวลา Unix แสดง 9 กันยายน 2001 เวลา 01:46:40 UTC เป็น 1,000,000,000 หากต้องการแสดงค่าวันที่/เวลาในแอปพื้นที่ทำงาน ให้คูณตัวเลขนั้นด้วย 1,000 เพื่อแปลงเป็นมิลลิวินาที จากนั้นใช้ในฟังก์ชัน Text สูตร ข้อความ(1000000000 * 1,000, DateTimeFormat.UTC) ส่งคืนสตริง 2001-09-09T01:46:40.000Z
อย่างไรก็ตาม ฟังก์ชันนั้นจะคืนค่า วันเสาร์ที่ 8 กันยายน 2001 18:46:40 ถ้าคุณใช้รูปแบบ DateTimeFormat.LongDateTime24 ในเขตเวลาที่ชดเชยเวลา -7 ชั่วโมงจาก UTC (7 ชั่วโมงทางตะวันตกของ UTC) ผลลัพธ์นี้แสดงให้เห็นว่าค่า วันที่เวลา อย่างถูกต้องขึ้นอยู่กับโซนเวลาท้องถิ่น
หากต้องการแปลงเป็นเวลา Unix ให้หารผลลัพธ์จาก ค่า ด้วย 1,000:
RoundDown( ค่า( UnixTime ) / 1000, 0 )
หากคุณต้องการเวลา Unix ในค่า วันที่ สำหรับการคำนวณเพิ่มเติมหรือแสดงผลภายใน Power Apps ใช้สูตรนี้:
DateAdd( วันที่( 1970,1,1 ), UnixTime, วินาที )
SQL Server
SQL Server มี วันที่เวลา, วันที่เวลา2 และประเภทข้อมูลวันที่/เวลาอื่นๆ ที่ไม่มีเขตเวลาชดเชยและไม่ได้ระบุเขตเวลาที่พวกเขาอยู่ แอปพื้นที่ทำงานถือว่าค่าเหล่านี้ถูกจัดเก็บใน UTC และถือว่าเป็น เวลาท้องถิ่นของผู้ใช้ หากค่านั้นมีความหมายว่าเป็นเขตเวลาอิสระให้แก้ไขการแปล UTC โดยใช้ฟังก์ชัน TimeZoneOffset
แอปพื้นที่ทำงานใช้ข้อมูลเขตเวลาที่รวมอยู่ในฟิลด์ datetimeoffset เมื่อแปลงค่าเป็นตัวแทน UTC ภายในของแอป แอปใช้ UTC เป็นเขตเวลาเสมอ (ออฟเซ็ตเขตเวลาเป็นศูนย์) เมื่อเขียนข้อมูล
แอปพื้นที่ทำงานอ่านและเขียนค่าของชนิดข้อมูล เวลา ใน SQL Server เป็นสตริงข้อความใน รูปแบบระยะเวลา ISO 8601 ตัวอย่างเช่น คุณต้องแยกวิเคราะห์รูปแบบสตริงนี้และใช้ฟังก์ชั่น Time ในการแปลงสตริงข้อความ "PT2H1M39S" ไปยังค่า เวลา:
With(
Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
Time( Value( hours ), Value( minutes ), Value( seconds ) )
)
// Result: 2:01 AM (as shown in a label control, use the Text function to see the seconds)
การผสมข้อมูลวันที่และเวลา
วันที่ - เวลา, และ วันที่เวลา มีชื่อแตกต่างกัน แต่ทั้งหมดมีข้อมูลเกี่ยวกับวันที่และเวลาเหมือนกัน
ค่า วันที่ สามารถรวมข้อมูลเวลา ซึ่งมักจะเป็นเที่ยงคืน ค่า เวลา สามารถนำข้อมูลวันที่ ซึ่งมักจะเป็น 1 มกราคม 1970 Dataverse เก็บข้อมูลเวลาด้วยฟิลด์ วันที่เท่านั้น แต่จะแสดงเฉพาะข้อมูลวันที่ตามค่าเริ่มต้น ในทำนองเดียวกัน บางครั้งแอปพื้นที่ทำงานจะแยกความแตกต่างระหว่างชนิดข้อมูลเหล่านี้ เพื่อกำหนดรูปแบบและตัวควบคุมเริ่มต้น
ไม่แนะนำให้เพิ่มและลบค่าวันที่และเวลาโดยตรงเนื่องจากเขตเวลาและการแปลงอื่นๆ อาจทำให้เกิดผลลัพธ์ที่สับสน ทั้งใช้ฟังก์ชั่น Value ในการแปลงค่าวันที่/เวลาเป็นมิลลิวินาทีก่อน และคำนึงถึงเขตเวลาของผู้ใช้แอป หรือใช้ฟังก์ชั่น DateAdd และ DateDiff เพื่อเพิ่มหรือลบจากหนึ่งในค่าเหล่านี้
ตัวเลือกและใช่/ไม่ใช่
ตัวเลือกและชนิดข้อมูลสองตัวเลือกให้สองตัวเลือกขึ้นไปสำหรับผู้ใช้แอปที่จะเลือก ตัวอย่างเช่น ตัวเลือก สถานะใบสั่ง อาจเสนอตัวเลือก ใหม่ จัดส่งแล้ว ออกใบแจ้งหนี้ และ ปิด ชนิดข้อมูลสองตัวเลือกมีเพียงสองตัวเลือก
ชนิดข้อมูลทั้งสองนี้แสดงป้ายกำกับของพวกเขาในบริบทสตริงข้อความ ตัวอย่างเช่น ตัวควบคุม label แสดงตัวเลือกสถานะใบสั่งอย่างใดอย่างหนึ่งหากตัวควบคุมของคุณสมบัติ Text ถูกกำหนดเป็นสูตรที่อ้างอิงตัวเลือกนั้น ป้ายกำกับตัวเลือกอาจมีการแปลสำหรับผู้ใช้แอปในสถานที่ต่างกัน
เมื่อผู้ใช้แอปเลือกตัวเลือกและบันทึกการเปลี่ยนแปลงนั้น แอปจะส่งข้อมูลไปยังฐานข้อมูลซึ่งเก็บข้อมูลนั้นไว้ในรูปแบบที่ไม่ขึ้นกับภาษา ตัวเลือกที่เลือกจะถูกส่งและจัดเก็บเป็นตัวเลข และตัวเลือกในชนิดข้อมูลสองตัวเลือกจะถูกส่งและจัดเก็บเป็นค่าแบบบูลีน
ป้ายกำกับมีไว้เพื่อการแสดงผลเท่านั้น คุณไม่สามารถทำการเปรียบเทียบโดยตรงกับป้ายกำกับได้เนื่องจากเป็นภาษาเฉพาะ แต่ละตัวเลือกมีการแจงนับที่ทำงานกับตัวเลขหรือค่าบูลีนที่แฝงอยู่แทน ตัวอย่างเช่น คุณไม่สามารถใช้สูตรนี้ได้:
If( ThisItem.OrderStatus = "Active", ...
แต่คุณสามารถใช้สูตรนี้:
If( ThisItem.OrderStatus = OrderStatus.Active, ...
สำหรับตัวเลือกส่วนกลาง (ซึ่งใช้ตารางร่วมกัน) ชื่อของชุดตัวเลือกจะตรงกับชื่อของตัวเลือกส่วนกลาง สำหรับตัวเลือกในเครื่อง (ซึ่งกำหนดขอบเขตไว้ที่ตาราง) ชื่ออาจมีชื่อของตาราง ลักษณะการทำงานนี้หลีกเลี่ยงความขัดแย้งถ้าหลายตารางมีตัวเลือกที่มีชื่อเดียวกัน ตัวอย่างเช่น ตาราง บัญชี อาจมีตัวเลือก OrderStatus และชื่อของมันอาจจะเป็น OrderStatus (บัญชี) ชื่อนั้นมีช่องว่างและวงเล็บอย่างน้อยหนึ่งรายการ ดังนั้นคุณต้องล้อมรอบด้วยเครื่องหมายอัญประกาศเดี่ยวถ้าคุณอ้างอิงในสูตร
นอกจากนี้ ค่าสองตัวเลือกยังสามารถทำงานเป็นค่าบูลีน ตัวอย่างเช่น ค่าสองตัวเลือกชื่อ TaxStatus อาจมีป้ายกำกับ ต้องเสียภาษี และ ที่ไม่ต้องเสียภาษี ซึ่งสอดคล้องกับ จริง และ เท็จ ตามลำดับ เมื่อต้องการแสดงให้เห็น คุณสามารถใช้สูตรนี้ได้:
If( ThisItem.Taxable = TaxStatus.Taxable, ...
คุณยังสามารถใช้สูตรเทียบเท่านี้ได้:
If( ThisItem.Taxable, ...