इसके माध्यम से साझा किया गया


फ़ैब्रिक के साथ स्वचालन-संबंधी क्वेरीज़ बनाएँ

नोट

अस्वीकरण: इस ट्यूटोरियल में उपयोग किए गए परिदृश्य, क्वेरी उदाहरण और डेटा काल्पनिक हैं, इनमें त्रुटियां, अक्षमताएं शामिल हो सकती हैं, और ये केवल प्रदर्शन के उद्देश्य से हैं।

निम्न तालिका में रिपोर्टिंग और अवलोकन के लिए अक्सर उपयोग की जाने वाली स्वचालन-संबंधी तालिकाएं सूचीबद्ध हैं।

डिस्प्ले का नाम ऑब्जेक्ट का नाम उद्देश्य
प्रवाह लॉग फ्लोलॉग इसमें कई तरह के लॉग शामिल हैं, जैसे कस्टम लॉग, डेस्कटॉप फ्लो एक्शन लॉग V2, मशीन रन क्यू लॉग, अनअटेंडेड सेल्फ-हील रिक्वेस्ट/रिस्पॉन्स और वर्क क्यू प्रोसेसिंग लॉग आदि। डेटा को इलास्टिक टेबल में स्टोर किया जाता है और लॉग टाइप के आधार पर, इसे संगठन में अपनी खुद की टाइम-टू-लाइव (TTL) सेटिंग के साथ कॉन्फ़िगर किया जा सकता है। तालिका ( FlowLogsTtlInMinutes और डेस्कटॉप FlowQueueLogsTtlInMinutes Dataverse ), जो परिभाषित करता है कि रिकॉर्ड को तालिका से स्वचालित रूप से कब हटाया जाना चाहिए।............
प्रवाह मशीन प्रवाह मशीन इसमें मशीन और होस्टेड मशीन से संबंधित जानकारी शामिल है।
फ्लो मशीन ग्रुप फ़्लोमशीनग्रुप इसमें मशीन समूह और होस्टेड मशीन समूह से संबंधित जानकारी शामिल है।
फ्लो रन फ्लोरन इसमें क्लाउड प्रवाह रन से संबंधित डेटा जैसे प्रारंभ, अंत, अवधि, मूल प्रवाह संदर्भ आदि शामिल हैं।
प्रवाह सत्र प्रवाह सत्र इसमें डेस्कटॉप प्रवाह रन से संबंधित डेटा शामिल होता है, जैसे प्रारंभ, अवधि, स्थिति, मशीन, रोबोट खाता, मूल प्रवाह संदर्भ आदि।
प्रक्रिया कार्यप्रवाह इसमें डेस्कटॉप प्रवाह और समाधान-आधारित क्लाउड प्रवाह (अन्य वर्कफ़्लो प्रकारों के साथ) शामिल हैं।
उपयोगकर्ता systemuser Dataverse उपयोगकर्ता का प्रतिनिधित्व करता है.
कार्य कतार कार्यपंक्ति वर्कफ़्लो निष्पादन का एक उदाहरण दर्शाता है.
कार्य पंक्ति आइटम कार्यकतारआइटम इसमें वर्कफ़्लो के प्रत्येक रन के बारे में जानकारी शामिल होती है.

सरलीकृत तालिका संबंध आरेख

छवि स्वचालन के लिए केवल प्रासंगिक तालिका संबंध दिखाती है।

स्वचालन-संबंधित तालिका संबंधों को दर्शाने वाले निकाय संबंध आरेखण का स्क्रीनशॉट।

फ़ैब्रिक में अपनी पहली क्वेरी बनाएँ

contoso_westus_accounts_payable लेकहाउस के लिए फैब्रिक में SQL एनालिटिकल एंडपॉइंट पर एक नमूना SQL क्वेरी बनाने के लिए इन चरणों का पालन करें।

  1. अपना वेब ब्राउज़र खोलें, पोर्टल ( Microsoft Fabric ) पर जाएं और अपने क्रेडेंशियल्स के साथ लॉग इन करें।https://powerbi.com

  2. वह कार्यस्थान चुनें जहां आपका Lakehouse स्थित है, फिर वांछित SQL विश्लेषणात्मक समापन बिंदु (आपके Lakehouse का एक उपनोड) चुनें।

  3. SQL एनालिटिकल एंडपॉइंट में, SQL क्वेरी संपादक खोलने के लिए नई SQL क्वेरी का चयन करें.

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

       SELECT   
           flowsessionid,  
           statuscode,  
           startedon, 
           completedon,
           errorcode,  
           errormessage,  
           sessionusername,  
           runexecutionduration,  
           runduration,  
           runwaitduration,  
           context
       FROM   
           flowsession  
       WHERE   
           regardingobjectid = '[specific_flow_id]' -- Replace with the actual flow ID  
           AND machineid = '[specific_machine_guid]'  -- Replace with the actual machine ID  
           AND statuscode = 8 -- 'Failed' sessions  
           AND createdon >= DATEADD(day, -7, GETDATE())  
       ORDER BY   
           createdon DESC;  
    
  5. यहां Flow Sessions (डेस्कटॉप प्रवाह रन) तालिका के लिए उपलब्ध स्थिति कारणों (स्थिति कोड) की सूची दी गई है।

    स्थिति विवरण मान
    विराम दिया गया 1
    चल रहा 2
    प्रतीक्षा कर रहा है 3
    सफल हुआ 4
    छोड़ा गया 5
    निलंबित 6
    रद्द किया गया 7
    में विफल 8
    गलती 9
    समय समाप्त हुआ 10
    निरस्त 11
    अनदेखा किया गया 12"
  6. यह सुनिश्चित करने के लिए कि वे आपकी आवश्यकताओं को पूरा करते हैं, क्वेरी परिणामों की समीक्षा करें।

    डेटाबेस प्रबंधन उपकरण में निष्पादित की जा रही SQL क्वेरी का स्क्रीनशॉट।

  7. (वैकल्पिक) SQL क्वेरी को हाइलाइट करके और क्वेरी आउटपुट अनुभाग में Excel में खोलें का चयन करके Excel में परिणामों के साथ एक लाइव-क्वेरी खोलें। यह आगे के विश्लेषण के लिए SQL Analytics एंडपॉइंट पर लाइव-क्वेरी के साथ एक Excel फ़ाइल तैयार करता है और डाउनलोड करता है।

    फैब्रिक में डेटाबेस क्वेरी पैनल में निष्पादित की जा रही SQL क्वेरी का स्क्रीनशॉट।

  8. (वैकल्पिक) भविष्य में उपयोग के लिए SQL क्वेरी संग्रहीत करने के लिए, क्वेरी सहेजें का चयन करें.

बुनियादी प्रवाह प्रश्न

क्लाउड प्रवाह को उनके स्वामी की जानकारी सहित पुनः प्राप्त करें

यह क्वेरी सभी क्लाउड प्रवाहों को उनके स्वामी की जानकारी के साथ लौटाती है।

नोट

केवल क्लाउड प्रवाह जो किसी समाधान का हिस्सा हैं, फ़ैब्रिक में उपलब्ध हैं. Dataverse

    SELECT   
        w.name AS 'Cloud flow',  
        w.workflowid AS 'Cloud flow Id',  
        w.createdon AS 'Created on',
        w.modifiedon AS 'Last modified on',
        w.clientdata AS 'Script',  
        w.ownerid AS 'Owner Id',  
        s.fullname AS 'Owner name',  
        s.internalemailaddress AS 'Owner email'
    FROM   
        workflow w  
    JOIN   
        systemuser s ON w.ownerid = s.systemuserid  
    WHERE   
        w.category = 5;  -- Only consider solution-cloud flows (category 5)  

डेस्कटॉप प्रवाह को उनके स्वामी की जानकारी के साथ पुनः प्राप्त करें

यह क्वेरी सभी डेस्कटॉप प्रवाहों को उनके स्वामी की जानकारी के साथ लौटाती है।

    SELECT   
        w.name AS 'Desktop flow',  
        w.workflowid AS 'Desktop flow Id',  
        w.createdon AS 'Created on',
        w.modifiedon AS 'Last modified on',
        w.definition AS 'Script',  
        w.ownerid AS 'Owner Id',  
        s.fullname AS 'Owner name',  
        s.internalemailaddress AS 'Owner email'
    FROM   
        workflow w  
    JOIN   
        systemuser s ON w.ownerid = s.systemuserid  
    WHERE   
        w.category = 6;  -- Only consider desktop flows (category 6)  

यह क्वेरी निर्दिष्ट डेस्कटॉप प्रवाह के डेस्कटॉप प्रवाह रन (प्रवाह सत्र) के लिए रनटाइम के न्यूनतम, माध्य (औसत), अधिकतम और मानक विचलन को प्राप्त करती है, जिसमें रनटाइम को मिलीसेकंड से निकटतम पूर्ण सेकंड में परिवर्तित किया जाता है। क्वेरी परिणामों को मशीन आईडी के आधार पर समूहीकृत करती है और इसमें मशीन नाम, प्रबंधन प्रकार, अधिकतम होस्ट की गई मशीन संख्या, सत्र क्षमता, तथा मशीन समूह और मशीन तालिकाओं से अंतिम हार्टबीट तिथि जैसे विवरण शामिल होते हैं।

    SELECT   
        f.machineid,  
        fm.name AS machine_name,  
        CASE   
            WHEN mg.managementtype = 0 THEN 'Regular Machine (Group)'  
            ELSE 'Hosted Machine (Group)'  
        END AS managementtype,  
        mg.maxmanagedmachinecount AS maxmanagedmachinecount,  
        fm.lastheartbeatdate AS last_heartbeat_date,  
        fm.sessioncapacity AS 'Max Parallel Sessions',    
        CEILING(MIN(f.runduration) / 1000.0) AS min_runtime,  
        CEILING(AVG(f.runduration) / 1000.0) AS mean_runtime,  
        CEILING(MAX(f.runduration) / 1000.0) AS max_runtime,  
        CEILING(STDEV(f.runduration) / 1000.0) AS stdev_runtime
    FROM   
        flowsession f  
    JOIN   
        flowmachinegroup mg ON f.machinegroupid = mg.flowmachinegroupid  
    JOIN   
        flowmachine fm ON f.machinegroupid = fm.flowmachinegroupid  
    WHERE   
        f.regardingobjectid = '[specific_flow_id]' -- Replace with the actual flow ID
    GROUP BY   
        f.machineid, fm.name, mg.managementtype, mg.maxmanagedmachinecount, fm.lastheartbeatdate, fm.sessioncapacity  
    ORDER BY   
        mean_runtime DESC;  

फ़ैब्रिक में परिणाम विंडो के साथ निष्पादित की जा रही SQL क्वेरी का स्क्रीनशॉट।

यह क्वेरी किसी विशिष्ट डेस्कटॉप प्रवाह के लिए मशीन और लाइसेंसिंग-संबंधी क्षमता संबंधी समस्याओं की पहचान करती है, जिससे संसाधन आवंटन को अनुकूलित करने और प्रदर्शन संबंधी बाधाओं को दूर करने में मदद मिलती है।

    SELECT   
        f.machineid,  
        fm.name AS machine_name,  
        CASE   
            WHEN mg.managementtype = 0 THEN 'Regular Machine (Group)'  
            ELSE 'Hosted Machine (Group)'  
        END AS managementtype,  
        mg.maxmanagedmachinecount AS maxmanagedmachinecount,  
        fm.lastheartbeatdate AS last_heartbeat_date,  
        fm.sessioncapacity AS 'Max Parallel Sessions',  
        fm.overcapacitysince,  
        CASE   
            WHEN fm.overcapacitysince IS NOT NULL THEN 'Over Capacity'  
            ELSE 'Within Capacity'  
        END AS capacity_status  
    FROM   
        flowsession f  
    JOIN   
        flowmachinegroup mg ON f.machinegroupid = mg.flowmachinegroupid  
    JOIN   
        flowmachine fm ON f.machinegroupid = fm.flowmachinegroupid
    WHERE   
        f.regardingobjectid = '[specific_flow_id]' -- Replace with the actual flow ID
    GROUP BY   
        f.machineid, fm.name, mg.managementtype, mg.maxmanagedmachinecount, fm.lastheartbeatdate, fm.sessioncapacity, fm.overcapacitysince  
    ORDER BY   
        capacity_status DESC, fm.lastheartbeatdate DESC;  

ऐसी स्क्रिप्ट खोजें जिनमें कनेक्शन में सादे टेक्स्ट पासवर्ड शामिल हों

यह क्वेरी उन सभी डेस्कटॉप प्रवाहों को खोजती है जो (OLEDB) डेटाबेस कनेक्शन स्ट्रिंग्स का उपयोग करते हैं, जिन्हें प्लेनटेक्स्ट पासवर्ड का उपयोग करने के लिए कॉन्फ़िगर किया गया है।

    SELECT   
        w.name AS 'Desktop flow',  
        w.workflowid AS 'Desktop flow Id',  
        w.createdon AS 'Created on',  
        w.modifiedon AS 'Last modified on',  
        w.definition AS 'Script',  
        w.ownerid AS 'Owner Id',  
        s.fullname AS 'Owner name',  
        s.internalemailaddress AS 'Owner email'  
    FROM   
        workflow w  
    JOIN   
        systemuser s ON w.ownerid = s.systemuserid  
    WHERE   
        w.category = 6  
        AND w.definition IS NOT NULL  
        AND (LOWER(w.definition) LIKE '%;password=%');

संभावित SQL इंजेक्शन जोखिम

यह क्वेरी, प्रवाह परिभाषाओं के भीतर database.executesqlstatement.execute के उपयोग की खोज करके, उन डेस्कटॉप प्रवाहों का पता लगाती है जिनमें SQL इंजेक्शन के प्रति संभावित रूप से असुरक्षित स्क्रिप्ट्स होती हैं। एक परिदृश्य पर विचार करें, जहां Execute SQL statement action में सीधे SQL कोड लिखने के बजाय, स्क्रिप्ट रनटाइम के दौरान स्क्रिप्ट को प्रदान किए गए Power Automate डेस्कटॉप इनपुट वैरिएबल (उदाहरण के लिए, %LetsDeleteAllGeneralLedgerEntriesFromDB%) का उपयोग करती है।

डेस्कटॉप में 'SQL कथन निष्पादित करें' कॉन्फ़िगरेशन संवाद का स्क्रीनशॉट. Power Automate

    SELECT   
        w.name AS 'Desktop flow',  
        w.workflowid AS 'Desktop flow Id',  
        w.createdon AS 'Created on',  
        w.modifiedon AS 'Last modified on',  
        w.definition AS 'Script',  
        w.ownerid AS 'Owner Id',  
        s.fullname AS 'Owner name',  
        s.internalemailaddress AS 'Owner email'  
    FROM   
        workflow w  
    JOIN   
        systemuser s ON w.ownerid = s.systemuserid  
    WHERE   
        w.category = 6  
        AND w.definition IS NOT NULL  
        AND LOWER(w.definition) LIKE '%database.executesqlstatement.execute%';
    

उन्नत API अनुरोध उपयोग

यह क्वेरी डेस्कटॉप प्रवाह को पुनः प्राप्त करती है जो बाहरी वेब सेवाओं या सेवाओं से कनेक्टिविटी की पहचान करने के लिए उन्नत API अनुरोध विधियों, जैसे curl, Invoke-RestMethod, और अन्य requests का उपयोग करती है।

    SELECT   
        w.name AS 'Desktop flow',  
        w.workflowid AS 'Desktop flow Id',  
        w.createdon AS 'Created on',  
        w.modifiedon AS 'Last modified on',  
        w.definition AS 'Script',  
        w.ownerid AS 'Owner Id',  
        s.fullname AS 'Owner name',  
        s.internalemailaddress AS 'Owner email'  
    FROM   
        workflow w  
    JOIN   
        systemuser s ON w.ownerid = s.systemuserid  
    WHERE   
        w.category = 6  
        AND w.definition IS NOT NULL  
        AND (
            LOWER(w.definition) LIKE '%curl%' OR 
            LOWER(w.definition) LIKE '%invoke-restmethod%' OR 
            LOWER(w.definition) LIKE '%invoke-webrequest%' OR 
            LOWER(w.definition) LIKE '%httpclient%' OR 
            LOWER(w.definition) LIKE '%requests.get%' OR 
            LOWER(w.definition) LIKE '%requests.post%' OR 
            LOWER(w.definition) LIKE '%fetch%' OR 
            LOWER(w.definition) LIKE '%axios%' OR 
            LOWER(w.definition) LIKE '%.ajax%'
        );
    

वेब एंडपॉइंट और URL शॉर्टकट का उपयोग

यह क्वेरी डेस्कटॉप प्रवाहों का पता लगाती है, जिनमें ऐसी स्क्रिप्ट होती हैं जो प्रतिबंधित URL उपयोग के संभावित जोखिमों का आकलन करने के लिए URL शॉर्टनर्स का संदर्भ देती हैं।

    SELECT   
        w.name AS 'Desktop flow',  
        w.workflowid AS 'Desktop flow Id',  
        w.createdon AS 'Created on',  
        w.modifiedon AS 'Last modified on',  
        w.definition AS 'Script',  
        w.ownerid AS 'Owner Id',  
        s.fullname AS 'Owner name',  
        s.internalemailaddress AS 'Owner email'  
    FROM   
        workflow w  
    JOIN   
        systemuser s ON w.ownerid = s.systemuserid  
    WHERE   
        w.category = 6  
        AND w.definition IS NOT NULL  
        AND (
            LOWER(w.definition) LIKE '%bit.ly%' OR 
            LOWER(w.definition) LIKE '%linkedin.com%' OR 
            LOWER(w.definition) LIKE '%aka.ms%' OR 
            LOWER(w.definition) LIKE '%tinyurl.com%' OR 
            LOWER(w.definition) LIKE '%goo.gl%' OR 
            LOWER(w.definition) LIKE '%t.co%' OR 
            LOWER(w.definition) LIKE '%fb.me%' OR 
            LOWER(w.definition) LIKE '%is.gd%' OR 
            LOWER(w.definition) LIKE '%buff.ly%'
        );
    

स्क्रिप्ट में त्रुटि प्रबंधन का अभाव

यह क्वेरी डेस्कटॉप प्रवाहों की खोज करती है, जिनमें किसी भी त्रुटि प्रबंधन तंत्र का अभाव होता है, जैसे कि on block error या on error, ताकि स्क्रिप्ट निष्पादन में मजबूती और विश्वसनीयता सुनिश्चित की जा सके।

    SELECT   
        w.name AS 'Desktop flow',  
        w.workflowid AS 'Desktop flow Id',  
        w.createdon AS 'Created on',  
        w.modifiedon AS 'Last modified on',  
        w.definition AS 'Script',  
        w.ownerid AS 'Owner Id',  
        s.fullname AS 'Owner name',  
        s.internalemailaddress AS 'Owner email'  
    FROM   
        workflow w  
    JOIN   
        systemuser s ON w.ownerid = s.systemuserid  
    WHERE   
        w.category = 6  
        AND w.definition IS NOT NULL  
        AND NOT (LOWER(w.definition) LIKE '%on block error%' OR LOWER(w.definition) LIKE '%on error%');
    

नोट

इस अनुभाग के साथ आगे बढ़ने से पहले, सुनिश्चित करें कि डेस्कटॉप फ़्लो लॉग V2 आपके परिवेश में सक्षम किया गया है और आपके पास मौजूदा डेस्कटॉप फ़्लो रन हैं।

डेस्कटॉप प्रवाह प्रतिबंधित URL पहुँच के साथ चलता है

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

    SELECT   
        JSON_VALUE(f.data, '$.name') AS ActionName,  
        f.data AS 'Action log',  
        f.parentobjectid AS 'Parent object id',  
        f.createdon AS 'Log created on',
        w.name AS 'Desktop flow',  
        w.workflowid AS 'Desktop flow Id',  
        w.createdon AS 'Created on',  
        w.modifiedon AS 'Last modified on',  
        w.definition AS 'Script',  
        w.ownerid AS 'Owner Id',  
        s.fullname AS 'Owner name',  
        s.internalemailaddress AS 'Owner email'  
    FROM  
        [flowlog] f  
    JOIN  flowsession fs ON f.parentobjectid = fs.flowsessionid         
    JOIN  workflow w ON fs.regardingobjectid = w.workflowid  
    JOIN  systemuser s ON w.ownerid = s.systemuserid  
    WHERE   
        w.workflowid = '[specific_flow_id]' -- Replace with the actual flow ID
        AND f.createdon >= DATEADD(day, -21, GETDATE())
        AND JSON_VALUE(f.data, '$.name') = 'Invoke web service'  
        AND (  
            f.data LIKE '%contoso-default.crm.dynamics.com/api%'  
            OR f.data LIKE '%api.second-restricted-url.net%'  
            OR f.data LIKE '%api.third-restricted-url.de%'  
            OR f.data LIKE '%api.phishing-example.com%'  
        );

डेस्कटॉप प्रवाह क्रिप्टोग्राफ़िक कोड के साथ चलता है

यह क्वेरी पिछले सात दिनों में क्रिप्टोग्राफ़िक कोड को शामिल करने वाली PowerShell स्क्रिप्ट क्रियाओं के लिए डेस्कटॉप प्रवाह रन को स्कैन करती है।

    -- Queries actions logs named 'Run PowerShell script' that contain code that that uses cryptographic libraries 
    -- and terms such as "AES", "RSA", "encryption", or "decryption," which may indicate risky operations
    SELECT top(1)
        JSON_VALUE(data, '$.name') AS ActionName,
        JSON_VALUE(data, '$.inputs') AS Inputs,
        JSON_VALUE(data, '$.outputs') AS Outputs
    FROM 
        [flowlog]
    WHERE
        JSON_VALUE(data, '$.name') = 'Run PowerShell script'
        AND createdon >= DATEADD(day, -7, GETDATE())
        AND (
            JSON_VALUE(data, '$.inputs') LIKE '%AES%'
            OR JSON_VALUE(data, '$.inputs') LIKE '%RSA%'
            OR JSON_VALUE(data, '$.inputs') LIKE '%encryption%'
            OR JSON_VALUE(data, '$.inputs') LIKE '%decryption%'
        )
    ORDER BY
        ActionName
    

डेस्कटॉप प्रवाह प्रो-कोड उपयोग के साथ चलता है

यह प्रश्न थोड़ा अधिक उन्नत है। यह पिछले सात दिनों के प्रो-कोडिंग भागों (जैसे VBScript, PowerShell, JavaScript, .NET, या Python) के साथ अलग-अलग डेस्कटॉप फ्लो रन (फ्लो सत्र) की पहचान करता है और उनकी गणना करता है, तथा परिणामों को डेस्कटॉप फ्लो के आधार पर समूहीकृत करता है।

WITH ProCodingSessions AS (  
    SELECT   
        fs.flowsessionid,  
        f.data AS 'Action log',  
        f.parentobjectid AS 'Parent object id',  
        f.createdon AS 'Log created on',  
        w.name AS 'Desktop flow',  
        w.workflowid AS 'Desktop flow Id',  
        w.createdon AS 'Created on',  
        w.modifiedon AS 'Last modified on',  
        w.definition AS 'Script',  
        w.ownerid AS 'Owner Id',  
        s.fullname AS 'Owner name',  
        s.internalemailaddress AS 'Owner email'  
    FROM [flowlog] f  
    JOIN flowsession fs ON f.parentobjectid = fs.flowsessionid  
    JOIN workflow w ON fs.regardingobjectid = w.workflowid  
    JOIN systemuser s ON w.ownerid = s.systemuserid  
    WHERE f.createdon >= DATEADD(day, -7, GETDATE())  
    AND (  
        LOWER(w.definition) LIKE '%runvbscript%' OR  
        LOWER(w.definition) LIKE '%runpowershellscript%' OR  
        LOWER(w.definition) LIKE '%runjavascript%' OR  
        LOWER(w.definition) LIKE '%rundotnetscript%' OR  
        LOWER(w.definition) LIKE '%runpythonscript%'  
    )  
),  
FlowCounts AS (  
    SELECT  
        p.[Desktop flow],  
        p.[Desktop flow Id],  
        p.[Created on],  
        p.[Last modified on],  
        p.[Script],  
        p.[Owner Id],  
        p.[Owner name],  
        p.[Owner email],  
        COUNT(DISTINCT p.flowsessionid) AS ProCodingSessionCount  
    FROM ProCodingSessions p  
    GROUP BY  
        p.[Desktop flow],  
        p.[Desktop flow Id],  
        p.[Created on],  
        p.[Last modified on],  
        p.[Script],  
        p.[Owner Id],  
        p.[Owner name],  
        p.[Owner email]  
)  
SELECT  
    f.[Desktop flow],  
    f.[Desktop flow Id],  
    f.[Created on],  
    f.[Last modified on],  
    f.[Script],  
    f.[Owner Id],  
    f.[Owner name],  
    f.[Owner email],  
    f.ProCodingSessionCount AS 'Runs with pro-code' 
FROM FlowCounts f  
ORDER BY f.ProCodingSessionCount DESC;  

शीर्ष 10 असफल डेस्कटॉप प्रवाह क्रियाएँ

यह क्वेरी पिछले सात दिनों में त्रुटियों की संख्या के आधार पर शीर्ष 10 असफल कार्रवाइयों को लौटाती है।

    SELECT TOP(10)   
        JSON_VALUE(data, '$.name') AS ActionName,  
        SUM(CASE WHEN JSON_VALUE(data, '$.status') = 'Failed' THEN 1 ELSE 0 END) AS ErrorCount  
    FROM [flowlog]  
    WHERE createdon >= DATEADD(day, -7, GETDATE())  
    GROUP BY JSON_VALUE(data, '$.name')  
    HAVING SUM(CASE WHEN JSON_VALUE(data, '$.status') = 'Failed' THEN 1 ELSE 0 END) > 0  
    ORDER BY ErrorCount DESC;  

गिनती के साथ शीर्ष 10 त्रुटि कोड

    SELECT TOP(10)  
        JSON_VALUE(data, '$.errorCode') AS ErrorCode,  
        COUNT(*) AS OccurrenceCount  
    FROM [flowlog]  
    WHERE createdon >= DATEADD(day, -7, GETDATE())  
      AND JSON_VALUE(data, '$.status') = 'Failed'  
    GROUP BY JSON_VALUE(data, '$.errorCode')  
    ORDER BY OccurrenceCount DESC;