ชนิดข้อมูล
ข้อมูลไหลผ่าน Power Fx ในค่าเล็กๆ ที่ไม่ต่อเนื่องเหมือนกับเซลล์ของสเปรดชีต ตัวอย่างเช่น ข้อมูลในฟิลด์ วันเกิด และฟิลด์ วันครบรอบ ทั้งงสองจะไหลผ่านเป็นค่า วันที่ ที่มีปี เดือน และวัน Power Fx วิธีจัดรูปแบบค่าเหล่านี้ จำกัดข้อมูลป้อนเข้าให้เหมาะสมกับแต่ละค่าและแชร์ค่ากับฐานข้อมูล วันเกิดแตกต่างจากวันครบรอบ แต่ระบบจัดการพวกเขาในลักษณะเดียวกัน ในกรณีนี้ วันที่ เป็นตัวอย่างของ ชนิดข้อมูล
บทความนี้ให้รายละเอียดสำหรับชนิดข้อมูลที่ Power Fx รองรับ เมื่อ Power Fx เชื่อมต่อกับแหล่งข้อมูลภายนอก ชนิดข้อมูลแต่ละชนิดในแหล่งที่มานั้นจะถูกแมปกับชนิดข้อมูลใน Power Fx
ชนิดข้อมูล | Description | ตัวอย่าง |
---|---|---|
แบบบูลีน | ค่า จริง หรือ เท็จ สามารถใช้โดยตรงใน IfFilter และฟังก์ชั่นอื่นๆ โดยไม่มีการเปรียบเทียบ | จริง |
ชุดตัวเลือก | ตัวเลือกจากชุดของตัวเลือกที่สำรองไว้โดยตัวเลข ชนิดข้อมูลนี้รวมป้ายกำกับข้อความที่แปลได้แบบท้องถิ่นพร้อมค่าตัวเลข ป้ายกำกับจะปรากฏในแอป และค่าตัวเลขจะถูกจัดเก็บและใช้สำหรับการเปรียบเทียบ ชนิดข้อมูลนี้ได้รับการสนับสนุนโดยฟังก์ชัน Type หากมีการใช้อินสแตนซ์ของฟิลด์ ตัวเลือก ตามชื่อ | ThisItem.OrderStatus |
สี | ข้อกำหนดสี รวมถึงช่องทางอัลฟา |
Color.Red ColorValue( "#102030" ) RGBA( 255, 128, 0, 0.5 ) |
สกุลเงิน | ค่าสกุลเงินที่จัดเก็บในหมายเลขทศนิยม ค่าสกุลเงินเหมือนกับค่าตัวเลขพร้อมตัวเลือกการจัดรูปแบบสกุลเงิน ชนิดข้อมูล สกุลเงิน ไม่ได้รับการสนับสนุนโดยฟังก์ชัน Type |
123 4.56 |
วันที่ | วันที่ที่ไม่มีเวลา ในเขตเวลาของผู้ใช้แอป | Date( 2019, 5, 16 ) |
วันที่เวลา | วันที่ที่มีเวลา ในเขตเวลาของผู้ใช้แอป | DateTimeValue( "May 16, 2019 1:23:09 PM" ) |
Decimal | ตัวเลขที่มีความแม่นยำสูง การดำเนินการฐาน 10 และช่วงที่จำกัด |
123 Decimal("1.2345") |
Float | ตัวเลขที่มีความแม่นยำมาตรฐาน การดำเนินการฐาน 2 และช่วงที่กว้าง |
123 8.903e121 1.234e-200 |
GUID | รหัสตัวระบุที่ไม่ซ้ำแบบส่วนกลาง |
GUID() GUID( "123e4567-e89b-12d3-a456-426655440000" ) |
ไฮเปอร์ลิงก์ | สตริงข้อความที่มีไฮเปอร์ลิงก์ | "https://powerapps.microsoft.com" |
รูปภาพ | สตริงข้อความ รหัสเฉพาะของทรัพยากรแบบสากล (URI) ไปยังรูปภาพในรูปแบบ .jpeg, .png, .svg, .gif หรือรูปแบบทั่วไปอื่นๆ ของเว็บ ชนิดข้อมูล รูปภาพ ไม่ได้รับการสนับสนุนโดยฟังก์ชัน Type |
MyImage เพิ่มเป็นทรัพยากรแอป "https://northwindtraders.com/logo.jpg" "appres://blobmanager/7b12ffa2..." |
สื่อ | สตริงข้อความ URI สำหรับการบันทึกวิดีโอหรือเสียง ชนิดข้อมูล สื่อ ไม่ได้รับการสนับสนุนโดยฟังก์ชัน Type |
MyVideo เพิ่มเป็นทรัพยากรแอป "https://northwindtraders.com/intro.mp4" "appres://blobmanager/3ba411c..." |
หมายเลข | นามแฝงสำหรับ Decimal (โฮสต์ Power Fx ส่วนใหญ่) หรือ Float (แอปพื้นที่ทำงาน) หากสามารถใช้ตัวเลขที่หลากหลายสำหรับสถานการณ์ที่กำหนด ให้ใช้ ตัวเลข เพื่อความเข้ากันได้สูงสุด |
123 0.0123 1e4 |
บันทึก | เรกคอร์ดของค่าข้อมูล ชนิดข้อมูลผสมนี้มีอินสแตนซ์ของชนิดข้อมูลอื่นๆ ที่ระบุไว้ในหัวข้อนี้ ข้อมูลเพิ่มเติม: การทำงานกับตาราง ชนิดข้อมูลนี้ได้รับการสนับสนุนโดยฟังก์ชัน Type หากมีการใช้อินสแตนซ์ของ เรกคอร์ด |
{ บริษัท: "Northwind Traders", พนักงาน: 35, NonProfit: เท็จ} |
บันทึกการอ้างอิง | การอ้างอิงไปยังเรกคอร์ดในตาราง การอ้างอิงดังกล่าวมักใช้กับการค้นหาโพลีมอร์ฟิค ข้อมูลเพิ่มเติม: การทำงานกับการอ้างอิง ชนิดข้อมูลนี้ไม่ได้รับการสนับสนุนโดยฟังก์ชัน Type | First(Accounts).Owner |
ตาราง | ตารางของเรกคอร์ด เรกคอร์ดทั้งหมดจะต้องมีชื่อเดียวกันสำหรับฟิลด์ที่มีชนิดข้อมูลเดียวกัน และฟิลด์ที่ละเว้นจะถือเป็น ว่างเปล่า ชนิดข้อมูลผสมนี้มีอินสแตนซ์ของชนิดข้อมูลอื่นๆ ที่ระบุไว้ในหัวข้อนี้ ข้อมูลเพิ่มเติม: การทำงานกับตาราง ชนิดข้อมูลนี้ได้รับการสนับสนุนโดยฟังก์ชัน Type หากมีการใช้อินสแตนซ์ของ ตาราง |
Table({FirstName: "Sidney", LastName: "Higa" }, { FirstName: "Nancy", LastName: "Anderson" } ) |
ข้อความ | สตริงของข้อความ Unicode | "Hello, World" |
เวลา | เวลาที่ไม่มีวันที่ ในเขตเวลาของผู้ใช้แอป | เวลา( 11, 23, 45 ) |
Untyped | ออบเจ็กต์ชนิดที่ไม่ได้ประกาศ ออบเจ็กต์พื้นฐานสามารถเป็นชนิดที่มีอยู่และสามารถแปลงเป็นชนิดที่เข้ากันได้โดยใช้ฟังก์ชันต่างๆ เช่น Boolean(), Value(), Table() ฯลฯ สำหรับข้อมูลเพิ่มเติม โปรดดู ออบเจ็กต์ไม่ระบุชนิด และ การทำงานกับ JSON | ParseJSON("{ ""ฟิลด์"" : 1234 }").Field |
โมฆะ | ใช้โดยฟังก์ชันที่ผู้ใช้กำหนดพฤติกรรมเท่านั้น ซึ่งบ่งชี้ว่าฟังก์ชันไม่มีประเภทการส่งคืน ชนิดข้อมูลนี้ไม่ได้รับการสนับสนุนโดยฟังก์ชัน Type แม้ว่าฟังก์ชันจะไม่มีชนิดหรือค่าการส่งคืน แต่ก็สามารถส่งคืนข้อผิดพลาดได้เสมอ | Hi(): Void = { Notify( "Hello!" ) } |
ใช่/ไม่ใช่ | ตัวเลือกจากชุดของสองตัวเลือก ที่สำรองไว้โดยค่าบูลีน ชนิดข้อมูลนี้รวมป้ายกำกับข้อความที่แปลได้แบบท้องถิ่นพร้อมค่าบูลีน ป้ายกำกับจะปรากฏในแอป และค่าบูลีนจะถูกจัดเก็บและใช้สำหรับการเปรียบเทียบ ชนิดข้อมูลนี้ได้รับการสนับสนุนโดยฟังก์ชัน Type หากมีการใช้อินสแตนซ์ของฟิลด์ ใช่/ไม่ ตามชื่อ | ThisItem.Taxable |
ชนิดข้อมูลเหล่านี้จำนวนมากมีความคล้ายคลึงกันและมีการแสดงที่เหมือนกัน เช่น ฟิลด์ ไฮเปอร์ลิงก์ ที่ถูกถือว่าเป็น ข้อความ ชนิดข้อมูลเพิ่มเติมให้ประสบการณ์เริ่มต้นที่ดีขึ้นในฟอร์มและการควบคุมอื่นๆ
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 วันนี้และเป็นชนิดของตัวเลขทั้งหมด การรองรับ Decimal จะถูกเพิ่มในเร็วๆ นี้
Power Fx รองรับตัวเลขสองประเภท: Decimal และ Float (พร้อมคำพ้องความหมาย ตัวเลข และ สกุลเงิน)
Decimal เหมาะที่สุดสำหรับการคำนวณทางธุรกิจส่วนใหญ่ โดยสามารถแสดงตัวเลขในฐาน 10 ได้อย่างแม่นยำ ซึ่งหมายความว่า 0.1
สามารถแสดงได้อย่างแม่นยำและจะหลีกเลี่ยงข้อผิดพลาดในการปัดเศษระหว่างการคำนวณ มีช่วงกว้างเพียงพอสำหรับความต้องการทางธุรกิจ สูงสุด 1028 พร้อมความแม่นยำสูงสุด 28 หลัก
Decimal เป็นชนิดข้อมูลตัวเลขเริ่มต้นสำหรับโฮสต์ Power Fx ส่วนใหญ่ ซึ่งใช้เมื่อมีการเขียน 2*2
Float เหมาะที่สุดสำหรับการคำนวณทางวิทยาศาสตร์ โดยสามารถแสดงตัวเลขในช่วงที่ใหญ่ขึ้นได้ถึง 10308 ความแม่นยำถูกจำกัดไว้ที่ทศนิยม 15 ตำแหน่ง และคณิตศาสตร์จะขึ้นอยู่กับฐาน 2 ดังนั้นจึงไม่สามารถแสดงค่าทศนิยมทั่วไปบางค่าได้อย่างแม่นยำ Float ยังมีประสิทธิภาพที่สูงกว่าและเป็นที่นิยมหากนั่นคือปัจจัยและความแม่นยำไม่สำคัญ
เลขทศนิยม
ชนิดข้อมูล Decimal มักใช้ชนิดข้อมูล ชนิดข้อมูลทศนิยม .NET โฮสต์บางแห่ง เช่น คอลัมน์สูตร Dataverse ที่ทำงานใน SQL Serer จะใช้ชนิดข้อมูลฐานสิบของ SQL Server
Decimal ทำการคำนวณแบบที่คุณเรียนรู้ในโรงเรียน โดยใช้เลขฐาน 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
Float สามารถแทนจำนวนทั้งหมด (หรือจำนวนเต็ม) ระหว่าง –9,007,199,254,740,991 (–(253 – 1)) และ 9,007,199,254,740,991 (253 – 1), แบบรวม ช่วงนี้มีขนาดใหญ่กว่าชนิดข้อมูลจำนวนเต็มแบบ 32 บิต (หรือ 4 ไบต์) ที่ฐานข้อมูลใช้โดยทั่วไป อย่างไรก็ตาม แอปพื้นที่ทำงานไม่สามารถแสดงชนิดข้อมูลจำนวนเต็ม 64 บิต (หรือ 8 ไบต์) คุณอาจต้องการจัดเก็บหมายเลขในฟิลด์ข้อความหรือใช้คอลัมน์การคำนวณเพื่อทำสำเนาของตัวเลขในฟิลด์ข้อความ เพื่อให้แมปเข้ากับชนิดข้อมูล ข้อความ ในแอปพื้นที่ทำงาน ด้วยวิธีนี้ คุณสามารถเก็บ แสดง และป้อนค่าเหล่านี้ และเปรียบเทียบค่าเหล่านี้เพื่อพิจารณาว่าเท่ากันหรือไม่ อย่างไรก็ตาม คุณไม่สามารถทำการคำนวณตัวเลขในฟอร์มนี้ได้
เลขทศนิยมเป็นค่าประมาณ ดังนั้นบางครั้งก็สามารถให้ผลลัพธ์ที่ไม่คาดคิดกับตัวอย่างเอกสารมากมาย คุณอาจคาดหวังสูตร 55 / 100 * 100 เพื่อส่งคืน 55 และ (55 / 100 * 100) - 55 เพื่อกลับเป็นศูนย์อย่างแน่นอน อย่างไรก็ตา มสูตรหลังจะคืนค่า 7.1054 x 10-15 ซึ่งเล็กมาก แต่ไม่เป็นศูนย์ ความแตกต่างเล็กๆ น้อยๆ นั้นไม่ได้ทำให้เกิดปัญหาแต่อย่างใด และแอปจะปัดเศษออกเมื่อแสดงผลลัพธ์ อย่างไรก็ตาม ความแตกต่างเล็กน้อยสามารถรวมกันในการคำนวณครั้งต่อไปและดูเหมือนจะให้คำตอบที่ผิด
ระบบฐานข้อมูลมักจะเก็บสกุลเงินและทำการคำนวณโดยใช้คณิตศาสตร์ทศนิยม ซึ่งมีช่วงที่เล็กลง แต่ควบคุมความแม่นยำได้มากขึ้น ตามค่าเริ่มต้น แอปพื้นที่ทำงานจะแมปสกุลเงินเในและนอกจากค่าทศนิยม ดังนั้น ผลลัพธ์อาจแตกต่างจากการคำนวณที่กระทำในรูปแบบฐานสิบแบบเนทีฟ คุณอาจต้องการทำงานกับค่าเหล่านี้เป็น ข้อความ เช่นเดียวกับที่อธิบายไว้สำหรับจำนวนเต็มขนาดใหญ่ก่อนหน้านี้ ทั้งนี้ขึ้นอยู่กับความต้องการด้านความแม่นยำของแอปของคุณ
ค่าเริ่มต้นและการแปลง
หมายเหตุ
Power Apps รองรับเฉพาะ Float วันนี้และเป็นชนิดของตัวเลขทั้งหมด การรองรับ Decimal จะถูกเพิ่มในเร็วๆ นี้
โฮสต์ Power Fx ส่วนใหญ่ใช้ Decimal ตามค่าเริ่มต้น การมีค่าเริ่มต้นนี้หมายถึง:
- ตัวเลขสัญพจน์ในสูตร ตัวเลข
1.234
จะได้รับการตีความเป็นค่า ทศนิยม ตัวอย่างเช่น สูตร1.234 * 2
ตีความ1.234
และ2
เป็น ทศนิยม และส่งคืนผลลัพธ์ ทศนิยม - ฟังก์ชัน Value
Value( "1.234" )
ส่งคืนค่า ทศนิยม ตัวอย่างเช่น ในสูตรValue( "1.234" ) * 2
ฟังก์ชัน Value ตีความเนื้อหาของสตริงข้อความ"1.234"
ที่มีอยู่เป็น ทศนิยม
หากต้องการทำงานกับค่า Float จะใช้ฟังก์ชัน Float ในการขยายตัวอย่างของเรา Float( 1.234 )
แปลง ทศนิยม1.234
เป็น เลขทศนิยม
เลขทศนิยม ยังใช้แทน Value เพื่อแปลงสตริงที่มีตัวเลขทศนิยม เช่น Float( "1.234" )
เป็น เลขทศนิยม ซึ่งจำเป็นหากไม่สามารถแสดงตัวเลขเป็น ทศนิยม ได้
โดยสรุป:
การใช้ | Decimal | Float |
---|---|---|
ตัวเลขสัญพจน์ในสูตร | 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 เนื่องจากมีช่วงที่กว้างกว่า เนื่องจากการแปลงนี้อาจส่งผลให้สูญเสียความแม่นยำ จึงเป็นสิ่งสำคัญที่จะไม่ผสมทั้งสองอย่างโดยไม่จำเป็น เนื่องจาก ทศนิยม เป็นชนิดข้อมูลตามตัวอักษรเริ่มต้น และฟังก์ชันตัวเลขส่วนใหญ่ยังคงรักษาประเภทไว้ จึงค่อนข้างง่ายที่จะหลีกเลี่ยงการย้ายไปยัง เลขทศนิยม โดยไม่ต้องการ
ตัวอย่างเช่น พิจารณาการคำนวณต่อไปนี้โดยใช้ pac power-fx repl
หลังจากติดตั้ง Power Platform CLI เนื่องจากตัวเลขทั้งสองเป็น Decimal การคำนวณจึงเสร็จสิ้นใน Decimal และผลลัพธ์ยังคงความแม่นยำครบถ้วน:
>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002
หากตัวถูกดำเนินการตัวที่สองเปลี่ยนเป็น เลขทศนิยม แทน การคำนวณทั้งหมดจะดำเนินการใน เลขทศนิยม และค่าเศษส่วนเล็กน้อยจะหายไป:
>> 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 | ฟังก์ชัน Value ส่งคืน |
---|---|---|---|
เวลาท้องถิ่นของผู้ใช้ | วันอาทิตย์พฤษภาคม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( Date( 1970,1,1 ), UnixTime, Seconds )
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, ...