مشاركة عبر


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

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

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

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

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

Blank

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

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

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

من خلال قائمة الملف، يمكنك إضافة ملفات صور وفيديو وصوت كموارد تطبيق. ويصبح اسم الملف الذي تم استيراده هو اسم المورد في التطبيق. في هذا الرسم، تمت إضافة شعار Northwind Traders، المعروف باسم 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 فقط Float اليوم وهو نوع جميع الأرقام. وسيضاف دعم عشري قريبًا.

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

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

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

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

يستخدم نوع البيانات العشرية في الغالب نوع البيانات العشرية .NET. يستخدم بعض المضيفين، مثل أعمدة صيغ Dataverse التي يتم تشغيلها في SQL Server، نوع البيانات العشرية 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 فقط Float اليوم وهو نوع جميع الأرقام. وسيضاف دعم عشري قريبًا.

يستخدم Power Fx معظم المضيفين رقما عشريا افتراضيا. وجود هذا الإعداد الافتراضي يعني:

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

للعمل مع قيم عائمة، يتم استخدام وظيفة عائمة. وبعد توسيع مثالنا، تقوم Float( 1.234 ) بتحويل القيمة العشرية1.234 إلى تدفق. التدفق يمكن استخدامه أيضًا كبديل للقيمة لتحويل سلسة تحتوي على رقم نقطية للتدفق، مثل Float( "1.234" ) لقيمة التدفق، وهو مطلوب إذا لم يكن من الممكن تمثيل الرقم كقيمة عشرية.

في ملخص

الاستخدام عدد عشري 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 .. ونظرا لأن كلا الرقمين رقم عشري، فإن الحساب يتم في "عشري"، وتحافظ النتيجة على الدقة الكاملة:

>> 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 على التسميات القابلة للضريبةوغير الخاضعة للضريبة، والتي تتوافق مع صوابوخطأ. لإظهار ذلك، استخدم هذه الصيغة:

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

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

If( ThisItem.Taxable, ...