Microsoft جداول Power Fx

‏‫ملاحظة‬

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

Microsoft تنظم جداول Power Fx البيانات في سجلات وحقول وأعمدة من مصادر مثل Microsoft Excel SharePoint SQL Server. تعرف على هذه البنيات لكتابة الصيغ التي يمكنها الوصول إلى البيانات الجدولية وتشكيلها ومعالجتها بفعالية.

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

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

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

عناصر الجدول

لقطة شاشة للسجلات والحقول والأعمدة التي تشكل جدولا.

السجلات

يحتوي كل سجل على فئة معلومات واحدة على الأقل لشخص أو مكان أو شيء ما. يوضح المثال السابق سجلا لكل منتج (الشوكولاتةوالخبزوالماء) وعمودا لكل فئة من المعلومات (السعروالكمية باليدوالكمية حسب الطلب).

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

الحقول

يعتبر الحقل جزءًا فرديًا من المعلومات في أحد السجلات. يمكنك تمثيل هذا النوع من الحقول كقيمة في عمود لسجل محدد.

كما هو الحال مع عنصر التحكم، يمكنك الإشارة إلى حقل من سجل باستخدام عامل التشغيل. على السجل. على سبيل المثال، يرجع First(Products).Name إلى الحقل الاسم في السجل الأول في الجدول منتجات.

يمكن أن يحتوي الحقل على سجل أو جدول آخر، كمثال لما تعرضه الوظيفة GroupBy. يمكنك تضمين أكبر عدد من مستويات السجلات والجداول حسب ما تريد.

الأعمدة

يشير العمود إلى الحقل نفسه لسجل واحد أو أكثر في جدول. في المثال السابق، يحتوي كل منتج على حقل سعر، ويكون هذا السعر في العمود نفسه لجميع المنتجات. يحتوي الجدول السابق على أربعة أعمدة، تظهر أفقيا عبر الجزء العلوي:

  • الاسم
  • Price
  • الكمية المتاحة
  • الكمية حسب الطلب

يعكس اسم العمود الحقول الموجودة في ذلك العمود.

تكون كافة القيم الموجودة في عمود من نوع البيانات نفسه. في المثال السابق، يحتوي العمود "الكمية على اليد" دائما على رقم ولا يمكن أن يحتوي على سلسلة، مثل "12 وحدة"، لسجل واحد. وقد تكون قيمة أي حقل فارغة أيضًا.

ربمَا تكون قد أشَارت إلى أعمدة عَلى أنهَا "حقول" فِي أدوات أخرى.

الجدول

يتضمن الجدول سجلاً واحدًا أو أكثر، وكل منها يحتوي على العديد من الحقول التي تحتوي على أسماء متسقة عبر السجلات.

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

كما هو موضح في المثال التالي، يمكنك التعبير عن جدول في صيغة باستخدام الوظيفة الجدول باستخدام مجموعة من السجلات، التي تعبر عن أقواس متعرجة:

Table( { Value: "Strawberry" }, { Value: "Vanilla" } )

يمكنك أيضًا تعريف جدول بعمود واحد بأقواس مربعة. طريقه مكافئة لكتابة السابق:

[ "Strawberry", "Vanilla" ]

صيغ الجدول

في Excel وPower Fx، إنك تستخدم صيغ لمعالجة الأرقام وسلاسل النص بالطرق المشابهة:

  • في Excel، اكتب قيمة، مثل 42، في الخلية A1، ثم اكتب صيغة، مثل A1+2، في خلية أخرى لعرض قيمة 44.
  • في Power Apps، قم بتعيين الخاصية افتراضي لـ Slider1 إلى 42ثم قم بتعيين الخاصية النص للتسمية إلى Slider1.Value + 2 لعرض القيمة 44.

وفي كلتا الحالتين، تتغير القيمة المحسوبة تلقائيًا إذا قمت بتغيير قيم الوسيطات (على سبيل المثال، الرقم في الخلية A1 أو القيمة Slider1).

بشكل متشابه، يمكنك استخدام الصيغ للوصول إلى البيانات الموجودة في الجداول والسجلات ومعالجتها. يمكنك استخدام أسماء الجداول كوسيطات في بعض الصيغ، مثل Min(Catalog، السعر) لعرض أقل قيمة في العمود السعر في الجدول الكتالوج. توفر الصيغ الأخرى جداول كاملة كقيم إرجاع، مثل RenameColumns(Catalog, "Price", "Cost")، التي ترجع كافة السجلات من الجدول الكتالوج ولكن تغير اسم العمود من السعر إلى التكلفة.

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

وظائف الجدول وخصائص عناصر التحكم

فكر في الوظيفة الأقل. إذا كان المتغير ترحيب يحتوي على سلسلة النص "Hello, World"، تقوم الصيغة Lower( welcome ) بإرجاع "hello, world". لا تغير هذه الدالة القيمة في هذا المتغير. Lower هي وظيفة نقية من حيث أنها تعالج المدخلات فقط وتنتج المخرجات. هذا كل شيء، وليس لها أية تأثيرات جانبية. إن كل الوظائف الموجودة في Excel ومعظم الوظائف في Power Fx وظائف خالصة، والتي تسمح بإعادة حساب المصنف أو التطبيق تلقائيًا.

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

تتخذ العديد من الوظائف جدولا من عمود واحد كمدخلات لها. إذا كان الجدول بالكامل يحتوي على عمود واحد فقط، فيمكنك تحديده حسب الاسم. إذا كان الجدول يحتوي على أعمدة متعددة، فإنه يمكنك تحديد تلك الأعمدة باستخدام بناء الجملة Table.Column. على سبيل المثال، يقوم Products.Name بإرجاع جدول العمود الواحد لقيم الاسم من الجدول المنتجات.

يمكنك إعادة تشكيل جدول ومع ذلك، فإنك تريد باستخدام الوظيفة AddColumns أو RenameColumns أو ShowColumns أو DropColumns. مرة أخرى، تقوم هذه الوظائف بتغيير الإخراج فقط، وليس المصدر الخاص بها.

صيغ السلوك

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

نطاق السجل

تعمل بعض الدالات من خلال تقييم صيغة عبر جميع سجلات الجدول، سجل واحد في كل مرة. يتم استخدام نتيجة الصيغة بطرق مختلفة:

  • AddColumns - توفر الصيغة قيمة العمود الجديد.
  • المتوسط ، الحد الأقصى ، الحد الأدنى ، المجموع ، StdevP ، VarP - توفر الصيغة القيمة للتجميع.
  • يحدد التصفية ، البحث - الصيغة ما إذا كان يجب تضمين السجل في الإخراج.
  • Concat - تحدد الصيغة السلاسل التي يجب تسلسلها معا.
  • Distinct - ترجع الصيغة قيمة، تستخدم لتحديد السجلات المكررة.
  • ForAll - يمكن أن ترجع الصيغة أي قيمة ، يحتمل أن تكون لها آثار جانبية.
  • Sort - يوفر Formula القيمة لفرز السجلات عليها.
  • مع - يمكن أن ترجع الصيغة أي قيمة ، يحتمل أن تكون لها آثار جانبية.

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

على سبيل المثال، خذ جدولا بالمنتجات موضوعة في متغير عام:

لقطة شاشة لجدول المنتجات مع الكميات المطلوبة والمتاحة.

Set( Products,
    Table(
        { Product: "Widget",    'Quantity Requested': 6,  'Quantity Available': 3 },
        { Product: "Gadget",    'Quantity Requested': 10, 'Quantity Available': 20 },
        { Product: "Gizmo",     'Quantity Requested': 4,  'Quantity Available': 11 },
        { Product: "Apparatus", 'Quantity Requested': 7,  'Quantity Available': 6 }
    )
)

لتحديد ما إذا كان أي من هذه المنتجات قد طلب أكثر مما هو متاح:

Filter( Products, 'Quantity Requested' > 'Quantity Available' )

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

لقطة شاشة لجدول منتجات تمت تصفيته حيث تتجاوز الكمية المطلوبة الكمية المتوفرة.

إضافة إلى هذا المثال، يمكنك حساب مقدار كل منتج لطلبه:

AddColumns( 
    Filter( Products, 'Quantity Requested' > 'Quantity Available' ), 
    "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
)

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

لقطة شاشة لجدول المنتجات بعد إضافة العمود المحسوب Quantity To Order.

وأخيرا، يمكنك تقليل جدول النتائج إلى الأعمدة التي تريدها فقط:

ShowColumns(
    AddColumns(
        Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
        "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
    ),
    "Product",
    "Quantity To Order"
)

لقطة شاشة لجدول النتائج مع عمودي المنتج والكمية إلى الطلب فقط.

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

إزالة الغموض

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

  • للوصول إلى القيم من نطاقات السجلات المتداخلة، استخدم @ عامل التشغيل باسم الجدول الذي تعمل عليه، باتباع هذا النمط:
    Table[@FieldName]
  • للوصول إلى القيم العمومية، مثل مصادر البيانات والمجموعات ومتغيرات السياق، استخدم النمط [@ObjectName] (دون تعيين جدول).

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

على سبيل المثال، تخيل أن لديك مجموعة X:

لقطة شاشة لمجموعة X التي تحتوي على القيم 1 و2.

يمكنك إنشاء هذه المجموعة باستخدام ClearCollect( X, [1, 2] ).

أضف مجموعة أخرى Y:

لقطة شاشة لمجموعة Y التي تحتوي على القيم A وB.

يمكنك إنشاء هذه المجموعة باستخدام ClearCollect( Y, ["A", "B"] ).

بالإضافة إلى ذلك، قم بتعريف متغير سياق يسمى القيمة باستخدام هذه الصيغة: UpdateContext( {Value: "!"} )

لنقم بوضعها جميعًا معًا. في هذا السياق، تكون الصيغة التالية:

Ungroup(
    ForAll( X,
        ForAll( Y,
            Y[@Value] & Text( X[@Value] ) & [@Value]
        )
    ),
    "Value"
)

ينتج هذا الجدول:

لقطة شاشة لنتيجة ForAll المتداخلة التي تجمع بين إدخالات X وY والقيمة العمومية.

ماذا يحدث هنا؟ تحدد الدالة ForAll في أقصى الحدود نطاق سجل ل X، بحيث يمكنك الوصول إلى حقل القيمة لكل سجل أثناء المعالجة. يمكنك الوصول إليها ببساطة باستخدام الكلمة Value أو باستخدام X[@Value].

تحدد الدالة ForAll الأقرب نطاق سجل آخر ل Y. نظرا لأن هذا الجدول يحتوي أيضا على حقل قيمة معرف، فإن استخدام القيمة هنا يشير إلى الحقل في سجل Y ولم يعد الحقل من X. للوصول إلى حقل القيمةX، يجب استخدام الإصدار الأطول مع عامل تشغيل إزالة الغموض.

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

Ungroup(
    ForAll( X,
        ForAll( Y,
            Value & Text( X[@Value] ) & [@Value]
        )
    ),
    "Value"
)

تتجاوز جميع نطاقات السجل ForAll النطاق العمومي. لا يتوفر متغير سياق القيمة الذي قمت بتعريفه بالاسم بدون عامل تشغيل إزالة الغموض. للوصول إلى هذه القيمة، استخدم [@Value].

يؤدي إلغاء التجميع إلى تسطيح النتيجة لأن الدالات المتداخلة ل ForAll تؤدي إلى جدول نتائج متداخل.

جداول من عمود واحد

للعمل على عمود واحد من جدول، استخدم الدالة ShowColumns كما هو موضح في هذا المثال:

ShowColumns( Products, "Product" )

تنتج هذه الصيغة جدول العمود الواحد هذا:

لقطة شاشة لجدول من عمود واحد يحتوي على قيم المنتج.

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

Products.Product

سجلات مضمنة

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

{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 }

يمكنك أيضًا دمج الصيغ داخل صيغ أخرى، كما يوضح هذا المثال:

{ Name: First(Products).Name, Price: First(Products).Price * 1.095 }

يمكنك تضمين السجلات عن طريق تضمين الأقواس المتعرجة، كما يوضح هذا المثال:

{ 'Quantity': { 'OnHand': ThisItem.QuantOnHand, 'OnOrder': ThisItem.QuantOnOrder } }

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

لاحظ أن القيمة الموجودة في العمود السعر لا تتضمن رمز العملة، مثل علامة الدولار. يتم تطبيق هذا التنسيق عند عرض القيمة.

جداول مضمنة

يمكنك إنشاء جدول باستخدام الوظيفة الجدول ومجموعة السجلات. يمكنك تخصيص الجدول في بداية هذا الموضوع باستخدام هذه الصيغة:

Table( 
   { Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 },
   { Name: "Bread", Price: 4.95, 'Quantity on Hand': 34, 'Quantity on Order': 0 },
   { Name: "Water", Price: 4.95, 'Quantity on Hand': 10, 'Quantity on Order': 0 } 
)

يمكنك أيضًا تضمين الجداول:

Table( 
   { Name: "Chocolate", 
     'Quantity History': Table( { Quarter: "Q1", OnHand: 10, OnOrder: 10 },
                                { Quarter: "Q2", OnHand: 18, OnOrder: 0 } ) 
   }
)

جداول قيمة مضمنة

يمكنك إنشاء جداول بعمود واحد عن طريق تحديد قيم في أقواس مربعة. يحتوي الجدول الناتج على عمود واحد، باسم قيمة.

على سبيل المثال، [ 1, 2, 3, 4 ] يكافئ Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } ) ويقوم بإرجاع هذا الجدول:

لقطة شاشة لجدول القيمة المضمنة الذي يحتوي على الأرقام من 1 إلى 4.