मैं एक बहु-स्तरीय DAX सारांश क्वेरी को अनुकूलित करने के बारे में सलाह ढूंढ रहा हूं। यह बहुत धीमा है क्योंकि, मुझे लगता है, यह घोंसले के कारण ओ (एन ^ 3) चल रहा है। दुर्भाग्य से, मुझे कई स्तरों की आवश्यकता है क्योंकि पदानुक्रम स्तर ऑर्डर> ऑर्डर लाइन> ऑर्डर विवरण को अलग-अलग गणना करने की आवश्यकता है।

  • इकाइयों को विस्तार स्तर तक योग करने की आवश्यकता है
  • इसे लाइन स्तर तक औसत करने की आवश्यकता है
  • इसे ऑर्डर स्तर तक संक्षेपित करने की आवश्यकता है

    SUMX(
        SUMMARIZE(
             'FACT Opportunity'
            ,Opportunity[LineId]
            ,"Units"
            ,AVERAGEX(
                SUMMARIZE(
                    'FACT Opportunity'
                    ,Opportunity[DetailId]
                    ,"SumDetail"
                    ,SUM('FACT Opportunity'[Units])
                    )
                ,[SumDetail]
                )
        )
        ,[Units]
    )
    

    आप जो भी मदद या सलाह दे सकते हैं उसकी बहुत सराहना की जाएगी।

0
Stephen Re 12 अक्टूबर 2018, 03:05

1 उत्तर

सबसे बढ़िया उत्तर

डेटा और डेटा मॉडल को देखे बिना अनुकूलन सलाह प्रदान करना बहुत कठिन है (यदि उन्हें प्रश्न में शामिल किया जाए तो यह बहुत अच्छा होगा)।

यहां मुख्य मुद्दा यह है कि डुप्लिकेट की उपस्थिति तथ्य को "इकाइयों" को गैर-योज्य बनाता है, जिसका अर्थ है कि आप इसे केवल पदानुक्रम में रोल नहीं कर सकते हैं। नतीजतन, आपको एक बहुत महंगा ट्रिपल-लूपिंग करने के लिए मजबूर होना पड़ता है।

एक स्पष्ट समाधान तब "इकाइयों" को पूरी तरह से योगात्मक बनाना है। आप डी-डुप्लिकेट (डुप्लिकेट के लिए समायोजित) इकाइयों की गणना कर सकते हैं और उन्हें परिकलित कॉलम के रूप में वास्तव में अवसर स्टोर कर सकते हैं:

Adjusted  Units =
DIVIDE (
    'FACT Opportunity'[Units],
    CALCULATE ( COUNT ( 'FACT Opportunity'[DetailId] ) )
)

यहां, आप इकाइयों को अद्वितीय विवरण आईडी की संख्या से विभाजित करते हैं (आमतौर पर, यह 1 होगा, लेकिन डुप्लिकेट विवरण आईडी के मामले में यह 2 होगा, आदि)।

यह परिकलित कॉलम आपके डेटा लोडिंग समय को थोड़ा बढ़ा देगा, लेकिन बहुत अधिक क्वेरी समय बचाएगा। आगे अनुकूलित करने के लिए, डेटा वेयरहाउस में इसकी पूर्व-गणना करने पर विचार करें।

समायोजित इकाइयाँ पूरी तरह से योगात्मक हैं, इसलिए आप अब सरल हो गए हैं:

Total Units = SUM('FACT Opportunity'[Adjusted Units])

इसे ऑर्डर> लाइन> विवरण पदानुक्रम के किसी भी स्तर पर सही ढंग से काम करना चाहिए (जब तक कि प्रश्न में वर्णित अतिरिक्त समस्याएं न हों), और यह तेज़ होना चाहिए।

1
RADO 12 अक्टूबर 2018, 10:53