M365Con 2027 – כנס אונליין חינמי · 11–22 Jan 2027 · 120 sessions→ m365con.net

בלוג · Mirko Peters

ייבוא נתונים נקי: כוחם של מפתחות חלופיים ב-Dataverse

By ·

ברוכים השבים לפודקאסט ולבלוג הנלווה! אם אי פעם בהיתם בסביבת Power Platform שנחנקת מאלפי רשומות כפולות, הפניות להורה שחסרות והודעות שגיאה מתסכלות בחיפוש, מיד לאחר העברת נתונים שגרתית, אתם בוודאי לא לבד. יישומים ארגוניים רבים מתחילים בגישה של גיליון אלקטרוני, שבה Microsoft Dataverse משמש כטבלת מסד נתונים מתוחכמת שבה הכול מותר, ורק כשנתוני הייצור גדלים, כל הארכיטקטורה מתחילה להתפרק.

Automatically translated with AI from the original post. Read the English original

▶ BLOGClean Data Imports: ThePower of Alternate Keys…M365.FM
Titelbild: Clean Data Imports: The Power of Alternate Keys in Dataverse

ברוכים השבים לפודקאסט ולבלוג הנלווה! אם אי פעם בהיתם בסביבת Power Platform שנחנקת מאלפי רשומות כפולות, הפניות להורה שחסרות והודעות שגיאה מתסכלות בחיפוש, מיד לאחר העברת נתונים שגרתית, אתם בוודאי לא לבד. יישומים ארגוניים רבים מתחילים בגישה של גיליון אלקטרוני, שבה Microsoft Dataverse משמש כטבלת מסד נתונים מתוחכמת שבה הכול מותר, ורק כשנתוני הייצור גדלים, כל הארכיטקטורה מתחילה להתפרק.

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

למה בנייה פשוטה נשברת

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

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

הארכיטקטורה במבט מהיר

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

  1. מודל: נרמלו את הישויות המרכזיות שלכם ומפו בבירור טבלאות של 1:N, N:N ושל היררכיות, לפני שכותבים שורת קוד אחת.
  2. לוגיקה: העדיפו ביצוע בצד השרת, כגון כללים עסקיים, plug-ins סינכרוניים וזרימות עבודה בזמן אמת, עבור כללים בלתי משתנים שאסור לעקוף לעולם. שמרו זרימות ענן לתזמור והתראות.
  3. אוטומציה: השתמשו בשדות מחושבים ובשדות מצטברים (rollup) במקומות שבהם הקשרים חזקים, תוך הקפדה לא להעתיק מיותר מקור אמת.
  4. אינטגרציה: השתמשו תמיד במפתחות חלופיים (מזהים עסקיים בעלי משמעות) כדי לבצע upsert בבטחה ולאכוף ייחודיות קפדנית בגבולות החיצוניים של המערכת.
  5. ניטור ותצפיתיות: רשמו ביומן פעולות של כללים, החלטות בזרימות ורענונים של שדות מצטברים. בנו לוחות מחוונים ייעודיים לשימוש ולעמידה ב-SLA, כדי לנטר את בריאות המערכת באופן יזום.

דפוסי תכנון קשרים (מוכנים להעתקה)

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

  • היררכיה: אזור (1) לחנות (N) לעסקה (N). הצבירות זורמות בקלות כלפי מעלה, למשל חישוב של Region.Sum(Store.Sum(Transaction.Amount)).
  • בעלות ואבטחה: יחידה עסקית (1) לחשבון (N). שלבו זאת עם מודלים של בעלות צוותית לשיתוף מדויק ולהיקף תפקידי אבטחה.
  • הפניה: מוצר (1) לפריט מחירון (N), ומטבע (1) לכל שדות המטבע.
  • Event sourcing: הזמנה (1) לשורת הזמנה (N), בשילוב עם טבלת OrderStatusHistory לתחזוקת נתיב ביקורת איתן.
  • רבים-לרבים: איש קשר לקמפיין דרך טבלת שיוך מותאמת אישית, בכל מקרה שבו צריך לאחסן מאפיינים על עצם הקשר עצמו, כמו תפקיד ספציפי או תאריך אינטראקציה.

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

לוגיקה עסקית מהמעלה הראשונה (במקום הנכון)

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

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

שדות מחושבים & סיכום שאינם משקרים

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

כדי לעזור למשתמשים ולמנהלים לסמוך על הערכים הללו, תמיד כללו את השדות "Last Recalculated On" ו-"Rollup Status" ברשומות הראשיות שלכם. התוספת הפשוטה הזו מסירה אי-בהירות ומעניקה לצוות התמיכה שלכם נראות מיידית לגבי עדכניות הנתונים.

מפתחות חלופיים: ייבוא שנשאר נקי

זו אבן היסוד של אינטגרציית נתונים איתנה. בעת ייבוא נתונים ממערכות מדור קודם, ממערכות ERP או מ-API חיצוניים, אתם צריכים מזהים עסקיים אמינים, כגון VendorCode, EmployeeID, SKU, ExternalCaseId או Email, ולא GUID פנימיים שמשתנים בין סביבות.

על ידי יצירת מפתחות חלופיים ייחודיים בעמודות אלה ואימות איכות הנתונים מראש, אתם פותחים את הכוח האמיתי של Dataverse API: פעולת Upsert. פעולת upsert בודקת את המפתח החלופי; אם הרשומה קיימת, היא מעדכנת אותה, ואם לא, היא יוצרת רשומה חדשה. כך נמנעים לחלוטין מרשומות כפולות בעת ייבוא. בתרחישים מורכבים, כמו התאמת עובד בין חברות-בנות, ניתן להגדיר מפתחות מורכבים באמצעות מספר עמודות, כגון CompanyCode בשילוב עם EmployeeNumber. שמרו תמיד על מפתחות אלה בלתי ניתנים לשינוי, ואם צרכים עסקיים מחייבים שינוי, הציגו מפתח יציב מלאכותי (surrogate) בשילוב טווחי תאריכים של ValidFrom ו-ValidTo.

רשימת בדיקה לביצועים (ניצחונות מהירים)

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

  • צרו אינדקס לעמודות חיפוש (lookup) שנמצאות לעיתים קרובות במסננים, ושמרו על תצוגות מונחות מודל רזות על ידי כלילת רק העמודות שהמשתמשים באמת צריכים לראות.
  • החליפו נוסחאות שפועלות על כל הגלריה באפליקציות קנבס בשאילתות ניתנות לאצילה (delegable), והעדיפו תמיד סינון ומיון בצד השרת.
  • הגבילו שרשראות ארוכות של תוספים סינכרוניים. תעדו זמני ביצוע בקפידה, ופצלו לוגיקה כבדה למשימות אסינכרוניות.
  • בצעו אצווה של פעולות הנתונים שלכם באמצעות ExecuteMultiple או באמצעות פעולות עיבוד אצווה בתהליכי הענן שלכם.
  • העבירו טרנספורמציות נתונים כבדות ל-Dataflows Gen2 או ל-Microsoft Fabric כשמדובר בהיקף אנליטי עצום.

ממשל & עמידות

יישום ארגוני שווה רק כמו מודל הממשל שלו. שמרו על צינור פריסה קפדני שעובר מפיתוח לבדיקות ולייצור באמצעות פתרונות מנוהלים (managed solutions). נהלו בקרת מקור לארטיפקטים של הפתרון באמצעות Power Platform CLI (PAC CLI), ודרשו סקירות עמיתים לכל התוספים המותאמים אישית ולכל תהליכי הענן.

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

תוכנית יישום ב-12 שלבים (פיילוט תוך 1–2 ימים)

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

  1. שרטטו על לוח את תרשים הישויות והקשרים (ERD) הכולל ישויות, מפתחות, קשרים ומודלי בעלות.
  2. זהו את מזהי העסק המרכזיים שלכם וצרו את המפתחות החלופיים הנדרשים.
  3. בנו את הטבלאות המרכזיות שלכם וקבעו את הקשרים הנדרשים, תוך הזנת נתוני הייחוס הראשוניים.
  4. הוסיפו שדות מחושבים ושדות סיכום עבור מדדי הביצוע המרכזיים (KPI) שלכם.
  5. יישמו אימותים בצד השרת עבור כללים עסקיים קריטיים שאסור לאפשר את מעברם.
  6. צרו תצוגות מונחות מודל עם מסננים הניתנים לאצילה, וצרו אינדקס לתנאים הנפוצים שלכם.
  7. שלבו את Power Automate אך ורק לצורך תזמור משימות והתראות.
  8. ייבאו פלח נתונים מבוקר באמצעות פעולות upsert, בעזרת מפתחות חלופיים שלכם.
  9. חברו את טבלת רישום הטלמטריה שלכם, ובנו דף פשוט לניטור תקינות המערכת.
  10. בצעו מבחן קנה מידה שמריץ נפח הגבוה פי 5 עד 10 מהנפח הצפוי, וכווננו את האינדקסים ואת תדירות צבירות הנתונים בהתאם.
  11. ארזו את העבודה שלכם לפתרון מנוהל והעבירו אותו לסביבת הבדיקות (Test) שלכם.
  12. כתבו מדריך הפעלה מקיף הכולל נהלי ייבוא, מדיניות לסבב מפתחות ושלבי התאוששות מאסון.

תקלות נפוצות (ופתרונות)

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

  • כפילויות אחרי ייבוא: בדרך כלל נגרמות מחוסר במפתחות חלופיים או ממפתחות חלשים. כדי לתקן, הגדירו מפתחות מתאימים, הריצו מחדש את משימות ה-upsert ומזגו כפילויות קיימות.
  • צבירות שגויות או לא מעודכנות: לרוב מופעלות על ידי קשרים אופציונליים, לוגיקה מעגלית או חישובים מחדש שנחנקו בקצב. פשטו את גרף הקשרים, תזמנו חישובים מחדש באופן קבוע והוסיפו מדד KPI לעדכניות הנתונים.
  • כללים לא עקביים: קורה כאשר אותה לוגיקה מפוזרת בטעות על פני מספר זרימות ענן. אחדו לוגיקה זו לכלל יחיד בצד השרת, ובצעו refactoring לזרימות כך שיפעלו אך ורק כמתזמנות.
  • גלריות איטיות: נגרמות מנוסחאות ב-canvas app שאינן ניתנות לאצילה (non-delegable). עברו לתנאים מסוג delegable, צמצמו את מספר העמודות המוצגות וחשבו מראש ערכים במידת הצורך.

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

כדי לשמוע עוד טיפים מקצועיים, פירוטים ארכיטקטוניים ועומק טכני על בניית פתרונות איתנים בענן של Microsoft, הקפידו לצפות בפרק הפודקאסט הקשור: Customize Dataverse for Complex Business Apps. נתראה בפרק הבא!

Entities in this article

Dataverse Canvas app Dashboards Power Automate Power Platform environment Data lineage Observability Power Platform CLI Telemetry

Related articles

RSS