مشاركة عبر


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

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

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

نوع البيانات الوصف الأمثلة
Boolean قيمة true أو false. ويمكن استخدامها مباشرة في If وFilter والوظائف الأخرى دون مقارنة. صواب
اختيار خيار من مجموعة خيارات مدعومة برقم. يدمج نوع البيانات هذا تسمية نصية قابلة للترجمة بقيمة رقمية. تظهر التسمية في التطبيق، ويتم تخزين القيمة الرقمية واستخدامها في المقارنات. ويتم دعم نوع البيانات هذا بواسطة دالة Type إذا تم استخدام مثيل حقل Choice بالاسم. 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" )
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 أو gif أو تنسيقات صور الويب الشائعة الأخرى. نوع بيانات الصورة غير مدعوم بدالة Type. تمت إضافة 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. "Hello, World"
وقت وقت دون تاريخ، في المنطقة الزمنية لمستخدم التطبيق. الوقت( 11، 23، 45 )
Untyped كائن من نوع غير معلن. قد يكون الكائن الأساسي من أي نوع موجود، ويمكن تحويله إلى أنواع متوافقة باستخدام دالات مثل Boolean() وValue() وTable() وغير ذلك. لمزيد من المعلومات، راجع الكائن غير المصنف والعمل مع JSON. ParseJSON("{ ""Field"" : 1234 }").Field
لاغٍ يُستخدم فقط من خلال السلوك الذي حدده المستخدم، ويشير إلى أن الدالة لا تحتوي على نوع إرجاع. نوع البيانات هذا غير مدعوم بدالة Type. وعلى الرغم من أن الدالة لا تحتوي على نوع إرجاع أو قيمة، إلا أنه يمكنها دائمًا إرجاع خطأ. Hi(): Void = { Notify( "Hello!" ) }
نعم/لا خيار من اثنين مدعومة بقيمة منطقية. يدمج نوع البيانات هذا تسمية نصية قابلة للترجمة بقيمة منطقية. تظهر التسمية في التطبيق، ويتم تخزين القيمة المنطقية واستخدامها في المقارنات. ويتم دعم نوع البيانات هذا بواسطة دالة Type إذا تم استخدام مثيل حقل نعم/لا بالاسم. ThisItem.Taxable

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

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.

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

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

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

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

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

إشعار

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

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

  • أرقام ممولة في صيغ. يتم تفسير القم 1.234 كقيمة عشرية. على سبيل المثال، تفسر الصيغة 1.234 * 21.234 و2 كـ قيمة عشية وتُرجع نتيجة قيمة عشرية.
  • Value function. 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 )

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

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

على سبيل المثال، فكر في الحساب التالي باستخدام 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, ...