none
איך עושים

    שאלה

  • אני לא מחפש פיתרון סופי אלא הכוונה. אשמח לעזרה.

    יש לי טבלא שבנויה מעמודה אחת. (נלקחה מאקסל)

    בעמודה כל כמה שורות יש מידע שאני צריך לשייך לשורה מסויימת מתוך X שורות.

    למשל:

    נניח שהמידע נראה כך:

    שם - רועי

    תפקיד  - מנהל

    טלפון 03-44444

    סלולארי 050544444

    ------------

    שורת רווח

    ----------

    שם דוד

    תפקיד אורח

    ואז חמש שורות עם נתוניים שונים וכך הלאה...

    כאשר בכל פעם יכולים להיות יותר או פחות נתונים בין השמות אבל תמיד יהיו לי שמות.

     

    אני רוצה טבלא שבא אני אוכל לחבר לכל שם את התפקיד שלו. 

     

    מה שחשבתי ואשמח לדעת אם זה נשמע לכם הגיוני.

    אני אוסיף מפתח שיתן לי מספור של כל הטבלא.

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

     

    האם מה שאני חושב הגיוני?  או שנראה לכם כי יש דרך טובה יותר לעשות דר שכזה.

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

    תודה רועי


    רועי
    יום שני 14 מרץ 2011 13:47

תשובות

  • א. תודה על ההסבר.

    ב. בסופו של דבר בניתי את זה בSQL וזה היה פחות מסובך משחשבתי.  מריץ 40K רשומות בבערך 8 שניות. שזה בסדר בחינתי.

    ג. ב. קרה לפני שקראתי את התגובה האחרונה שלך :)

     

    תודה רבה.


    רועי
    • סומן כתשובה על-ידי Roy bloom יום רביעי 16 מרץ 2011 06:46
    יום שלישי 15 מרץ 2011 12:34

כל התגובות

  • הי רועי,

    למה לא להמיר את קובץ ה- excel לפורמט CSV לטעון אותו בצורה טבלאית?

    יהיה לך הרבה יותר פשוט.

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

    בהצלחה

     


    אסף שלם
    יום שני 14 מרץ 2011 14:25
  • אני דווקא הייתי מציע לך לנצל את היכולת ופשוטות העבודה עם האסל תחילה ורק אז לבנות טבלה בפורמט הגיוני ונכון במסד הנתונים

    שלב א: טיוב נתונים באקסל

    - צור הפרדה של סוג הנתון והערך של הנתון בכל המקומות בהן הוא לא מופיע. למשל אתה כותב שבשם יש סימון מקף מפריד בין התפקיד לבין הערך (השם עצמו) בעוד למשל במקרה של טלפון אין הפרדה זהה. לכן שלב ראשון על ידי הרצת החלפה פשוטה של טקסט בטקסט עם הפרדה ניתן למשל לטייב (לתקן) את הנתונים כך שכל הנתונים יופיעו בצורת [סוג] - [ערך]
    - עתה נוכל לבצע בעזרת האקסל פעולה פשוטה של SPLIT של העמודה שלך ל2 עמודות:
    בצע SPLIT של עמודה לפי הסימון -
    (באקסל 2007 עברית: סמן עמודה... בחר ב"נתונים"... בחר ב"טקסט לעמודות")
    התוצאה תהיה עמודה של הגדרת הנתון של הרשומה ועמודה של הערך

    שלב ב: יצירת קובץ CSV והעברת הטבלה ל SQL למשל (למרות שאפשר כמובן לעבוד עם תוכנות כמו אקסס או אפילו להישאר עם האקסל... אבל אנחנו בפורום SQL ואני מניח שזה מה שאתה רוצה וזו בטח הדרך הכי טובה)

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

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

    * הערה: PIVOT מחייב עבודה עם SQL ואינו קיים באקסס לידיעתי (לא סגור על הגרסה האחרונה ומה יהיה בעתיד).

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

    יום שלישי 15 מרץ 2011 06:25
    משיב
  • א. תודה על התגובה.

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

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

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

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

     

    משהו פה לא ממש מתחבר לי.

     

    מצ"בה דוגמה יותר טובה

     

    Operator Data
    -------------
    OperatorName - 
    Meeting Room Data
    -----------------
    Reservation Name - XXXX
    Id - 1234
    Conf. Entry Password - 4444
    Web/Chairperson Password - 0000
    Audio Alg - 56 (G711)
    IVR Service Enabled - Yes
    IVR Service Name - 6v
    Operator Conference - No
    Audio Mix Depth - 3
    Participants - 
    ------------------------------------------------------
    Operator Data
    -------------
    OperatorName - 
    Meeting Room Data
    -----------------
    Reservation Name - AAAA
    Id - 1254
    Conf. Entry Password - 1111
    Web/Chairperson Password - 00000
    Audio Alg - 56 (G711)
    IVR Service Enabled - Yes
    IVR Service Name - 6v-r
    Operator Conference - No
    Audio Mix Depth - 3
    Participants - 


    רועי
    יום שלישי 15 מרץ 2011 09:11
  • הי רועי,

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

    מה המוטיבציה לפרסס את ה- Data ב- SQL? למה לא להפעיל מקרו שמבצע את הפעולה בצד של ה- excel ויוצר את התוצאה הרצויה?

    כל נושא ה- String manipulation ב- VBA הרבה יותר יעיל.

    בהצלחה 


    אסף שלם
    יום שלישי 15 מרץ 2011 10:35
  • א. לא חשבתי על מקרו בVB .  וכמובן שמדובר על תהליך לא חד פעמי לכן חשבתי שJOB יעשה את זה לא רע.

    ב. מדוע SQL יבצע את הפעולה פחות טוב ממקרו. לא מכיר String manipulation . אחפש עליו בגוגל.

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

     

    תודה על התגובה.


    רועי
    יום שלישי 15 מרץ 2011 11:07
  • הי רועי,

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

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

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

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

    לסיכום סדר הפעולות:

    1. קבלת קובץ excel.

    2. הפעלת מקרו ליצירת טבלה ואיכלוס נתונים בפורמט הרצוי.

    3. טעינה ל-SQL.

    4. יאלה הפועל, בהצלחה.

     


    אסף שלם
    יום שלישי 15 מרץ 2011 11:50
  • א. תודה על ההסבר.

    ב. בסופו של דבר בניתי את זה בSQL וזה היה פחות מסובך משחשבתי.  מריץ 40K רשומות בבערך 8 שניות. שזה בסדר בחינתי.

    ג. ב. קרה לפני שקראתי את התגובה האחרונה שלך :)

     

    תודה רבה.


    רועי
    • סומן כתשובה על-ידי Roy bloom יום רביעי 16 מרץ 2011 06:46
    יום שלישי 15 מרץ 2011 12:34
  • העיקר שהסתדר.

    אתה יכול לסגור את ה-פוסט.

    יום טוב


    אסף שלם
    יום שלישי 15 מרץ 2011 12:49