أنواع البيانات

‏‫ملاحظة‬

Microsoft Power Fx هو الاسم الجديد للغة الصيغة لتطبيقات اللوحة. هذه المقالات عبارة عن عمل قيد التقدم حيث نقوم باستخراج اللغة من تطبيقات اللوحة ودمجها مع منتجات Microsoft Power Platform الأخرى وجعلها متوفرة كمصدر مفتوح. ابدأ بـ نظرة عامة على Microsoft Power Fx لمقدمة عن اللغة.

تتدفق المعلومات من خلال تطبيق ما في قيم منفصلة صغيرة، مثل خلايا جدول البيانات. على سبيل المثال، تتدفق البيانات الموجودة في حقل تاريخ الميلاد وحقل الذكرى السنوية كقيمة تاريخ تتضمن السنة والشهر واليوم. ويعرف التطبيق كيفية تنسيق هذه القيم، وتقييد الإدخال لما يتناسب مع كل منها، ومشاركة القيم مع قاعدة بيانات. وتختلف أيام الميلاد عن الذكريات السنوية للأشخاص، ولكن النظام يعالجها بنفس الطريقة بالضبط. وفي هذه الحالة، يعتبر التاريخ مثالاً لنوع البيانات.

يقدم هذا المقال تفاصيل لأنواع البيانات التي تدعمها تطبيقات اللوحة. عندما يتصل تطبيق بمصدر بيانات خارجي، يتم تعيين كل نوع بيانات في ذلك المصدر إلى نوع بيانات لتطبيقات اللوحة.

نوع البيانات ‏‏الوصف الأمثلة
منطقي قيمة true أو false. ويمكن استخدامها مباشرة في If وFilter والوظائف الأخرى دون مقارنة. true
اللون تحديد لون، متضمنًا قناة أبجدية. اللون. أحمر
ColorValue( "#102030" )
RGBA( 255, 128, 0, 0.5 )
العملة قيمة العملة المخزنة في رقم الفاصلة العائمة. تكون قيم العملات هي نفس قيم الأرقام التي تحتوي على خيارات تنسيق العملة. 123
4.56
التاريخ تاريخ دون وقت، في المنطقة الزمنية لمستخدم التطبيق. التاريخ ( 2019, 5, 16 )
الوقت/التاريخ تاريخ ووقت، في المنطقة الزمنية لمستخدم التطبيق. DateTimeValue( "مايو 16, 2019 1:23:09 مساءًا" )
عدد عشري عدد بدقة عالية وعمليات قاعدة 10 نطاق ومدى محدود. 123
عدد عشري( "1.2345" )
GUID معرف فريد عمومي. GUID()
GUID( "123e4567-e89b-12d3-a456-426655440000" )
ارتباط تشعبي سلسلة نصية تحتوي على ارتباط تشعبي. "https://powerapps.microsoft.com"
Image سلسلة نصية لمعرف المورد العام (URI) لصوره في ملف jpeg أو .png أو svg أو .gif أو gif أو تنسيقات صور الويب الشائعة الأخرى. تمت إضافة MyImage كمورد تطبيق
"https://northwindtraders.com/logo.jpg"
"appres://blobmanager/7b12ffa2..."
الوسائط سلسلة URI نصية لتسجيل فيديو أو صوت. تمت إضافة MyVideo كمورد تطبيق
"https://northwindtraders.com/intro.mp4"
"appres://blobmanager/3ba411c..."
عدد أو عائم رقم بدقة قياسية وعمليات أساسية 2 ونطاق واسع. 123
8.903e121
1.234e200
اختيار خيار من مجموعة خيارات مدعومة برقم. يدمج نوع البيانات هذا تسمية نصية قابلة للترجمة بقيمة رقمية. تظهر التسمية في التطبيق، ويتم تخزين القيمة الرقمية واستخدامها في المقارنات. ThisItem.OrderStatus
السجل سجل قيم البيانات. يحتوي نوع البيانات المركب هذا على مثيلات لأنواع البيانات الأخرى المدرجة في هذا الموضوع. لمزيد من المعلومات: استخدام الجداول { Company: "Northwind Traders",
الموظف: 35,
NonProfit: false }
مرجع السجل مرجع إلى سجل في جدول. غالبًا ما تستخدم هذه المراجع في عمليات البحث متعددة الاشكال. لمزيد من المعلومات: استخدام المراجع First(Accounts).Owner
Table جدول السجلات. يجب أن تكون لكافة السجلات نفس أسماء الحقول الخاصة بها والتي تحتوي على نفس أنواع البيانات، ويتم التعامل مع الحقول المحذوفة على أنها فارغة. يحتوي نوع البيانات المركب هذا على مثيلات لأنواع البيانات الأخرى المدرجة في هذا الموضوع. لمزيد من المعلومات: استخدام الجداول Table( { FirstName: "Sidney",
LastName: "Higa" },
{ FirstName: "Nancy",
LastName: "Anderson" } )
نص سلسلة نصية Unicode. "Hello, World"
وقت وقت دون تاريخ، في المنطقة الزمنية لمستخدم التطبيق. الوقت( 11، 23، 45 )
الخيار الثاني خيار من اثنين مدعومة بقيمة منطقية. يدمج نوع البيانات هذا تسمية نصية قابلة للترجمة بقيمة منطقية. تظهر التسمية في التطبيق، ويتم تخزين القيمة المنطقية واستخدامها في المقارنات. ThisItem.Taxable
كائن غير مصنف كائن من نوع غير معلن. قد يكون الكائن الأساسي من أي نوع موجود، ويمكن تحويله إلى أنواع متوافقة باستخدام دالات مثل Boolean() وValue() وTable() وغير ذلك. لمزيد من المعلومات، راجع الكائن غير المصنف والعمل مع JSON. ParseJSON("{ ""Field"" : 1234 }").Field

العديد من أنواع البيانات هذه متشابهة ولها نفس التمثيل الأساسي، مثل حقل الارتباط التشعبي الذي يتم التعامل معه على أنه نص. توفر أنواع البيانات الإضافية تجارب افتراضية أفضل في النماذج وعناصر التحكم الأخرى.

Blank

يمكن أن يكون لكافة أنواع البيانات قيمة فارغة (ألا توجد قيمة بمعني آخر). غالبًا ما يتم استخدام المصطلح "قيمة فارغة" في قواعد البيانات لهذا المفهوم.

استخدم الوظيفة Blank مع الوظيفة Set أو Patch لتعيين متغير أو حقل على blank. على سبيل المثال، تعيين (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."

ترُجع هذه الصيغة سلسلة النص We have 3 apples, 4 bananas, yielding 7 fruit total. يتم إدراج المتغيرات Apples وBananas في النص مع استبدال الأقواس المتعرجة‬، إلى جانب نتيجة الصيغة الرياضية Apples+Bananas. يتم الاحتفاظ بالمسافات والأحرف الأخرى حول الأقواس المتعرجة كما هي.

يمكن أن تتضمن الصيغ المضمنة أية دوال أو عوامل تشغيل. كل ما يتطلبه الأمر هو أن نتيجة الصيغة يمكن فرضها على سلسلة نصية. على سبيل المثال، ستعمل هذه الصيغة على إدراج NickName إذا تم توفيرها، أو FirstName إذا لم يكن الأمر كذلك، في تحية:

$"Welcome {Coalesce( NickName, FirstName )}, it's great to meet you!" )

إذا تم تعيين NickName على "جو"، فإن هذه الصيغة تعمل على إظهار السلسلة النصية مرحبًا جو، من الرائع مقابلتك!. ولكن إذا كان NickName فارغًا وFirstName هو "جوزيف"، ستظهر الصيغة بالشكل Dear Joseph, great to meet you!

يمكن أن استيفاء السلسلة سلاسل نصية قياسية في الصيغة المضمنة. على سبيل المثال، إذا لم يتم ذكر NickName أو FirstName، فإنه لا يزال يمكننا ذكر "صديق" كبديل:

$"Welcome {Coalesce( NickName, FirstName, "Friend" )}!"

يمكن حتى تداخل استيفاءات السلاسل. فكر في هذا المثال حيث يتم دمج الاسم الأول و الأوسط و الأخير في التحية. حتى إذا كانت واحدة أو اثنتين من هذه القيم فارغة، سيكون عدد المساحات الصحيح بين أجزاء الاسم. إذا لم يتم توفير أي جزء من أجزاء الكلام، فسيتم طي استيفاء السلسلة الداخلية إلى سلسلة خارجية، وسيتم استبدال الدالة Coalesce بـ "صديق".

$"Welcome {Coalesce( Trim( $"{First} {Middle} {Last}"}), "Friend" )}!"
الأول الأوسط ‏‏الأخير النتيجة
أشرف أمجد أيمن Welcome John Quincy Doe!
أشرف blank أيمن Welcome John Doe!
blank blank أيمن Welcome Doe!
blank blank blank Welcome Friend!

الخطوط الجديدة

يمكن أن تحتوي السلاسل النصية المضمنة على خطوط جديدة. على سبيل المثال، فكر في تعيين الخاصية Text لعنصر التحكم Label إلى ما يلي:

"Line 1
Line 2
Line 3"

ينتج عن الصيغة أعلاه ثلاثة أسطر موضحة في عنصر تحكم التسمية:

تظهر السلسلة النصية المضمنة وعنصر تحكم التسمية ثلاثة أسطر بالسطر 1 والسطر 2 والسطر 3.

يتم دعم الخطوط الجديدة أيضًا مع استيفاء السلسلة، كما هو موضح أدناه:

$"Line {1}
Line {1+1}
Line {1+1+1}"

ينتج عن الصيغة أعلاه الإخراج نفسه:

صيغة استيفاء السلسلة وعنصر تحكم التسمية ثلاثة أسطر بالسطر 1 والسطر 2 والسطر 3.

موارد الوسائط والصور

من خلال قائمة الملف، يمكنك إضافة ملفات صور وفيديو وصوت كموارد تطبيق. ويصبح اسم الملف الذي تم استيراده هو اسم المورد في التطبيق. في هذا الرسم، تمت إضافة شعار نورث تردرز، المعروف باسم nwindlogo، إلى تطبيق:

مورد نورث ويند.

لاستخدام هذا المورد في أحد التطبيقات، حدده في خاصية Image لعنصر التحكم في Image:

صورة نورث ويند.

URI للصور والوسائط الأخرى

يمكنك التعرف أكثر على المثال الأخير بتعيين خاصية Text لعنصر التحكم Label لشعار nwindlogo. تعرض التسمية سلسلة نصية:

نص نورث ويند.

وتشير تطبيقات اللوحة إلى كل صورة أو ملف وسائط آخر، سواء كانت في السحابة أو تمت إضافتها كمورد تطبيق، وذلك بواسطة سلسلة URI نصية.

على سبيل المثال لا تقبل خاصية Image لعنصر تحكم image موارد التطبيق فقط ولكن أيضًا ارتباطات الصور عل الويب، مثل "https://northwindtraders.com/logo.jpg". وتقبل الخاصية أيضًا الصور المضمنة التي تستخدم مخطط URI للبيانات، كما هو موضح في هذا المثال:

"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAFAQMAAACtnVQoAAAABlBMVEUAAAB0J3UMNU6VAAAAAXRSTlMAQObYZgAAABRJREFUCNdjUGJgCGVg6GgAkkA2AA8/AffqCEBsAAAAAElFTkSuQmCC"

ويعرض URI النسخة المحجمة للإصدارين الأرجوانيين:

الماسات المزدوجة.

يمكنك إظهار أحدث صورة تم التقاطها في عنصر تحكم Camera بتعيين خاصية Image لعنصر تحكم image على خاصية Photo لعنصر تحكم camera. ويحتفظ التطبيق بالصورة في الذاكرة، وتقوم خاصية Photo بعنصر تحكم camera بإرجاع مرجع URI إلى الصورة. على سبيل المثال، قد تلتقط صورة، ويمكن لخاصية Photo إرجاع "appres://blobmanager/7b12ffa2ea4547e5b3812cb1c7b0a2a0/1".

يمكنك استخدام URI للإشارة إلى صورة أو ملف وسائط آخر مخزن في قاعدة بيانات. وبهذه الطريقة، لا يسترد التطبيق البيانات الفعلية ما لم تكن مطلوبة بالفعل. على سبيل المثال، قد يقوم مرفق في جدول Microsoft Dataverse بعرض "appres://datasources/Contacts/table/..." كما هو في مثال الكاميرات، يمكنك عرض هذه الصورة عن طريق تعيين خاصية Image لعنصر تحكم image إلى هذا المرجع، والذي يسترد البيانات الثنائية.

عند حفظ نوع بيانات وسائط، مثل صورة، في قاعدة بيانات، يرسل التطبيق الصورة الفعلية أو بيانات الوسائط، وليس مرجع URI.

حدود الحجم

كسلاسل نصية وURIs، هذه الأنواع من البيانات ليس لها حد معين مسبقًا للطول.

والبيانات الثنائية التي تشير إليها أنواع البيانات هذه لا تحتوي أيضًا على حد معين مسبقًا للحجم. على سبيل المثال، يمكن أن تحظى الصورة المُلتقطة من خلال عنصر تحكم camera والتي يُشار إليها الآن كـ "appres://..." بحجم كبير ودقة عالية حيث يمكن لكاميرا الجهاز جمعها. لا يتم تحديد الدقة ومعدل الإطارات وغيرها من السمات الأخرى الخاصة بملفات الوسائط بواسطة نوع البيانات، ولكن قد تكون لعناصر التحكم الخاصة بتشغيل والتقاط الوسائط القيود الخاصة بها.

ولكن تخضع كافة أحجام البيانات إلى مقدار الذاكرة المتوفرة في التطبيق. غالبًا ما تدعم المستعرضات التي تعمل على كمبيوتر سطح المكتب أكثر من 100 ميغابايت من البيانات. ولكن مقدار الذاكرة المتوفرة على جهاز م، مثل الهاتف قد يكون منخفضًا، في النطاق 30-70 ميغابايت بشكل نموذجي. لتحديد ما إذا كان التطبيق سيتم تشغيله داخل هذه الحدود، اختبر السيناريوهات الشائعة على كافة الأجهزة التي يجب تشغيلها بها.

وكأفضل الممارسات، احتفظ بالبيانات في الذاكرة عند الحاجة فقط. حمِّل الصور إلى قاعدة بيانات بأسرع ما يمكن; ونزِّل الصور فقط عندما يطلب مستخدم التطبيق ذلك.

أرقام

‏‫ملاحظة

Power Apps يدعم عائمة اليوم وهو نوع كافة الأرقام. وسيضاف دعم عشري قريبا.

Power Fx يدعم نوعين من الأرقام: عشري عائم (مع مرادفات رقم عملة).

الحل العشري هو الأفضل لمعظم حسابات الأعمال. يمكن أن تمثل الأرقام بدقة في المعنى الأساسي 10 0.1 الذي يمكن تمثيله بشكل صحيح ولن يتم عرضه خطأ ال تقريب أثناء الحسابات. وهو له نطاق كبير بما يكفي لأية حاجة للأعمال، يصل إلى 1028 مع دقة تصل إلى 28 رقما. الأرقام العشرية هي نوع البيانات العشرية الافتراضي Power Fx لمعظم المضيفين، وتستخدم إذا كان أحدهما يكتب ببساطة 2*2.

إن عائمة هي أفضل العمليات الحسابية التي يتم حسابها. يمكن أن تمثل أرقاما في نطاق أكبر بكثير، يصل إلى 10308. تقتصر الدقة على 15 مكان عشري، كما تستند القيمة العشرية إلى القيمة الأساسية 2 وبالتالي لا يمكن أن تمثل بعض القيم العشرية الشائعة على وجه التحديد. كما أن عائمة لها أداء أعلى وتفضل إذا كان ذلك عامل ودقة ليست خطيرة.

رقم بدقة قياسية وعمليات أساسية 2 ونطاق واسع.

يستخدم نوع البيانات العشرية في الغالب نوع البيانات العشرية .NET. بعض المضيفين، مثل Dataverse أعمدة الصيغة التي يتم تشغيلها في SQL Serer، يستخدمون نوع البيانات العشرية ل SQL Server.

لا تستخدم الأرقام العشرية طريقة تعلمك في المدارس باستخدام الأرقام ال 10 الأساسية. وهذا أمر مهم للغاية لتجنب أخطاء ال تقريب الاختلافات الصغيرة للغاية التي يمكن أن تتراكم عند استخدام قاعدة التعويم 2 (كما هو مستخدم بواسطة عائم).

النطاق من موجب 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# تمثيلا 7.9228162514264337593543950335.

أرقام النقطة العائمة

ال التدفق أرقام النقطة العائمة رقم أو عملةيستخدم IEEE 754 معيار الفاصلة العائمة مزدوج الدقة. يقدم هذا المقياس نطاقًا واسعًا للغاية من الأرقام التي تعمل بها، من 1.79769 x 10 308 إلى 1.79769 x 10308. أصغر قيمة يمكن تمثيلها هي 5 × 10–324.

التدفق يمكن أن تمثل بالضبط الأعداد الصحيحة (أو الأعداد الصحيحة) بين –9,007,199,254,740,991 (–(253 – 1)) و 9,007,199,254,740,991 (253 – 1), شامل. هذا النطاق أكبر من أنواع البيانات ذات العدد الصحيح 32 بت (أو 4 بايت) التي تستخدمها قواعد البيانات بشكل شائع. ولكن لا يمكن لتطبيقات اللوحة تمثيل أنواع البيانات ذات العدد الصحيح 64 بت (أو 8 بايت). قد تحتاج إلى تخزين الرقم في حقل نصي أو استخدام عمود محسوب لعمل نسخة من الرقم في حقل نصي، بحيث يتم تعيينه إلى نوع بيانات Text في تطبيق اللوحة. وبهذه الطريقة يمكنك الاحتفاظ بهذه القيم وعرضها وإدخالها، بالإضافة إلى مقارنتها لتحديد ما إذا كانت متساوية أم لا. ولكن لا يمكنك إجراء عمليات حسابية رقمية عليها في هذا النموذج.

حساب الفاصلة العائمة تقريبي، وبالتالي يمكن أن يعطي نتائج غير متوقعة مع العديد من الأمثلة الموثقة. قد تتوقع أن ينتج عن الصيغة 55 /‏ 100 * 100 ‏55 بالضبط و‏(55 ‏/‏ 100 * 100)‏ - 55 صفر بالضبط. ولكن ينتج عن الصيغة الأخيرة 7.1054 x 10 –15، وهو رقم صغير جدًا ولكنه لا يساوي صفر. وعادة لا يتسبب ذلك الاختلاف الصغير في حدوث مشكلة، ويقوم التطبيق بتقريبه عند عرض النتيجة. ولكن يمكن أن تجتمع الاختلافات الصغيرة في العمليات الحسابية التالية وتعطي إجابة خاطئة.

غالبًا ما تخزن أنظمة قواعد البيانات العملات وتقوم بإجراء العمليات الحسابية باستخدام الرياضيات العشرية، وهو ما يقدم نطاقًا أصغر لكنه يتحكم في الدقة بصورة أكبر. تقوم تطبيقات اللوحة بتعيين العملات في قيم الفاصلة العائمة والخارجة افتراضيًا; لذا قد تختلف النتيجة عن العمليات الحسابية التي يتم إجراؤها في نوع بيانات عشرية أصلية. إذا كان هذا النوع من الاختلافات سيتسبب في حدوث مشاكل، فقد تحتاج إلى العمل مع هذه القيم كـ نص، كما هو الحال في الأعداد الصحيحة الكبيرة الموضحة سابقًا في هذا القسم.

الافتراضيات والتحويلات

‏‫ملاحظة

Power Apps يدعم عائمة اليوم وهو نوع كافة الأرقام. وسيضاف دعم عشري قريبا.

يستخدم Power Fx معظم المضيفين رقما عشريا افتراضيا. يؤثر ذلك على:

  • أرقام ممولة في صيغ. سيتم تفسير 1.234 الرقم كقيمة عشرية . على سبيل المثال، ستفسر 1.234 * 2 الصيغة و 1.234 2 على أنها "عشرية" وإرجاع نتيجة عشرية .
  • Value function. Value( "1.234" ) إرجاع قيمة عشرية . على سبيل المثال، ستفسر Value( "1.234" ) * 2 صيغة الدالة "قيمة" محتويات سلسلة النص "1.234" على أنها "عشري".

للعمل مع قيم عائمة ، يتم استخدام وظيفة عائمة. توسيع المثال أعلاه، سوف Float( 1.234 ) تحويل عشري1.234 إلى عائم. التدفق ويمكن أيضا أن تستخدم كبديل ل القيمة لتحويل سلسلة تحتوي على رقم النقطة العائمة مثل 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 )

ختلط الأنواع رقمية

يمكن اختلط القيم العشرية مع القيم العائمة بحرية. عند تحويل القيم العشرية إلى قيم عائمة نتيجة لمدى أكبر. ونظرا لأن ذلك قد يؤدي إلى فقد الدقة، فمن المهم عدم ختلط الدقتين حاجه. ونظرا لأن " عشري" هو نوع البيانات الافتراضي ، كما أن معظم الوظائف الأرقام ستحافظ على النوع، فمن السهل نسبيا تجنب الانتقال إلى عائم دون الحاجة إلى ذلك.

على سبيل المثال، فكر في الحساب التالي باستخدام pac power-fx repl بعد تثبيت المستعرض Power Platform .. ونظرا لأن كلا الرقمين رقم عشري، فإن الحساب يتم في "عشري"، وتحافظ النتيجة على الدقة الكاملة:

>> 1.0000000000000000000000000001 * 2
2.0000000000000000000000000002

وإذا كان بدلا من ذلك، تم تغيير الماسور الثاني إلى "عائم"، سيتم إجراء الحساب بالكامل في عائمة وسيفقد جزء مجزء الميرك:

>> 1.0000000000000000000000000001 * Float(2)
2

التاريخ والوقت والتاريخ/الوقت

المناطق الزمنية

تقع قيم التاريخ/الوقت في هذه الفئات:

  • إعدادات المستخدم المحلية: يتم تخزين هذه القيم بلغه UTC (‏‫التوقيت العالمي المتفق عليه)، ولكن تؤثر المنطقة الزمنية لمستخدم التطبيق على كيفية عرض التطبيق لهذه القيم وكيفية تحديد مستخدم التطبيق لها. كمثال، تظهر نفس اللحظة بشكل مختلف لمستخدم موجود في كندا عن مستخدم في اليابان.
  • مستقل عن المنطقة الزمنية: يعرض التطبيق هذه القيم بالطريقة نفسها ويقوم مستخدم التطبيق بتحديدها بالطريقة نفسها، بغض النظر عن المنطقة الزمنية. تظهر نفس اللحظة لمستخدم موجود في كندا بنفس الشكل الذي تظهر به لمستخدم في اليابان. ويستخدم مؤلفو التطبيقات الذين لا تتوقع تشغيل تطبيقاتهم في مناطق زمنية مختلفة هذه القيم لأنها تتميز بالبساطة بشكل عام.

يوضح هذا الجدول بعض الأمثلة:

نوع التاريخ/الوقت القيمة المخزنة في قاعدة البيانات القيمة المعروضة والمدخلة 7 ساعات غرب UTC القيمة المعروضة والمدخلة 4 ساعات شرق UTC
إعدادات المستخدم المحلية الأحد،19مايو،2019
4:00 ص
السبت،18مايو،2019
9:00 م
الأحد،19مايو،2019
8:00 ص
مستقل عن المنطقة الزمنية الأحد،19مايو،2019
4:00 ص
الأحد،19مايو،2019
4:00 ص
الأحد،19مايو،2019
4:00 ص

بالنسبة لـ إعدادات المستخدم المحلية للتاريخ/الوقت، تستخدم تطبيقات اللوحة المنطقة الزمنية الخاصة للمستعرض أو الجهاز، ولكن تستخدم التطبيقات المستندة إلى النموذج إعداد المستخدم في 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
إعدادات المستخدم المحلية الأحد،19مايو،2019
4:00 ص
السبت،18مايو،2019
9:00 م
1,558,238,400,000
الأحد،19مايو،2019
4:00 صباحًا UTC)
مستقل عن المنطقة الزمنية الأحد،19مايو،2019
4:00 ص
الأحد،19مايو،2019
4:00 ص
1,558,263,600,000
الأحد،19مايو،2019
11:00 صباحًا UTC)

تحويل أوقات Unix

تعرض أوقات Unix عدد الثواني منذ 1 يناير 1970 00:00:00 UTC. ونظرًا لاستخدام تطبيقات اللوحة المللي ثانية بدلاً من الثانية، يمكنك التحويل بينهما بالضرب في أو القسمة على 1000.

على سبيل المثال، يعرض وقت Unix 9 سبتمبر 2001، عند 01:46:40 UTC كـ 1,000,000,000. لإظهار قيمة التاريخ/الوقت هذه في تطبيق اللوحة، اضرب هذا الرقم في 1,000 لتحويله إلى المللي ثانية، ثم استخدمه في وظيفة Text. ترجع الصيغة Text‏( 1000000000 * 1000, DateTimeFormat.UTC ) السلسلة 2001-09-09T01:46:40.000Z.

ولكن ترجع هذه الوظيفة السبت، 8 سبتمبر 2001 18:46:40 إذا ما كنت تستخدم التنسيق DateTimeFormat.LongDateTime24 في المنطقة الزمنية التي تكون فيها 7 ساعات إزاحة من utc (7 ساعات غرب utc). توضح هذه النتيجة قيمة DateTime بشكل صحيح على أساس المنطقة الزمنية المحلية.

للتحويل إلى وقت Unix، اقسم الناتج من القيمة على 1,000:
التقريب (القيمة ( UnixTime)/1000، 0)

إذا كنت تحتاج إلى وقت Unix في قيمة التاريخ لإجراء حسابات إضافية أو العرض داخل Power Apps، استخدم هذه الصيغة:
DateAdd (التاريخ (1970، 1، 1)، UnixTime، ثوان)

SQL Server

يشتمل SQL Server على Datetime وDatetime2 وأنواع بيانات تاريخ/وقت أخرى لا تتضمن إزاحة منطقة زمنية ولا تشير إلى المنطقة الزمنية الموجودة فيها. تفترض تطبيقات اللوحة تخزين هذه القيم في 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)

خلط معلومات التاريخ والوقت

صحيح أن التاريخ والوقت وDateTime لها أسماء مختلفة، ولكنها تحمل نفس المعلومات حول التواريخ والأوقات.

يمكن أن تتضمن قيمة تاريخ معلومات الوقت بداخلها، والتي عادة ما تكون في منتصف الليل. يمكن أن تنطوي قيمة الوقت على معلومات التاريخ، والتي عادة ما تكون 1 يناير 1970. تخزن Dataverse أيضًا معلومات بحقل التاريخ فقط ولكنها تظهر معلومات التاريخ فقط بشكل افتراضي. وبالمثل، أحيانًا ما تميز تطبيقات اللوحة بين أنواع البيانات هذه لتحديد عناصر التحكم والتنسيقات الافتراضية.

لا يوصى بإضافة قيم التاريخ والوقت بشكل مباشر وطرحها بسبب إمكانية وجود نتائج مربكة للمنطقة الزمنية وعمليات التحويل الأخرى. استخدم وظيفة Value لتحويل قيم التاريخ/الوقت إلى مللي ثانية أولاً مع اعتبار المنطقة الزمنية لمستخدم التطبيق، أو استخدم وظائف DateAdd وDateDiff للإضافة أو الطرح من إحدي هذه القيم.

الاختيارات ونعم/لا

توفر الخيارات وأنواع بيانات الخيارين خيارين أو أكثر ليحدده مستخدم التطبيق. على سبيل المثال، قد يوفر اختيار حالة الأمر الخيارات الجديدة، والمشحونة، والمفوترة، و المغلقة. يقدم نوع البيانات ذو الخيارين اختيارين فقط.

كلا هذين النوعين من البيانات يظهران بطاقات التسمية في سياق سلسلة نصية. على سبيل المثال، يعرض عنصر التحكم في التسمية أحد خيارات حالة الأمر إذا كانت خاصية Text عنصر التحكم معينة على صيغة تشير إلى هذا الاختيار. قد تكون تسميات الخيارات مترجمة لمستخدمي التطبيقات في المواقع المختلفة.

عند تحديد مستخدم تطبيق لخيار وحفظ ذلك التغيير، ينقل التطبيق البيانات إلى قاعدة البيانات، التي تخزن هذه البيانات في تمثيل مستقل عن اللغة. يتم نقل الخيار في الاختيار وتخزينه كرقم، كما يتم نقل الخيار في نوع بيانات يستند إلى خيارين وتخزينه كقيمة منطقية.

تكون التسميات لأغراض العرض فقط. لا يمكنك إجراء مقارنات مباشرة مع بطاقات التسمية لأنها خاصة بلغة معينة. وبدلا من ذلك، يكون لكل اختيار تعداد يعمل مع الرقم الأساسي أو القيمة منطقية. على سبيل المثال، لا يمكنك استخدام هذه الصيغة:

If( ThisItem.OrderStatus = "Active", ...

ولكن يمكنك استخدام هذه الصيغة:

If( ThisItem.OrderStatus = OrderStatus.Active, ...

بالنسبة للاختيارات العامة (التي تشترك فيها الجداول)، يتطابق اسم مجموعة الخيارات مع اسم الاختيار العام. بالنسبة للاختيارات المحلية (والتي يتم نطاقها إلى جدول)، قد يحتوي الاسم على اسم الجدول. يؤدي هذا السلوك إلى تجنب التعارضات إذا كانت الجداول المتعددة لها خيارات لها الاسم نفسه. على سبيل المثال، قد يكون جدول الحسابات به خيار OrderStatus وقد يكون اسمه OrderStatus (الحسابات). يحتوي هذا الاسم على مسافة أو أكثر وأقواس، والتالي يجب عليك إحاطته بعلامات اقتباس مفردة عند الإشارة إليه في إحدي الصيغ.

بال‘ضافة إلى ذلك، يمكن أيضًا أن تعمل قيم الخيارات المزدوجة كقيم منطقية. على سبيل المثال، قد تنطوي قيمة خيار مزدوج باسم TaxStatus على التسميات خاضع للضريبة وغير ‏‫خاضع للضريبة، وهو ما يتوافق مع true وfalse على التوالي. للتوضيح، يمكنك استخدام هذه الصيغة:

If( ThisItem.Taxable = TaxStatus.Taxable, ...

كما يمكنك أيضًا استخدام الصيغة المكافئة:

If( ThisItem.Taxable, ...