טבלאות
הערה
Microsoft Power Fx הוא השם החדש של שפת הנוסחה של יישומי בד ציור. מאמרים אלה ימשיכו להתעדכן בזמן שאנו מזקקים את השפה מיישומי בד ציור, משלבים אותה עם מוצרי Microsoft Power Platform האחרים, והופכים אותם לזמינים כמוצר קוד פתוח. התחל עם סקירה כללית של Microsoft Power Fx כדי לערוך היכרות עם השפה.
ב- Microsoft Power Fx, באפשרותך לכתוב נוסחה שניגשת למידע ב- Microsoft Excel, SharePoint, SQL Server וכמה מקורות אחרים ששומרים נתונים ברשומות ובטבלאות. כדי לעבוד בצורה היעילה ביותר עם נתונים מסוג זה, סקור את המושגים העומדים בבסיס המבנים האלה.
- רשומה מכילה קטגוריה אחת או יותר של מידע על אדם, על מקום או על דבר. לדוגמה, רשומה עשויה להכיל את השם, את כתובת הדואר האלקטרוני ואת מספר הטלפון של לקוח בודד. כלים אחרים מתייחסים לרשומה כ"שורה" או כ"פריט".
- טבלה מכילה רשומה אחת או יותר המכילות את אותן קטגוריות מידע. לדוגמה, טבלה עשויה להכיל את השמות, את כתובות הדואר האלקטרוני ואת מספרי הטלפון של 50 לקוחות.
תוכל לבנות מגוון נוסחאות שמשתמשות בשם הטבלה כארגומנט, בדיוק כמו שנוסחה ב- Excel לוקחת הפניה אחת או יותר של תא כארגומנט. כמה נוסחאות ב- Power Fx מחזירות טבלה שמשקפת ארגומנטים אחרים שציינת. לדוגמה, ייתכן שתיצור נוסחה:
- כדי לעדכן רשומה בטבלה על-ידי ציון האבלה כאחד מהארגומנטים המרובים עבור הפונקציה Patch
- כדי להוסיף, להסיר ולשנות שמות של עמודות בטבלה על-ידי ציון אותה טבלה כארגומנט עבור הפונקציה AddColumns, DropColumns, או RenameColumns. אף אחת מהפונקציות האלו לא משנה את הטבלה המקורית. במקום זאת, הפונקציה מחזירה טבלה נוספת על סמך שאר הארגומנטים שציינת.
רכיבים בטבלה
רשומות
כל רשומה מכילה לפחות קטגוריית מידע אחת עבור אדם, מקום או דבר. הדוגמה שלעיל מראה רשומה עבור כל מוצר (שוקולד, לחם ומים) ועמודה עבור כל קטגוריית מידע (מחיר, כמות זמינה וכמות בהזמנה).
בנוסחה, אתה יכול להפנות רשומה אל עצמה, מחוץ להקשר של טבלה, באמצעות סוגריים מסולסלים. לדוגמה, רשומה זו { Name: "Strawberries", Price: 7.99 } אינה משויכת לטבלה. שים לב, שמות של שדה,כגון שם ומחיר בדוגמה ההיא, אינם מוקפים במירכאות כפולות.
שדות
שדה הוא פיסת מידע אינדיבידואלי ברשומה. תוכל להציג סוג שדה זה באופן חזותי כערך בעמודה עבור רשומה מסוימת.
בדיוק כמו עם פקד, אתה מפנה לשדה של רשומה באמצעות האופרטור . ברשומה. לדוגמה, First(Products).Name מחזיר את השדה שם עבור הרשומה הראשונה בטבלה מוצרים.
שדה יכול להכיל רשומה או טבלה אחרת, כפי שהדוגמה עבור הפונקציה GroupBy מראה. תוכל לבצע קינון לכמה רמות של רשומות וטבלאות שתרצה.
עמודות
עמודה מפנה לאותו שדה עבור רשומה אחת או יותר בטבלה. בדוגמה לעיל, לכל מוצר יש שדה מחיר, ומחיר זה נמצא באותו העמודה עבור כל המוצרים. לטבלה שלעיל יש ארבע עמודות, המוצגות אופקית בחלק העליון:
- שֵׁם
- מְחִיר
- כמות בהישג יד
- כמות בהזמנה
שם העמודה משקף את השדות באותה עמודה.
כל הערכים בעמודה הם מאותו סוג נתונים. בדוגמה שלעיל, העמודה "כמות זמינה" מכילה תמיד מספר ואינה יכולה להכיל מחרוזת, כגון "12 יחידות", עבור רשומה אחת. הערך של כל שדה יכול להיות גם ריק.
ייתכן שהתייחסת לעמודות כ"שדות" בכלים אחרים.
טבלה
טבלה מורכבת מרשומה אחת או יותר, ולכל רשומה יש כמה שדות עם שמות עקביים בכל הרשומות.
לכל טבלה שמאוחסנת במקור נתונים או באוסף יש שם שבו תשתמש כדי להפנות לטבלה ולהעביר אותו לפונקציות שמשתמשות בטבלאות כארגומנטים. טבלאות יכולות להיות גם תוצאה של פונקציה או נוסחה.
כמו בדוגמה הבאה, תוכל לבטא טבלה בנוסחה באמצעות הפונקציה Table עם מערך רשומות, שתוכל לציין בסוגריים מסולסלים:
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, Price) כדי להציג את הערך המינימלי בעמודה מחיר בטבלה קטלוג. נוסחאות אחרות מספקות טבלאות שלמות כערכי החזרה, כגון RenameColumns(Catalog, "Price", "Cost"), שמחזיר את כל הרשומות מהטבלה קטלוג אבל משנה את השם של העמודה מחיר לעלות.
בדיוק כמו במספרים, נוסחאות הכוללות טבלאות ורשומות מחושבות אוטומטית מחדש כאשר הטבלה או הרשומה הבסיסיות משתנות. אם עלות של מוצר בטבלה קטלוג נמוך יותר מהמינימום הקודם, ערך ההחזרה של הנוסחה Min ישתנה באופן אוטומטי כדי להתאים לעלות.
פונקציות טבלה ומאפייני פקד
שקול את הפונקציה Lower. אם המשתנה welcome מכיל את מחרוזת הטקסט "Hello, World", הנוסחה Lower( welcome ) מחזירה "hello, world". פונקציה זו אינה משנה בשום מצב את הערך במשתנה זה. Lower היא פונקציה טהורה בכך שהיא מעבדת רק קלט ומפיקה פלט. זה הכל; אין לה תופעות לוואי. כל הפונקציות ב- Excel ורוב הפונקציות ב- Power Fx הן פונקציות טהורות, המאפשרות חישוב מחדש של חוברת העבודה או של האפליקציה באופן אוטומטי.
Power Fx מציע קבוצת פונקציות הפועלות בטבלאות באותו אופן. פונקציות אלה משתמשות בטבלאות כקלט והן מסננות, ממינות, משנות, מפחיתות ומסכמות טבלאות שלמות של נתונים. למעשה, Lower ופונקציות רבות אחרות שבדרך כלל משתמשות בערך יחיד משתמשות גם בטבלה בעלת עמודה אחת כקלט.
פונקציות רבות משתמשות בטבלה של עמודה אחת כקלט שלהן. אם לטבלה שלמה יש רק עמודה אחת, אתה יכול לציין אותה בשמה. אם לטבלה יש כמה עמודות, באפשרותך לציין את אחת העמודות באמצעות התחביר Table.Column. לדוגמה, Products.Name מחזיר טבלה בעלת עמודה אחת של ערכי שם בלבד מהטבלה מוצרים.
תוכל לעצב מחדש טבלה כרצונך באמצעות הפונקציות AddColumns, RenameColumns, ShowColumns או DropColumns. שוב, פונקציות אלה משנות רק את הפלט שלהן ולא את המקור.
נוסחאות של אופן פעולה
פונקציות אחרות תוכננו במיוחד לשינוי נתונים ויש להן תופעות לוואי. מכיוון שפונקציות אלה אינן טהורות, עליך לבנות אותן בזהירות, והן אינן יכולות להשתתף בחישוב מחדש אוטומטי של ערכים ביישום. באפשרותך להשתמש בפונקציות אלה רק בתוך נוסחאות של אופן פעולה.
טווח רשומה
פונקציות מסוימות פועלות על-ידי הערכת נוסחה בכל הרשומות של טבלה בנפרד. תוצאת הנוסחה משמשת בדרכים שונות:
- AddColumns - נוסחה מספקת את הערך של השדה שנוסף.
- ממוצע, מקסימום, מינימום, סכום, StdevP, VarP - הנוסחה מספקת את הערך לצבירה.
- מסנן, חיפוש - הנוסחה קובעת אם יש לכלול את הרשומה בפלט.
- Concat - הנוסחה קובעת את המחרוזות לשרשור.
- Distinct - נוסחה מחזירה ערך, המשמש לזיהוי רשומות כפולות.
- ForAll - פורמולה יכולה להחזיר כל ערך, אולי עם תופעות לוואי.
- מיון - נוסחה מספקת את הערך למיין את הרשומות.
- עם - פורמולה יכולה להחזיר כל ערך, אולי עם תופעות לוואי.
בתוך נוסחאות אלה, תוכל להפנות לשדות הרשומה שמעובדת. כל אחת מהפונקציות הללו יוצרת "טווח רשומה" שבו מעריכים את הנוסחה, שבה שדות הרשומה זמינים כמזהים ברמה העליונה. באפשרותך גם להפנות למאפייני פקד ולערכים אחרים מכל היישום שלך.
לדוגמה, קח טבלה של מוצרים שממוקמת במשתנה כללי:
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' )
הארגומנט הראשון עובר Filter הוא טבלת הרשומות שבה הוא פועל והארגומנט הוא נוסחה. מסנן יוצר טווח רשומות להערכת נוסחה זו שבה השדות של כל רשומה זמינים, במקרה זה מוצר, כמות מבוקשת, ו כמות זמינה. תוצאת ההשוואה קובעת אם יש לכלול כל רשומה בתוצאה של הפונקציה:
אם נוסיף לדוגמה זו, נוכל חשב כמה יש להזמין מכל מוצר:
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
)
כאן נוסיף עמודה מחושבת לתוצאה. ל-AdColumns יש היקף רשומה משלו שהוא משתמש בו כדי לחשב את ההפרש בין מה שהתבקש לבין מה שזמין.
לבסוף, אנחנו יכולים להפחית את תווית התוצאה לעמודות הרצויות בלבד:
ShowColumns(
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
),
"Product",
"Quantity To Order"
)
שים לה, למעלה השתמשנו במירכאות כפולות (") במקומות מסוימים ובגרש יחיד במקומות אחרים ('). גרשים נדרשים בעת הפניה לערך של אובייקט, כגון שדה או טבלה, שבו השם של האובייקט מכיל רווח. אנחנו נשתמש במירכאות כפולות כשאנחנו לא מפנים לערך של אובייקט אלא מדברים עליו, במיוחד במקרים שבהם האובייקט לא קיים עדיין, כמו במקרה של AddColumns.
הבהרה
שמות שדות שנוספו עם טווח הרשומה עוקפים את אותם שמות ממקום אחר ביישום. כשזה מתרחש, אתה עדיין יכול לגשת לערכים מחוץ לטווח הרשומה בעזרת האופרטור @ disambiguation:
- כדי לגשת לערכים מטווחי רשומות מקוננות, השתמש באופרטור @ עם שם הטבלה המופעלת בעת השימוש בתבנית זו:
טבלה[@שם שדה] - כדי לקבל גישה לערכים כלליים, כגון מקורות נתונים, אוספים ומשתני הקשר, השתמש בתבנית [@ObjectName] (ללא הקצאת טבלה).
אם הטבלה שעליה מבצעים פעולה היא ביטוי, כגון Filter(Table, ... ), אז לא ניתן להשתמש באופרטור ההבהרה. רק טווח הרשומה הפנימי ביותר יכול לגשת לשדות מביטוי טבלה זה, בכך שלא ייעשה שימוש באופרטור ההבהרה.
לדוגמה, נניח שיש לנו אוסף X:
תוכל ליצור אוסף זה בעזרת ClearCollect( X, [1, 2] ).
הוסף אוסף נוסף Y:
תוכל ליצור אוסף זה בעזרת ClearCollect( Y, ["A", "B"] ).
בנוסף, הגדר משתנה ששמו Value באמצעות הנוסחה: UpdateContext( {Value: "!"} )
בוא נחבר את הכל. בהקשר זה, הנוסחה הבאה:
Ungroup(
ForAll( X,
ForAll( Y,
Y[@Value] & Text( X[@Value] ) & [@Value]
)
),
"Value"
)
מפיקה את הטבלה הזו:
מה מתרחש כאן? הפונקציה ForAll החיצונית ביותר מגדירה טווח רשומה עבור X, מאפשרת גישה אל השדה ערך של כל רשומה בזמן העיבוד. ניתן לגשת אליו באמצעות המילה ערך או באמצעות 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 וקבוצת רשומות. באפשרותך לבטא את הטבלה שבתחילת נושא זה באמצעות נוסחה זו:
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 } )
ומחזיר את הטבלה הזו: