المشكلة
العطل الواحد يولد عدة بلاغات، والملف يسجل كل بلاغ صفا مستقلا.
البيانات
الملف الأصلي
- صف لكل بلاغ بلا مفتاح يربطها
- المحطة بأكثر من صيغة
- الحي نفسه باسمين
بعد المعالجة
- مفتاح موحد للمحطة والموقع
- مفتاح عطل يجمع البلاغات
- مطابقة كل رقم مع المصدر
توحيد المفاتيح
let Source = Csv.Document(File.Contents(Path), [Encoding = 65001]), Headers = Table.PromoteHeaders(Source), Typed = Table.TransformColumnTypes(Headers, {{"ReportedAt", type datetime}}, "en-GB"), // The same station is typed "353A", "A353" and "A 353". // One key: digits first, then letters, no separators. StationKey = Table.AddColumn(Typed, "StationKey", each let raw = Text.Upper(Text.Remove([Station] ?? "", {" ", "-", "/"})), digits = Text.Select(raw, {"0".."9"}), letters = Text.Remove(raw, {"0".."9"}) in digits & letters, type text)in StationKeyتعريف العطل
def group_faults(reports, radius_m=150, gap_h=48): """Reports close in space AND time describe one fault.""" sites = [] for r in sorted(reports, key=lambda r: r.time): near = [s for s in sites if any(meters(r, x) <= radius_m for x in s)] merged = [r] + [x for s in near for x in s] sites = [s for s in sites if s not in near] + [merged] faults = [] for site in sites: site.sort(key=lambda r: r.time) wave = [site[0]] for r in site[1:]: if hours(r.time - wave[-1].time) > gap_h: faults.append(wave) wave = [] wave.append(r) faults.append(wave) return faultsالنموذج
بعد
Date
- Date
- Year
- Month
- HasData
بعد
Sites
- SiteKey
- StationKey
- Feeder
- Lat, Long
جدول الحقائق
Reports
- ReportID
- FaultKey
- SiteKey
- DateKey
- Status
- OnTime
- Rating
بعد
Zones
- Zone
- Contract
بعد
Causes
- Cause
- Group
القياسات
Faults = DISTINCTCOUNT ( Reports[FaultKey] )Reports per Fault = DIVIDE ( [Reports], [Faults] )// A site is chronic when faults keep returning, not when one fault was loud.Chronic Sites =COUNTROWS ( FILTER ( VALUES ( Sites[SiteKey] ), CALCULATE ( [Faults], DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -180, DAY ) ) >= 3 ))مثال توضيحي
| اليوم | البلاغات | مقطع الكيبل | العطل |
|---|---|---|---|
| 4 | 3 | العمودان 41 و42 | عطل 1 |
| 9 | 5 | العمودان 42 و43 | عطل 2 |
| 21 | 4 | العمودان 43 و44 | عطل 3 |
النتيجة
- تحديد مواقع التأهيل بدل الصيانة المتكررة.
- مطابقة الأرقام قبل كل رد.
- كشف البلاغات غير المذكورة في الطلبات.
الأرقام والأمثلة توضيحية.
