שתף באמצעות


הפונקציה ForAll

חל על: יישומי בד ציור זרימות שולחן עבודה יישומים מונחי-דגמים Power Pages Power Platform CLI

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

תיאור

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

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

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

ערך החזרה

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

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

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

ביצוע פעולה

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

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

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

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

חלופות

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

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

הקצאה

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

תחביר

ForAll( Table, Formula )‎

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

דוגמאות

חישובים

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

דוגמה ל- Squares.

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

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

נוסחה תיאור תוצאה
ForAll( Squares, Sqrt( Value ) )

Sqrt( Squares )
עבור כל הרשומות בטבלת הקלט, מחשבת את השורש הריבועי של העמודה Value‎. ניתן להשתמש בפונקציה Sqrt‎ גם עם טבלה בעלת עמודה יחידה, כך שאפשר לבצע דוגמה זו ללא שימוש ב- ForAll‎. דוגמה ל- Sqrt.
ForAll( Squares, Power( Value, 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‎ אינו ניתן להקצאה. רק החלק הראשון של טבלת מוצרים יעבור הערכה, מה שעשוי להוות בעיה אם הטבלה גדולה. מכיוון שהפונקציה 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

לבסוף, ניתן לבצע את הפונקציה Collect‎ ישירות בתוך ForAll‎:

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

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

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

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

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