הפונקציה 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:
כדי ליצור מקור נתונים זה כאוסף, קבע את המאפיין OnSelect של פקד Button לנוסחה זו, פתח את מצב התצוגה המקדימה ולאחר מכן בחר בלחצן:
ClearCollect( Squares, [ "1", "4", "9" ] )
נוסחה | תיאור | תוצאה |
---|---|---|
ForAll( Squares, Sqrt( Value ) ) Sqrt( Squares ) |
עבור כל הרשומות בטבלת הקלט, מחשבת את השורש הריבועי של העמודה Value. ניתן להשתמש בפונקציה Sqrt גם עם טבלה בעלת עמודה יחידה, כך שאפשר לבצע דוגמה זו ללא שימוש ב- ForAll. |
![]() |
ForAll( Squares, Power( Value, 3 ) ) | עבור כל הרשומות בטבלת הקלט, מעלה בחזקה שלישית את העמודה Value. הפונקציה Power אינה תומכת בטבלאות בעלות עמודה יחידה. לכן, יש להשתמש בפונקציה ForAll במקרה זה. |
![]() |
שימוש בחיבור
בדוגמאות הבאות נעשה שימוש במקור הנתונים 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:
כדי ליצור מקור נתונים זה כאוסף, קבע את המאפיין 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 עבור כל הרשומות, מה שיכול להוסיף נתונים רבים אם היינו לוכדים אותם.
מיפוי טבלה ברכיב
ראה מיפוי טבלאות.
משוב
https://aka.ms/ContentUserFeedback.
בקרוב: במהלך 2024, נפתור בעיות GitHub כמנגנון המשוב לתוכן ונחליף אותו במערכת משוב חדשה. לקבלת מידע נוסף, ראה:שלח והצג משוב עבור