معادن · الصيانة الميكانيكية PAP · جهاز الدوام

دليل بناء حضور PAP

من ملف الموظفين إلى داشبورد منشور للإدارة. كل خطوة فيها: وش تسوين، وليش. علّمي على الخطوة لما تخلصينها، والصفحة تتذكر وين وقفتي.

6 مراحل بالترتيب المطلوب: Excel 365 · Power BI Desktop · صلاحية OneDrive ملف الثيم: Maaden2026_PBI_1_Light_Operational.json

قبل ما تبدين

الصورة الكاملة

أربع طبقات، وكل طبقة تقرأ من اللي قبلها. ما فيه شي ينكتب مرتين.

PAP_Mech_Employee_Master.xlsxالموظفينسطر لكل موظف. رقم معادن هو المفتاح.
Daily Attendance.xlsmالحضورخطة الشفت، خطة الإجازات، السجل اليومي.
Power BI Desktopالنموذجيربط الجداول، ويحسب الساعات والنسب.
Power BI Serviceالإدارةمنشور أونلاين، يتحدث كل يوم لحاله.

قرارات التصميم، ومن وين جات

القرارليش
جداول وصف (الموظفين، التاريخ، الشفت) وجداول أحداث (الحضور، الإجازات)هذا نموذج Star Schema اللي توصي فيه مايكروسوفت: جداول الوصف للفلترة، وجداول الأحداث للجمع والعد.
سطر واحد لكل موظف × يوم × شفت في السجلكل جدول أحداث لازم يكون بنفس الدقة (grain)، وإلا الأرقام تتضاعف.
الخطة مسبقًا، والتسجيل للاستثناءالشفت والأوف والإجازة مخططة، فالمسؤول يغير اللي خالف الخطة بس. أقل أخطاء وأسرع إدخال.
كل صفحة تجاوب سؤال واحد، و3 إلى 5 أرقام فوقالأهم فوق يمين (لأن القراءة عربية)، والتفاصيل تحت. الأعمدة للمقارنة بدل الدونات.
الساعات تنحسب، ما تنكتبالمسؤول يكتب الساعات الزيادة بس. ساعات الشفت تجي من جدول الشفتات.

الجواب على سؤالك

الأوفرتايم والأوف: كيف ينحسبون

وش يقول نظام العمل السعودي

المادة 98
8 س / يوم

و48 ساعة بالأسبوع. في رمضان 6 و36 للمسلمين.

المادة 107
أجر الساعة + 50%

من الأجر الأساسي، لكل ساعة فوق الحد. ويجوز تعويضها بإجازة بموافقة العامل.

المادة 104
يوم راحة / أسبوع

مدفوع، لا يقل عن 24 ساعة متصلة. الجمعة أصلًا، ويجوز استبداله.

الشغل يوم الراحة
يُحسب أوفرتايم

أي ساعة يشتغلها في يوم راحته.

يعني: الشفت 12 ساعة × 6 أيام = 72 ساعة بالأسبوع، منها 24 ساعة فوق الحد النظامي حتى لو داوم شفته بالضبط. وأي ساعة يجلسها بعد نهاية الشفت تنضاف فوقها.

ليش ملفك الحالي ما يقدر يحسبها

السجل فيه حالة الموظف بس (On Duty, Off…)، وما فيه ولا ساعة. فنضيف ثلاث معلومات، واحدة منها بس ينكتبها المسؤول:

المعلومةوينمين يكتبها
ساعات كل شفت (الداي 12، النايت 12) ووقت بدايته ونهايتهجدول tblShift في Keysأنتي، مرة وحدة
الساعات الزيادة بعد الشفت، مثلًا 2عمود ExtraHours في سجل الحضورالمسؤول، بس لما يصير
الحد النظامي 8 ساعاتجدول tblSettings في Keysأنتي، مرة وحدة

والباقي ينحسب لحاله في Power Query:

WorkedHours  = ShiftHours + ExtraHours     // إذا الحالة حضور، وإلا 0
HoursAbove8  = max(0, WorkedHours − 8)      // الأوفرتايم النظامي لليوم

مثال: أسبوع موظف داي

اليومالحالةساعات الشفتExtraHoursWorkedHoursفوق 8
الأحدOn Duty120124
الاثنينOn Duty122146
الثلاثاءOn Duty120124
الأربعاءOn Duty120124
الخميسOn Duty120124
الجمعةOff0000
السبتOn Duty120124
المجموع27426

في الداشبورد تشوفين الرقمين منفصلين:

  • أوفرتايم الجدول = 24 ساعة: مبني داخل شفت الـ 12 ساعة، ومتوقع.
  • ساعات زيادة = 2: هذي اللي تستاهل متابعة، لأنها فوق الخطة.
  • المجموع النظامي = 26 ساعة فوق الـ 8.

الأوف الأسبوعي: نعم، لازم

النظام يلزم بيوم راحة كل أسبوع. وقاعدتكم أوضح منه: بعد كل 6 أيام يوم أوف، ويكون جمعة أو سبت. نتابعه بثلاث فحوصات تلقائية:

الفحصكيف ينكشفوش يطلع
أوف في غير الجمعة أو السبتالحالة Off واليوم مو جمعة ولا سبتيُحسب غياب مثل ما قلتي
أسبوع بدون أوف7 أيام حضور في نفس الأسبوع (من الأحد إلى السبت)مخالفة أوف باسم الموظف
داوم في يوم أوفه المخططالحضور في اليوم المكتوب له في WeeklyOffشغل يوم راحة وساعاته أوفرتايم

قبل ما تبنين: تأكدي من هذي مع HR أو المقاول

  1. الأوفرتايم يُحسب بعد 8 ساعات (النظام) أو بعد 12 ساعة (نهاية الشفت) حسب عقد المقاول؟ الداشبورد يعرض الاثنين، بس لازم تعرفين أيهم المعتمد للدفع.
  2. وقت بداية ونهاية شفت الداي والنايت بالضبط.
  3. مين يعتمد الساعات الزيادة قبل ما تنكتب؟
  4. ساعات رمضان للمقاولين.
  5. الحد السنوي للأوفرتايم: المصادر تذكر 720 ساعة، وبعضها يقول ما فيه حد موحد. خذي الرقم المعتمد من HR.

المرحلة 1

ملف الموظفين

هذا جاهز تقريبًا. المطلوب تحطينه في مكانه الصح وتثبتين أسماءه.

  1. حطي الملف في مجلد OneDrive المشترك
    نفس المجلد اللي فيه ملف الحضور. ليش: الباور بي آي أونلاين يقرأ من OneDrive بدون أي برنامج وسيط.
  2. تأكدي إن اسم الجدول tblEmployees
    اضغطي أي خلية في الجدول ← Table Design ← Table Name. ليش: الباور بي آي يلقى الجدول باسمه، ولو تغير الاسم ينكسر التحديث.
  3. لا تغيرين أسماء الأعمدة بعد اليوم
    تقدرين تضيفين أعمدة، بس لا تعيدين تسمية الموجود. ليش: كل خطوة في Power Query تنادي العمود باسمه.
  4. أضيفي عمود AttendanceRequired
    بعد Craft، ومعادلته تجيب القيمة من جدول الكرافت في Keys:
    =XLOOKUP([@Craft], tblCraft[Craft], tblCraft[AttendanceRequired], "Yes")
    ليش: الـ Fire Watch والـ Fabricator والـ Welder يطلعون من حسابات الحضور لحالهم، وأي كرافت جديد تحددين له مرة وحدة.
  5. خلصي شيت Needs Review بالتدريج
    أهمها: الـ 13 اللي ما عندهم رقم معادن. ليش: اللي بدون رقم ما ينربط حضوره بأي شي.

المرحلة 2

جداول ملف الحضور

في ملفك Daily Attendance نضيف أربع جداول. كل جدول: حوّليه لجدول بـ Ctrl+T وسمّيه بالاسم المكتوب بالضبط.

جداول Keys الجديدة

tblStatus: وش تعني كل حالة في الحساب
StatusCountsAsتُحسب ساعات؟معناها
On DutyPresentنعمداوم شفته
Shift ChangedPresentنعمداوم، بس بغير شفته الافتراضي
PermissionPresentنعميداوم بمكان ثاني
AbsentAbsentلاغياب
Sick LeaveLeaveلامرضية
OffOffلاأوفه المخطط
Off (Unplanned)Offلاأوف بغير يومه، ويتعلم

ليش جدول بدل ما نكتب الحالات في المعادلات: لو أضفتي حالة جديدة بكرة، تضيفينها سطر هنا وكل الحسابات تفهمها. والإجازة ما هي هنا لأنها تجي من خطة الإجازات.

tblShift
ShiftStartTimeEndTimeShiftHours
Day06:0018:0012
Night18:0006:0012
tblSettings
SettingValue
LegalDailyHours8
LegalWeeklyHours48
EntryDeadline08:00
OffDaysFriday, Saturday

الأوقات مثال، عدليها بعد ما تتأكدين من HR. ليش في جدول: لو تغير الحد في رمضان، تغيرين رقم واحد.

شيت Shift Plan

tblShiftPlan: سطر لما يتغير شي، مو كل أسبوع
MaadenIDEffectiveFromShiftWeeklyOff
C-4017001/08/2026DayFriday
C-4017011/09/2026NightFriday

ليش كذا: Abdul Waqas صار نايت من 11 سبتمبر، وسطره القديم يبقى. فالحضور القديم يقرأ إنه كان داي، والجديد إنه نايت. لا تعدلين سطر قديم أبدًا، أضيفي سطر جديد.

شيت Vacation Plan

tblVacationPlan
MaadenIDStartDateEndDateLeaveTypePlanStatusNote
C-3818415/06/202614/09/2026AnnualApproved

ليش: من هذا الجدول يطلع مين بإجازة اليوم، ومين بيطلع بعد شهرين. والموظف يختفي من قائمة الحضور من أول يوم إجازة ويرجع يوم رجوعه.

سجل الحضور

tblAttendance: سطر لكل موظف × يوم × شفت
DateMaadenIDShiftStatusExtraHoursNoteEnteredByEnteredAt
14/09/2026C-39422DayOn Duty2Pump P-101 jobAdmin114/09/2026 07:42
13/09/2026C-40170NightOn DutyAdmin114/09/2026 07:48
  • تاريخ النايت = تاريخ بداية الشفت. نايت ليلة 13 يتسجل صباح 14 بتاريخ 13.
  • EnteredAt يكتبه الماكرو لحاله، ومنه نعرف الالتزام بساعة 7 إلى 8.
  • ExtraHours فاضي في أغلب الأيام، وهذا طبيعي.
  1. سوي الجداول الثلاثة في Keys
    tblStatus و tblShift و tblSettings، بنفس الأعمدة فوق.
  2. سوي شيت Shift Plan وجدوله
    سطر لكل موظف بتاريخ 01/08/2026 وشفته الحالي، وبعدين سطر Night بتاريخ 11/09/2026 للـ 21 موظف في قائمة النايت.
  3. سوي شيت Vacation Plan وجدوله
    ابدئي بالـ 13 اللي بإجازة الحين، وحطي تاريخ الرجوع المتوقع.
  4. عدّلي سجل الحضور
    غيري عمود الرقم ليكون MaadenID، وأضيفي ExtraHours و EnteredBy و EnteredAt. وسمّي الجدول tblAttendance.
  5. حوّلي حضور سبتمبر لأرقام معادن
    عمود مؤقت جنب الرقم القديم:
    =XLOOKUP([@EmployeeID]&"", tblEmployees[SIS_ID], tblEmployees[MaadenID],
       XLOOKUP([@EmployeeID]&"", tblEmployees[MaadenID], tblEmployees[MaadenID], "NOT FOUND"))
    الجزء الثاني للمباشرين، لأن رقمهم القديم هو نفسه رقم معادن. خلي ملف الموظفين مفتوح وقتها، لأن المعادلة تقرأ من ملف ثاني. بعدين Paste Values فوق الرقم، وشيكي إن ما فيه NOT FOUND، واحذفي المؤقت. ليش: عشان سبتمبر ينربط بنفس المفتاح الجديد.
  6. تحديث الماكرو: مرحلة لحالها نسويها مع بعض
    الماكرو الجديد يكتب قائمة اليوم كقيم ثابتة (زر Load)، وبعدين يحفظها في السجل مع وقت الإدخال (زر Save). كذا تنحل مشكلة انزياح الحالات. لما توصلين هنا قولي لي، ونكتب الكود ونجربه خطوة خطوة.

المرحلة 3

Power Query والنموذج

الاتصال بالملفات من OneDrive (مو من مسار الجهاز)

  1. انسخي رابط الملف
    افتحي الملف في Excel Desktop ← File ← Info ← Copy path. الرابط يبدأ بـ https://…sharepoint.com/…. امسحي من آخره ?web=1 إذا موجودة.
  2. Get Data ← Web ← الصقي الرابط
    وقت تسجيل الدخول اختاري Organizational account. ليش مو "Excel workbook" من الجهاز: المسار المحلي يشتغل على جهازك بس، والرابط يخلي التحديث الأونلاين يشتغل بدون Gateway.
  3. من Navigator اختاري الجداول، مو الشيتات
    الجداول لها أيقونة جدول وتبدأ بـ tbl. ليش: الجدول يتمدد مع البيانات، والشيت يجيب الشعار والعناوين والفراغات.

خطوات التجهيز داخل Power Query

Attendance: نضيف ساعات الشفت، ومعنى الحالة، والحسابات.

// 1) دمج ساعات الشفت: Home ▸ Merge Queries (Shift ↔ tblShift[Shift])
Merged   = Table.NestedJoin(Source, {"Shift"}, tblShift, {"Shift"}, "S", JoinKind.LeftOuter),
WithHrs  = Table.ExpandTableColumn(Merged, "S", {"ShiftHours"}),

// 2) دمج معنى الحالة (Status ↔ tblStatus[Status])
Merged2  = Table.NestedJoin(WithHrs, {"Status"}, tblStatus, {"Status"}, "T", JoinKind.LeftOuter),
WithCnt  = Table.ExpandTableColumn(Merged2, "T", {"CountsAs"}),

// 3) الساعات الفعلية + الأوفرتايم النظامي
Worked   = Table.AddColumn(WithCnt, "WorkedHours", each
             if [CountsAs] = "Present" then [ShiftHours] + (if [ExtraHours] = null then 0 else [ExtraHours]) else 0, type number),
Above8   = Table.AddColumn(Worked, "HoursAbove8", each List.Max({0, [WorkedHours] - 8}), type number),

// 4) الأوف في غير الجمعة والسبت  (Date.DayOfWeek: الأحد=0 … الجمعة=5، السبت=6)
OffWrong = Table.AddColumn(Above8, "OffWrongDay", each
             [CountsAs] = "Off" and not List.Contains({5, 6}, Date.DayOfWeek([Date], Day.Sunday)), type logical),

// 5) إدخال متأخر: الداي بعد 08:00 نفس اليوم، والنايت بعد 08:00 اليوم اللي بعده
Late     = Table.AddColumn(OffWrong, "LateEntry", each
             [EnteredAt] <> null and [EnteredAt] >
             (([Date] & #time(8, 0, 0)) + (if [Shift] = "Night" then #duration(1, 0, 0, 0) else #duration(0, 0, 0, 0))), type logical)

ما يلزم تكتبين الكود بيدك: كل خطوة لها زر (Merge Queries، Add Column ← Custom Column). الكود هنا عشان تقارنين النتيجة. ورقم 8 تقدرين تجيبينه من tblSettings بعدين.

VacationDays: نفرد كل إجازة لسطر لكل يوم، عشان نعرف مين بإجازة في أي تاريخ.

Days     = Table.AddColumn(tblVacationPlan, "Date", each
             List.Dates([StartDate], Duration.Days([EndDate] - [StartDate]) + 1, #duration(1, 0, 0, 0))),
Expanded = Table.ExpandListColumn(Days, "Date"),
Typed    = Table.TransformColumnTypes(Expanded, {{"Date", type date}}),
Approved = Table.SelectRows(Typed, each [PlanStatus] <> "Cancelled")

Employees: نضيف سنوات الخبرة.

Tenure   = Table.AddColumn(tblEmployees, "TenureYears", each
             if [JoiningDate] = null then null
             else Number.Round(Duration.Days(Date.From(DateTime.LocalNow()) - [JoiningDate]) / 365.25, 1), type number)

جدول التاريخ

Modeling ← New table، والصقي:

Date =
ADDCOLUMNS (
    CALENDAR ( DATE ( 2026, 8, 1 ), DATE ( 2027, 12, 31 ) ),
    "DayName",   FORMAT ( [Date], "dddd" ),
    "WeekStart", [Date] - WEEKDAY ( [Date], 1 ) + 1,      -- الأسبوع يبدأ الأحد
    "Month",     FORMAT ( [Date], "yyyy-mm" ),
    "IsFriSat",  IF ( WEEKDAY ( [Date], 1 ) IN { 6, 7 }, "Fri/Sat", "Workday" )
)

بعدها: كليك يمين على الجدول ← Mark as date table. ليش: بدونها دوال الوقت (مثل آخر 30 يوم) تعطي أرقام غلط.

العلاقات

من (جهة الواحد)إلى (جهة الكثير)النوع
Date[Date]Attendance[Date]1 : * · اتجاه واحد
Date[Date]VacationDays[Date]1 : * · اتجاه واحد
Employees[MaadenID]Attendance[MaadenID]1 : * · اتجاه واحد
Employees[MaadenID]VacationDays[MaadenID]1 : * · اتجاه واحد

ليش اتجاه واحد: الفلتر ينزل من الوصف إلى الأحداث. الاتجاهين يسببون أرقام غريبة ويبطؤون التقرير. وخبي الأعمدة اللي ما تنعرض (مثل ShiftHours) عشان قائمة الحقول تبقى نظيفة.

  1. اتصلي بالملفين من الرابط
    الجداول: tblEmployees، tblAttendance، tblVacationPlan، tblShift، tblStatus، tblSettings.
  2. جهزي Attendance و VacationDays و Employees
    الخطوات فوق، وتأكدي إن أنواع الأعمدة صح: التاريخ Date، والساعات Decimal.
  3. سوي جدول Date وعلّميه Date table
  4. اربطي العلاقات الأربع وتأكدي من اتجاهها
    Model view: كل خط يكون عليه 1 من جهة و * من الجهة الثانية.

المرحلة 4

المقاييس (DAX)

سوي جدول فاضي اسمه _Measures (Enter data ← OK) وحطي فيه كل المقاييس. ليش: كلها في مكان واحد بدل ما تضيع بين الجداول.

الحضور

Present Days   = CALCULATE ( COUNTROWS ( Attendance ), Attendance[CountsAs] = "Present" )
Absent Days    = CALCULATE ( COUNTROWS ( Attendance ), Attendance[CountsAs] = "Absent" )
               + CALCULATE ( COUNTROWS ( Attendance ), Attendance[OffWrongDay] = TRUE () )
Leave Days     = CALCULATE ( COUNTROWS ( Attendance ), Attendance[CountsAs] = "Leave" )
Scheduled Days = [Present Days] + [Absent Days] + [Leave Days]
Attendance %   = DIVIDE ( [Present Days], [Scheduled Days] )
Absenteeism %  = DIVIDE ( [Absent Days], [Scheduled Days] )

التغطية: هل كل الموظفين انسجلوا؟

Active Staff =
VAR d = MAX ( 'Date'[Date] )
RETURN
    COUNTROWS (
        FILTER (
            Employees,
            Employees[JoiningDate] <= d
                && ( ISBLANK ( Employees[ExitDate] ) || Employees[ExitDate] > d )
                && Employees[AttendanceRequired] = "Yes"
        )
    )
On Vacation   = DISTINCTCOUNT ( VacationDays[MaadenID] )
Expected      = [Active Staff] - [On Vacation]
Recorded      = DISTINCTCOUNT ( Attendance[MaadenID] )
Not Recorded  = MAX ( 0, [Expected] - [Recorded] )
Coverage %    = DIVIDE ( [Recorded], [Expected] )
Late Entries  = CALCULATE ( COUNTROWS ( Attendance ), Attendance[LateEntry] = TRUE () )

الساعات والأوفرتايم

Worked Hours        = SUM ( Attendance[WorkedHours] )
Extra Hours         = SUM ( Attendance[ExtraHours] )        -- فوق الشفت
OT Hours (Legal)    = SUM ( Attendance[HoursAbove8] )       -- فوق 8 ساعات
Roster OT Hours     = [OT Hours (Legal)] - [Extra Hours]    -- المبني داخل الشفت
Avg Hours / Day     = DIVIDE ( [Worked Hours], [Present Days] )

Weeks Without Off =
COUNTROWS (
    FILTER (
        SUMMARIZE ( Attendance, Attendance[MaadenID], 'Date'[WeekStart] ),
        CALCULATE ( [Present Days] ) >= 7
    )
)
Off On Wrong Day = CALCULATE ( COUNTROWS ( Attendance ), Attendance[OffWrongDay] = TRUE () )

القوى العاملة والهويات والإجازات

Headcount     = CALCULATE ( COUNTROWS ( Employees ), Employees[EmploymentStatus] IN { "Active", "Vacation" } )
Leavers       = CALCULATE ( COUNTROWS ( Employees ), Employees[EmploymentStatus] IN { "Exit", "Resigned", "Demobilized" } )
Permanent %   = DIVIDE ( CALCULATE ( [Headcount], Employees[Type of ID] IN { "Permanent", "Permanent (Old ID)", "Maaden Staff" } ), [Headcount] )
Avg Tenure    = AVERAGE ( Employees[TenureYears] )

IDs Expired   = CALCULATE ( [Headcount], Employees[ID Expire Date] < TODAY () )
IDs Due 60d   = CALCULATE ( [Headcount], Employees[ID Expire Date] >= TODAY (), Employees[ID Expire Date] <= TODAY () + 60 )

Away Next 60d =
CALCULATE (
    DISTINCTCOUNT ( VacationDays[MaadenID] ),
    FILTER ( ALL ( 'Date' ), 'Date'[Date] >= TODAY () && 'Date'[Date] <= TODAY () + 60 )
)
  1. سوي جدول _Measures
    وبعد أول مقياس احذفي العمود الفاضي، فيصير الجدول بأيقونة الآلة الحاسبة فوق القائمة.
  2. أضيفي مقاييس الحضور واختبريها
    سوي Table visual فيه Date و [Present Days] و [Absent Days]، وقارني يوم واحد مع ملف الإكسل. ليش: لو الرقم الأول صح، الباقي مبني عليه.
  3. أضيفي باقي المقاييس بالترتيب
    التغطية ← الساعات ← القوى العاملة. ونسّقي كل مقياس: النسب %، والساعات بدون كسور.

المرحلة 5

صفحات الداشبورد

خمس صفحات، كل صفحة تجاوب سؤال واحد. مقاس الصفحة 1280 × 720، وكل الصفحات بنفس الشريط العلوي ونفس الفلاتر بنفس المكان.

قواعد تمشي على كل الصفحات

  • الثيم: View ← Themes ← Browse for themes ← Maaden2026_PBI_1_Light_Operational.json.
  • الشريط العلوي: الشعار، واسم الصفحة، وتاريخ آخر تحديث.
  • الفلاتر: التاريخ، والـ Area، والكرافت، والشفت. وفعّلي Sync slicers عشان تنتقل مع الصفحات.
  • الأرقام الكبيرة: من 3 إلى 5 بس، وكل رقم تحته سطر يوضح وش يعني.
  • الألوان: الأخضر = تمام، والبرتقالي = انتبهي، والأحمر = مشكلة. ولا لون بدون معنى.
  • المقارنة بالأعمدة، لا دونات ولا عداد.
  • الترتيب: الأهم فوق يمين، والتفاصيل تحت.

1 · اليوم

مين المفروض يكون موجود اليوم، ومين فعلًا موجود؟

2 · الاتجاه

الحضور يتحسن أو يسوء، ووين؟

3 · الساعات والأوفرتايم

كم ساعة اشتغلوا، وكم منها فوق الخطة، ومين ما أخذ أوفه؟

4 · القوى العاملة

كم عندنا، مين هم، ومين طلع؟

5 · الإجازات والهويات

مين بيطلع قريب، ومين هويته تحتاج تجديد؟

  1. جهزي صفحة قالب وحدة
    الثيم، والمقاس، والشريط العلوي، والفلاتر. بعدين Duplicate page لكل صفحة. ليش: كل الصفحات تطلع بنفس الأماكن بالبكسل.
  2. ابني صفحة "اليوم" أول
    هي اللي المدير يفتحها كل صباح، وتختبر إن التغطية والحضور صح.
  3. ابني باقي الصفحات بالترتيب
    الاتجاه ← الساعات ← القوى العاملة ← الإجازات والهويات.
  4. فعّلي Sync slicers وسمّي كل visual
    View ← Sync slicers. وكل visual له عنوان يقول وش يعرض.

المرحلة 6

النشر والتحديث اليومي

  1. Publish إلى Workspace القسم
    Home ← Publish. إذا ما عندك Workspace، اطلبي من IT أو من مديرك.
  2. أدخلي بيانات الدخول للمصدر
    في Power BI Service: الـ Semantic model ← Settings ← Data source credentials ← OAuth2 ← حسابك في معادن.
  3. جدولي التحديث بعد وقت الإدخال
    Scheduled refresh: يوميًا 09:00، وتقدرين تضيفين 13:00. ليش 9: الإدخال ينتهي 8، فالساعة 9 يكون الداي ونايت أمس كلهم مسجلين.
  4. شاركي مع الإدارة
    الأفضل كـ App من الـ Workspace، عشان التعديلات ما تظهر لهم إلا لما تحدثين التطبيق.
لو التحديث الأونلاين فشلغالبًا السبب إن الاتصال انسوى من مسار الجهاز بدل رابط OneDrive (المرحلة 3)، أو إن سياسة IT تمنع التحديث من OneDrive الشخصي. الحل الثاني: حطي الملفات في مكتبة SharePoint تابعة للقسم.

المراجع

المصادر

الأرقام في مخططات الصفحات أمثلة توضيحية، مو أرقامكم الفعلية. · آخر تحديث للدليل: 14 سبتمبر 2026