मांग के पूर्वानुमान के विघटन के लिए सरल योजनाएँ डिजाइन करना


9

मैं एक प्रशिक्षण अभ्यास के रूप में एक साधारण डेटाबेस डिजाइन कार्य कर रहा हूं जहां मुझे निम्नलिखित मामले के लिए एक मूल स्कीमा डिजाइन के साथ आना है:

मेरे पास उत्पादों का एक अभिभावक-बच्चा पदानुक्रम है (उदाहरण, कच्चे माल> प्रगति में काम> अंत उत्पाद)।

  • प्रत्येक स्तर पर आदेश दिए गए हैं।
  • अगले 6 महीनों के लिए साप्ताहिक बाल्टियों में आदेशों की संख्या देखने योग्य होगी।
  • प्रत्येक उत्पाद स्तर के लिए मांग का पूर्वानुमान किया जा सकता है।
  • अगले 6 महीनों के भीतर किसी भी सप्ताह के लिए पूर्वानुमान की मांग आज की जा सकती है।
  • अगले 6 महीनों के लिए साप्ताहिक बाल्टियों के लिए मांग का पूर्वानुमान लगाया जाता है।

डिमांड का पूर्वानुमान आमतौर पर उच्च स्तर पर पदानुक्रम में होता है (रॉ मटीरियल या वर्क इन प्रोग्रेस लेवल) इसे निचले स्तर (एंड प्रोडक्ट) से अलग करना पड़ता है।

मांग के पूर्वानुमान के 2 तरीके हैं जिन्हें उच्च स्तर से निचले स्तर तक अलग किया जा सकता है:

  1. उपयोगकर्ता अंतिम उत्पाद के लिए प्रतिशत वितरण को निर्दिष्ट करता है। कहते हैं, वर्क इन प्रोग्रेस के लिए 1000 का पूर्वानुमान है। और उपयोगकर्ता का कहना है कि मुझे एंड प्रोडक्ट 1 के लिए 40% और बकेट 10 में एंड प्रोडक्ट 2 के लिए 60% चाहिए। इसके बाद अब से 10 वें सप्ताह (रविवार से शनिवार) के लिए पूर्वानुमान मूल्य एंड प्रोडक्ट 1 के लिए 400 होगा और एंड प्रोडक्ट 2 के लिए 600 होगा।
  2. उपयोगकर्ता का कहना है, बस बाल्टी 5 में अंत उत्पादों के खिलाफ रखे गए आदेशों के अनुसार असहमत हैं, और अंत उत्पाद 1 और 2 के लिए बाल्टी 5 में क्रम क्रमशः 200 और 800 हैं, फिर EP1 के लिए पूर्वानुमान मूल्य ((200/1000) * 100)% होगा और EP2 के लिए '(प्रोग्रेस में प्रगति' के लिए पूर्वानुमान का (800/1000) * 100) होगा।

अगले 6 महीनों के लिए साप्ताहिक बाल्टियों में पूर्वानुमान देखने योग्य होगा और आदर्श प्रारूप होना चाहिए:

product name | bucket number | week start date | week end date | forecast value | created_on

PRODUCT_HIERARCHY तालिका इस तरह दिख सकती है:

id  |   name                |   parent_id
__________________________________________
1   |   raw material        |   (null)
2   |   work in progress    |   1
3   |   end product 1       |   2
4   |   end product 2       |   2

ORDERS तालिका इस तरह दिख सकती है :

id | prod_id | order_date | delivery_date | delivered_date

कहाँ पे,

prod_idवह विदेशी कुंजी है जो idPRODUCT_HIERARCHY तालिका के संदर्भ में है,

पूर्वानुमान कैसे संग्रहीत करें? ऐसी आवश्यकता के लिए एक अच्छा बुनियादी स्कीमा क्या होगा?


26 साप्ताहिक बाल्टियों के लिए ऑर्डर चुनने का मेरा विचार है:

SELECT
    COUNT(*) TOTAL_ORDERS,
    WIDTH_BUCKET(
        delivery_date,
        SYSDATE,
        ADD_MONTHS(sysdate, 6), 
        TO_NUMBER( TO_CHAR(SYSDATE,'DD-MON-YYYY') - TO_CHAR(ADD_MONTHS(sysdate, 6),'DD-MON-YYYY') ) / 7
    ) BUCKET_NO
FROM
    orders_table
WHERE
    delivery_date BETWEEN SYSDATE AND ADD_MONTHS(sysdate, 6);

लेकिन इससे साप्ताहिक बाल्टी आज से शुरू हो जाएगी, भले ही दिन कुछ भी हो। ओरेकल में मैं उन्हें रविवार से शनिवार सप्ताह में कैसे बदल सकता हूं?

कृपया इस डेटाबेस संरचना को डिजाइन करने में मदद करें।

(Oracle 11g का उपयोग किया जाएगा)


1
ऐसा लगता है जैसे आप डेटा वेयरहाउस बना रहे हैं। आदेश तथ्य तालिका होगा। उत्पाद और दिनांक आयाम तालिकाएँ। आप एक संचित तथ्य तालिका का उपयोग करना चाह सकते हैं, क्योंकि आप एक ऐसी प्रक्रिया को देख रहे हैं जिसमें कई चरण हैं।
नील मैकगिगन

जवाबों:


1

ठीक है, इसलिए यहां डेटा मॉडल के साथ आया हूं।

उत्पाद - उत्पाद की जानकारी संग्रहीत करने और अभिभावक-बच्चे पदानुक्रम को बनाए रखने के लिए

id  NUMBER  "Primary Key Not Null"                  
level_code  VARCHAR2    Not Null                    
name    VARCHAR2    Not Null                    
description VARCHAR2                        
parent_id   NUMBER  Foreign Key references PRODUCT(id)                  

आदेश - उत्पादों के लिए ऑर्डर स्टोर करने के लिए

id  NUMBER  "Primary Key Not Null"                  
prod_id     NUMBER  "Foreign Key references PRODUCT(id) Not Null"                   
order_type  VARCHAR2    "Not Null Default 'Default'"
order_qty   NUMBER  Not Null
order_date  NUMBER  Foreign Key references DATE_INFO(date_key)
delivery_date   NUMBER  "Foreign Key references DATE_INFO(date_key)
Check delivery_date >= order_date"

FORECAST - उत्पादों के लिए पूर्वानुमान मूल्य को स्टोर करने के लिए (उच्च स्तर के लिए स्टोर मूल्य, एक माता-पिता से असहमति के बाद निचले स्तर के लिए स्टोर मूल्य)

id  NUMBER  "Primary Key Not Null"
product_id  NUMBER  "Foreign Key references PRODUCT(id) Not Null"
forecast_value  NUMBER  Not Null
week    NUMBER  "Foreign Key references DATE_INFO(date_key) Not Null"                   

DISAGGREGATION_RULES - उच्च स्तर से निचले स्तर तक मान को अलग करने के लिए किस विधि का उपयोग किया गया था और कितने प्रतिशत को निम्न स्तर पर वितरित किया गया

id  NUMBER  "Primary Key Not Null"
parent_product_id   NUMBER  "Foreign Key id references PRODUCT(id) Not Null"
child_product_id    NUMBER  "Foreign Key id references PRODUCT(id) Not Null"
method  VARCHAR2    Not Null                    
from_week   NUMBER  "Foreign Key references DATE_INFO(date_key) Not Null"
to_week NUMBER  "Foreign Key references DATE_INFO(date_key) Not Null Check end_week >= start_week"
percent_distribution    NUMBER  Not Null                    

DATE_INFO - तिथि आयाम, प्रारंभ दिनांक (शनिवार होना चाहिए) के बारे में जानकारी है और अंतिम तिथि उस सप्ताह के अनुरूप है जिसमें कोई विशेष तिथि पड़ती है

date_key    NUMBER  "Primary Key
Not Null"                   
full_date   DATE    Not Null                    
week_begin_date DATE    Not Null                    
week_end_date   DATE    Not Null

बाल्टी संख्या के लिए के रूप में .. मैं निम्नलिखित समारोह के साथ सप्ताह की शुरुआत की तारीख (शनिवार को तारीख, मेरे मामले में) की गणना कर रहा हूं

CREATE OR REPLACE FUNCTION get_week_start_date(v_bucket_num IN NUMBER)
  RETURN DATE
IS
  week_start_date DATE;
BEGIN
  SELECT (TRUNC(SYSDATE+2, 'IW')-2) + ((v_bucket_num-1) * 7)
  INTO week_start_date FROM dual;
  RETURN week_start_date;
END;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.