sql - APEX का उपयोग कर एक गतिशील मैट्रिक्स रिपोर्ट को लागू करने के सर्वोत्तम तरीके क्या हैं?




oracle plsql (2)

ओरेकल एप्लिकेशन एक्सप्रेस रूपरेखा का उपयोग करके मुझे यह काम पूरा करना होगा।

मान लें कि हमारे पास ऐसी कोई क्वेरी है:

select   
  col1,  
  col2,  
  val1,  
  val2,  
  val3,  
  val4,  
  val5,  
  val6,  
  val7,  
  val8,  
  val9,  
  val10,  
  val11  
from table(mega_function(city => ?, format => ?, percent => ?, days => ?));

और यह क्वेरी इस तरह कुछ देता है (सीएसवी प्रारूप में दिखाया गया है):

col1;col2;val1;val2;val3;val4;val5;val6;val7;val8;val9;val10;val11
S2;C1;32000;120;"15:38:28";1450;120;1500;1200;31000;120;32600;300
S1;C1;28700;120;"15:35:01";150;120;1500;1800;2700;60;28900;120
S1;C2;27000;240;"14:44:23";0;1500;240;1200;25500;60;null;null

इसे सरल बनाने के लिए, एक पाइपलाइन फ़ंक्शन पर क्वेरी के आधार जो कुछ मापदंडों को लेता है और पहले दो कॉलम col1;col2 2 के मूल्यों के विभिन्न युग्म के लिए कुछ सेट मान देता है।

मुझे जो लागू करने की आवश्यकता है वह एक मैट्रिक्स रिपोर्ट है, जहां col2 मान रिपोर्ट की पंक्तियों और col2 के कॉलम के रूप में कॉलम के रूप में col2 किया जाता है। चौराहे पर ऐसी कोशिकाएं होती हैं जो जोड़े के लिए मूल्यों का सेट होती हैं जिनमें कुछ स्वरूपण और शैलियां लागू होती हैं। इसके लिए भी क्या ज़रूरत है - पंक्तियों के आधार पर छंटनी है (जिसे कॉलम 'val1' के मानों के आधार पर कॉलम चाहिए)।

या यदि हम उपरोक्त आवश्यकताओं को एक मॉकअप पर दिखाते हैं:

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

मैंने पहले से ही इसमें देखने की कोशिश की है:

  • इंटरैक्टिव रिपोर्ट पिवट कार्यक्षमता ( https://docs.oracle.com/cd/E71588_01/AEEUG/managing-pivot-reports.htm#AEEUG29137 ) - अनुकूलन का अभाव है, कई मानों के साथ बुरी तरह से काम करता है, खासकर जब वे नंबर न हों
  • फ़ंक्शन के आधार पर क्लासिक रिपोर्ट - मैंने पीएल / एसक्यूएल फ़ंक्शन कार्यान्वित किया है जो डायनामिक PIVOT एसक्यूएल क्वेरी को लौटाता है, रिपोर्ट के गुणों में, Use Generic Column Names Yes सेट करें (केवल क्रम में क्वेरी को पार्स करने के लिए) और रिपोर्ट के शीर्षकों के लिए मैंने एक अन्य पीएल / एसक्यूएल फ़ंक्शन का इस्तेमाल किया है, जो प्रारूप heading1:headning2:...:headingN में एक स्ट्रिंग उत्पन्न करता है। समाधान का काम करता है (आप इसे यहां जांच सकते हैं - https://apex.oracle.com/pls/apex/f?p=1328328 ), लेकिन मुझे रिपोर्ट को गतिशील रूप से प्रत्येक को ताज़ा करना होगा, हम कहते हैं, 5 सेकंड और यह प्रदर्शन के मामले में चूसना होगा (गतिशील एसक्यूएल हमेशा बुरा नहीं है और अगर हम निष्पादन योजनाओं के बारे में बात करते हैं तो यह संभव नहीं है)। इसके अलावा यह समाधान भी फिट नहीं है, क्योंकि हेडिंग डेटा के साथ घनिष्ठ नहीं होते हैं (वास्तव में मैंने order by col1 1 order by col1 में पीएल / एसक्यूएल दोनों कार्यों में उनके स्थान पर हेडिंग करने के लिए order by col1 ) और मैं नहीं जानता कि कैसे पंक्तियां बनाने के लिए यहां छांटने योग्य
  • पीएल / एसक्यूएल डायनेमिक सामग्री क्षेत्र - मैंने यहाँ कुछ कोड करने की कोशिश नहीं की है, लेकिन मुझे पता है कि यहां केवल एचटीपी पैकेज और एपेक्स एपीआई का उपयोग करने के लिए कुछ भी करना संभव है। मुश्किल बात यह है कि यह समाधान बहुत जटिल है, मुझे 'खरोंच से' रिपोर्ट के सभी तर्क को लागू करने की आवश्यकता होगी और मेरा मानना ​​है कि काम में सफल होने के लिए एक बेहतर और आसान तरीका है, जिसे मुझे नहीं पता।

आपकी ज़रूरतों के आधार पर अपैक्स संभवत: सही उपकरण नहीं है, आप अंतहीन लाइब्रेरीज़ और जेक्टीय की क्षमताओं के द्वारा सीमित रहेंगे।

मैं एपेक्स पर इस तरह के आवेदन को विकसित करने का प्रयास नहीं करूँगा, मेरी राय में एपेक्स में दी गई तकनीक के लिए आवश्यकताओं को बहुत दूर है।

दूसरी तरफ आप डीबी के प्रदर्शन के बारे में बात करते हैं .. अच्छा है कि आप उस योजना चरण से ध्यान में रखते हैं, लेकिन बुरा क्योंकि आप खुद को पहले से ही सीमित कर रहे हैं .. विकल्प हैं ... जैसे एक इन-मेमोरी विकल्प प्राप्त करें डेटाबेस और / भौतिक दृश्य से परिणामों को कैश करता है .. टेबल को मेमोरी पर पिन करें


तुम सही हो। मैंने आपके सुझावों की मेरी शुरुआती समझ के आधार पर केवल एक राय दी है .. अब जब मैंने पढ़ा है कि और अधिक ध्यान से, मैंने अपना दिमाग बदला क्योंकि मैंने महसूस किया कि यह आपके लिए मुश्किल मैट्रिक्स नहीं है .. वास्तव में मेरे पास बहुत से लोग हैं ।

मुझे सबसे अच्छा प्रथाओं के बारे में पता नहीं है लेकिन मैं आपके साथ साझा कर सकता हूं कि मैंने इसी प्रकार की आवश्यकताओं के साथ क्या किया है:

मैट्रिक्स आधारित रिपोर्टों के लिए मैं क्लासिक रिपोर्ट्स पसंद करता हूं, मैं शीर्ष लेख अनुभाग पर अपने फ़िल्टरिंग मापदंड (केवल आपके नकली में) डालता हूं और उपयोगकर्ता चयन के आधार पर जानकारी को बहुत अच्छी तरह से बदलता है इसी तरह मैं फ़िल्टरिंग और सॉर्टिंग को संभालता हूं।

अपनी आवश्यकताओं के साथ सबसे कठिन हिस्सा (आईएमओ) है उद्देश्यों को निर्यात करने के लिए कोशिकाओं की जांच .. आप अपनी क्वेरी में गतिशील रूप से एक टॉगल नियंत्रण को सक्षम करने में सक्षम होंगे और कुछ एजेएक्स के साथ आप चुने हुए लोगों को निर्यात के लिए पिकअप कर पाएंगे। ।





oracle-apex