התקשרו אלינו: 052-2928949
ימים א'-ה' בין השעות 9:00-17:00

התקשרו אלינו: 052-2928949 א-ה 9:00-17:00

פניה לעמודה על פי מספרה הסידורי באמצעות M Language

Power Query

פניה לעמודה על פי מספרה הסידורי באמצעות M Language

Power Query

פניה לעמודה על פי מספרה הסידורי

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

נקבל את הטבלה הבאה:

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

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

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

שלב ראשון – שליפת שערי המטבע מבנק ישראל

נעתיק את כתובת האינטרנט שבה מופיעים שערי החליפין, ונדביק אותה ב Power Query – 'מהרשת':

נבחר את הטבלה המתאימה, ונלחץ על 'המרת נתונים'

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

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

כתיבת קוד M לשינוי שם העמודה

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

= Table.RenameColumns(#"Removed Columns" ,{{Table.ColumnNames(#"Removed Columns" ){2}, "שער יציג"}})

טיפ

בפקודה לעיל, אנו פונים לטבלה, שעליה נרצה לבצע את הפעולות.
במקרה שלנו, הטבלה שאליה אנחנו פונים היא הטבלה שנוצרה בסיומו של השלב הקודם ,שבו הסרנו את העמודות המיותרות, ושמה Removed Columns

מכיוון שהשם מורכב משתי מילים, כאשר נפנה אליו, נצטרך לעטוף אותו במרכאות ולהוסיף לפניו סולמית:

#"Removed Columns"

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

= Table.RenameColumns(RemovedColumns ,{{Table.ColumnNames(RemovedColumns ){2}, "שער יציג"}})

ועכשיו, בואו נפצח את הקוד

Table.RenameColumns – זו הפקודה לשינוי שם העמודה.
היא מבקשת לקבל שלושה פרמטים:

  1. את שם הטבלה שאותה נרצה לשנות
  2. את העמודה שאותה נרצה לשנות
  3. את השם החדש

ראשית, נראה כיצד לפנות לשם הטבלה ולשם החדש (פרמטרים 1 ו-3), משום שהם ברורים ומובנים מאליהם, ורק לאחר מכן נסביר את הפרמטר השני, שם מתבצע הקסם.

פרמטר ראשון – שם הטבלה:

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

פרמטר שלישי – השם החדש:

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

הפרמטר השני – העמודה:

כאן מגיע השלב המתוחכם – אנחנו רוצים לפנות לעמודה, אך מכיוון שהתאריך מקודד בתוכה, נצטרך לפנות אליה על פי המיקום שלה ולא על פי שמה,
ולכן נצטרך לשלב בתוך הנוסחה לשינוי שם העמודה פקודה נוספת, שתדע לשלוף את כל הכותרות הקיימות בטבלה.
הפקודה הזו היא Table.ColumnNames, שמקבלת כפרמטר שם טבלה (במקרה שלנו – RemovedColumns), ויוצרת רשימה (list) של העמודות הקיימות בה:

אנחנו רוצים לפנות אל השורה השלישית, אך מכיוון ש Power Query עובד על בסיס 0 ולא על בסיס 1, מספרה של השורה השלישית הוא 2.
נפנה אל הנתון הזה על ידי הוספת המיקום הרצוי בתוך סוגריים מסולסלים, כך:

= Table.ColumnNames(RemovedColumns){2}

וזו התוצאה:

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

שלב אחרון – קוסמטיקה

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

דילוג לתוכן