שתף באמצעות


ForAll פונקציה

חל על: אפליקציות Canvas Copilot Studio Desktop זורמות אפליקציות מונחות דגמים פונקציות Power Platform CLI Dataverse Power Pages

מחשבת ערכים ומבצעת פעולות עבור כל הרשומות שמופיעות בטבלה.

תיאור

הפונקציה ForAll מעריכה נוסחה עבור כל הרשומות בטבלה. הנוסחה יכולה לחשב ערך ו/או לבצע פעולות, כגון שינוי נתונים או עבודה עם חיבור. השתמש בפונקציה With כדי להעריך את הנוסחה עבור רשומה יחידה.

השתמש בפונקציה Sequence עם הפונקציה ForAll כדי לאחזר בהתבסס על ספירה.

שדות הרשומה המעובדים כעת זמינים בתוך הנוסחה. השתמש באופרטור ThisRecord או פשוט צור הפניה לשדות בשמם, כפי שאתה עושה לגבי כל ערך אחר. ניתן גם להשתמש באופרטור As כדי לבחור שם עבור הרשומה שמעובדת. באופן זה, הנוסחה קלה יותר להבנה, וניתן להפוך רשומות מקוננות לנגישות. לקבלת מידע נוסף, עיין בדוגמאות להלן ובעבודה עם טווח רשומה.

ערך החזרה

התוצאה של כל הערכת נוסחה מוחזרת בטבלה, באותו סדר כמו בטבלת הקלט.

אם תוצאת הנוסחה היא ערך יחיד, הטבלה המתוצאת היא טבלה של עמודה יחידה. אם התוצאה של הנוסחה היא רשומה, הטבלה המתקבלת מכילה רשומות עם אותן עמודות כמו רשומת התוצאה.

אם תוצאת הנוסחה היא ערך ריק , אין רשומה בטבלת התוצאות עבור רשומת קלט זו. במקרה זה, טבלת התוצאות מכילה פחות רשומות מאשר טבלת המקור.

ביצוע פעולה

הנוסחה יכולה לכלול פונקציות שמבצעות פעולה, כגון שינוי הרשומות של מקור נתונים באמצעות הפונקציות Patch ו- Collect. הנוסחה יכולה גם לבצע קריאה לפעולות שירות בחיבורים. ניתן לבצע פעולות מרובות בכל רשומה באמצעות האופרטור ;. לא ניתן לשנות את הטבלה הנושאת את הפונקציה ForAll .

כשאתה כותב את הנוסחה שלך, זכור שניתן לעבד את הרשומות בכל סדר וכן, במידת האפשר, במקביל. ייתכן שהרשומה הראשונה בטבלה תעובד אחרי הרשומה האחרונה.

הקפד להימנע מיחסי תלות של סדר. מסיבה זו, לא ניתן להשתמש בפונקציות UpdateContext, Clear ו- ClearCollectForAll בתוך פונקציה משום שניתן להשתמש בהן בקלות לאחסון משתנים שניתן יהיה להחילם על אפקט זה. ניתן להשתמש בפונקציה Collect‎, אך סדר הוספת הרשומות אינו מוגדר.

כמה פונקציות שמשנות מקורות נתונים, כולל Collect‎,‏ Remove‎ ו- Update‎, מחזירות את מקור הנתונים שהשתנה כערך ההחזרה שלהם. ערכי החזרה אלה יכולים להיות גדולים ולצרוך משאבים משמעותיים אם מוחזרים עבור כל רשומה בטבלה ForAll . ייתכן שתמצא גם כי ForAll ערכי החזרה אלה אינם כפי שאתה מצפה, מכיוון שהם יכולים לפעול במקביל ועשויים להפריד בין תופעות הלוואי של פונקציות אלה לבין השגת התוצאה שלהן. אם הערך המוחזר ForAll מ- אינו בשימוש, לרוב זהו המצב של פונקציות שינוי נתונים, הערך המוחזר לא ייווצר ולא יהיו חששות לגבי משאבים או הזמנות. אך אם אתה ForAll משתמש בתוצאה של אחת מהפונקציות שמחזירות מקור נתונים, חשוב היטב כיצד תבני את התוצאה ותנסה אותה תחילה בערכות נתונים קטנות.

חלופות

פונקציות רבות ב- Power Apps יכולות לעבד יותר מערך אחד בכל פעם באמצעות טבלה של עמודה בודדת. לדוגמה, הפונקציה Len יכולה לעבד טבלה של ערכי טקסט, ומחזירה טבלת אורכי, באותו אופן, שיכולה ForAll . פעולה זו עשויה למנוע את הצורך ForAll בשימוש במקרים רבים, יכולה להיות יעילה יותר וקלה יותר לקריאה.

שיקול נוסף הוא ForAll שלא ניתן להקצאה בעוד שפונקציות אחרות עשויות להיות, כגון Filter.

הקצאה

בעת שימוש עם מקור נתונים, לא ניתן להקצות פונקציה זו. רק החלק הראשון של מקור הנתונים יאוחזר ולאחר מכן הפונקציה תוחל. ייתכן שהתוצאה לא תייצג את הסיפור השלם. ייתכן שתופיע אזהרה בעת העריכה כדי להזכיר לך לגבי מגבלה זו וכדי להציע מעבר לחלופות הניתנות להקצאה, כאשר ניתן. לקבלת מידע נוסף, עיין במבט כולל על הקצאה.

תחביר

ForAll(טבלה, נוסחה)

  • טבלה - חובה. הטבלה שבה מתבצעת הפעולה.
  • נוסחה - חובה. הנוסחה להערכה עבור כל הרשומות ב- Table‎.

דוגמאות

חישובים

הדוגמאות הבאות משתמשות במקור הנתוניםSquares‎:

דוגמה ל- Squares.

כדי ליצור מקור נתונים זה כאוסף, קבע את המאפיין OnSelect של פקד Button‎ לנוסחה זו, פתח את מצב התצוגה המקדימה ולאחר מכן בחר בלחצן:

ClearCollect( Squares, [ "1", "4", "9" ] )

נוסחה תיאור תוצאה
ForAll( ריבועים, Sqrt( ערך )

Sqrt( ריבועים)
עבור כל הרשומות בטבלת הקלט, מחשבת את השורש הריבועי של העמודה Value‎. ניתן להשתמש בפונקציה Sqrt גם עם טבלה של עמודה בודדת, כך שניתן לבצע דוגמה זו מבלי להשתמש ב- ForAll. דוגמה ל- Sqrt.
ForAll( ריבועים, צריכת חשמל( ערך, 3 ) עבור כל הרשומות בטבלת הקלט, מעלה בחזקה שלישית את העמודה Value‎. הפונקציה Power אינה תומכת בטבלאות של עמודה בודדת. לכן, ForAll יש להשתמש במקרה זה. דוגמה ל- Power.

שימוש בחיבור

בדוגמאות הבאות נעשה שימוש במקור הנתוניםExpressions:

דוגמא ל- Expressions.

כדי ליצור מקור נתונים זה כאוסף, קבע את המאפיין OnSelect של פקד Button‎ לנוסחה זו, פתח את מצב התצוגה המקדימה ולאחר מכן בחר בלחצן:

ClearCollect( Expressions, [ "Hello", "Good morning", "Thank you", "Goodbye" ] )

בדוגמה זו נעשה שימוש גם בחיבור של מתרגם Microsoft. כדי להוסיף חיבור זה ליישום שלך, ראה כיצד לעשות זאת במאמר נהל חיבורים.

נוסחה תיאור תוצאה
ForAll(Expressions, MicrosoftTranslator.Translate(Value, "es")) עבור כל הרשומות בטבלה Expressions, מתרגמת את תוכן העמודה Value‎ לספרדית (קיצור השפה הוא es). דוגמה עם הערך
ForAll(Expressions, MicrosoftTranslator.Translate(Value, "fr")) עבור כל הרשומות בטבלה Expressions, מתרגמת את תוכן העמודה Value‎ לצרפתית (קיצור השפה הוא fr). דוגמה עם הערך

העתקת טבלה

לעתים עליך לסנן, לעצב ולמיין נתונים וכן לטפל בהם. Power Apps מספק פונקציות רבות לביצוע פעולה זו, כגון מסנן, הוסף עמודות, ו- מיון. Power Apps מתייחס לכל טבלה כערך, ומאפשר לה לזרום דרך נוסחאות ולצרוך בקלות.

ולפעמים אתה רוצה ליצור עותק של תוצאה זו לשימוש מאוחר יותר, או שאתה מעוניין להעביר מידע ממקור נתונים לאחר. Power Apps מספק את הפונקציה Collect‎ להעתקת נתונים.

אבל לפני שתבצע את העותק הזה, חשוב היטב אם יש צורך בו. ניתן לטפל במצבים רבים על-ידי סינון ועיצוב של מקור הנתונים המשמש כבסיס לפי דרישה באמצעות נוסחה. החסרונות הטמונים ביצירת עותק כוללים:

  • שני עותקים של אותו מידע פירושו שאחד מהם יכול שלא להיכלל בסנכרון.
  • יצירת עותק יכולה לצרוך הרבה מזיכרון המחשב, רוחב הפס של הרשת ו/או זמן.
  • עבור רוב מקורות הנתונים, אין אפשרות להקצות העתקה, הגבלת מספר הנתונים שניתן להעביר.

בדוגמאות הבאות נעשה שימוש במקור הנתוניםProducts:

דוגמה למקור נתונים Products.

כדי ליצור מקור נתונים זה כאוסף, קבע את המאפיין OnSelect של פקד Button‎ לנוסחה זו, פתח את מצב התצוגה המקדימה ולאחר מכן בחר בלחצן:

ClearCollect( 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 }
    )
)

המטרה שלנו היא לעבוד עם טבלה נגזרת שכוללת רק את הפריטים שבהם הכמות שהתבקשה גדולה יותר מהכמות הזמינה, אשר עבורם אנו צריכים לבצע הזמנה:

דוגמה לטבלה נגזרת.

ניתן לבצע משימה זו בכמה דרכים שונות, אשר כולן מפיקות את אותה תוצאה, עם יתרונות וחסרונות שונים.

עיצוב טבלה לפי דרישה

אל תיצור עותק! אנו יכולים להשתמש בנוסחה הבאה בכל מקום שבו אנו זקוקים זה:

// Table shaping on demand, no need for a copy of the result
ShowColumns(
    AddColumns(
        Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
        "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
    ),
    "Product",
    "Quantity To Order"
)

טווח רשומה נוצר באמצעות הפונקציות Filter ו- AddColumns כדי לבצע את פעולות ההשוואה והחיסור, בהתאמה, עבור השדות 'Quantity Requested' ו- 'Quantity Available' של כל עמודה.

בדוגמה זו, הפונקציה Filter‎ ניתנת להקצאה. מצב זה חשוב, מכיוון שהיא יכולה למצוא את כל המוצרים שעומדים בקריטריונים, גם אם מדובר ברשומות בודדות מתוך טבלה שכוללת מיליוני רשומות. בשלב זה, אין אפשרות להקצות ShowColumns ו- AddColumns , ולכן המספר הממשי של המוצרים שיש להזמין מוגבל. אם אתה יודע שהגודל של תוצאה זו הוא תמיד קטן יחסית, גישה זו בסדר.

ומסיבה שלא עשינו עותק, אין עותק נוסף של המידע לניהול או לסתיו לא מעודכן.

ForAll לפי דרישה

גישה אחרת היא להשתמש בפונקציה ForAll כדי להחליף את פונקציות עיצוב הטבלה:

ForAll( Products,
    If( 'Quantity Requested' > 'Quantity Available',
        {
            Product: Product,
            'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
        }
    )
)

ייתכן שלחלק מהאנשים יהיה קל יותר לקרוא ולכתוב נוסחה זו.

שום חלק של ForAll הוא לא ניתן להקצאה. רק החלק הראשון של הטבלה Products מוערך, דבר שעשוי להיות בעיה אם טבלה זו גדולה. מכיוון שהפונקציה Filter‎ ניתנת להקצאה בדוגמה הקודמת, היא יכולה לפעול טוב יותר עם ערכות נתונים גדולות.

איסוף התוצאה

במצבים מסוימים, ייתכן שיהיה צורך בעותק של הנתונים. ייתכן שתצטרך להעביר מידע בין מקורות נתונים. בדוגמה זו, ההזמנות מתבצעות באמצעות הטבלה NewOrder‎ במערכת של הספק. עבור אינטראקציות משתמש במהירות גבוהה, מומלץ מטמון עותק מקומי של טבלה כך שלא יהיה השהיה בשרת.

אנו משתמשים באותו עיצוב טבלה כמו בשתי הדוגמאות הקודמות, אך אנו לוכדים את התוצאה באוסף:

ClearCollect( NewOrder,
    ShowColumns(
        AddColumns(
            Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
            "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
        ),
        "Product",
        "Quantity To Order"
    )
)
ClearCollect( NewOrder,
    ForAll( Products,
        If( 'Quantity Requested' > 'Quantity Available',
            {
                Product: Product,
                'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
            }
        )
    )
)

לא ניתן להאציל את ClearCollect ו Collect . כתוצאה מכך, כמות הנתונים שניתן להעביר באופן זה מוגבלת.

אסוף בתוך ForAll

לבסוף, אנו יכולים לבצע את האיסוף ישירות בתוך ForAll:

Clear( NewOrder );
ForAll( Products,
    If( 'Quantity Requested' > 'Quantity Available',
        Collect( NewOrder,
            {
                Product: Product,
                'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
            }
        )
    )
)

שוב, ForAll לא ניתן להקצות את הפונקציה בשלב זה. אם טבלת המוצרים שלנו גדולה, ForAll עיין בערכת הרשומות הראשונה בלבד וייתכן שנחמיץ מוצרים מסוימים שיש להזמין. אך עבור טבלאות שאנו יודעים שהם קטנים, גישה זו היא בסדר גמור.

שים לב שאנחנו לא לוקטים את התוצאה של ForAll. קריאות לאיסוף פונקציות המתבצעות בתוכה מחזירות את מקור הנתונים NewOrder עבור כל הרשומות, שיכולות להוסיף לנתונים רבים אם נקליט אותם.

מיפוי טבלה ברכיב

ראה מיפוי טבלאות.