नोट
इस पेज तक पहुँच के लिए प्रमाणन की आवश्यकता होती है. आप साइन इन करने या निर्देशिकाओं को बदलने का प्रयास कर सकते हैं.
इस पेज तक पहुँच के लिए प्रमाणन की आवश्यकता होती है. आप निर्देशिकाओं को बदलने का प्रयास कर सकते हैं.
नोट
अस्वीकरण: इस ट्यूटोरियल में उपयोग किए गए परिदृश्य, क्वेरी उदाहरण और डेटा काल्पनिक हैं, इनमें त्रुटियां, अक्षमताएं शामिल हो सकती हैं, और ये केवल प्रदर्शन के उद्देश्य से हैं।
स्वचालन-संबंधित तालिकाओं की सूची
निम्न तालिका में रिपोर्टिंग और अवलोकन के लिए अक्सर उपयोग की जाने वाली स्वचालन-संबंधी तालिकाएं सूचीबद्ध हैं।
डिस्प्ले का नाम | ऑब्जेक्ट का नाम | उद्देश्य |
---|---|---|
प्रवाह लॉग | फ्लोलॉग | इसमें कई तरह के लॉग शामिल हैं, जैसे कस्टम लॉग, डेस्कटॉप फ्लो एक्शन लॉग V2, मशीन रन क्यू लॉग, अनअटेंडेड सेल्फ-हील रिक्वेस्ट/रिस्पॉन्स और वर्क क्यू प्रोसेसिंग लॉग आदि। डेटा को इलास्टिक टेबल में स्टोर किया जाता है और लॉग टाइप के आधार पर, इसे संगठन में अपनी खुद की टाइम-टू-लाइव (TTL) सेटिंग के साथ कॉन्फ़िगर किया जा सकता है। तालिका ( FlowLogsTtlInMinutes और डेस्कटॉप FlowQueueLogsTtlInMinutes Dataverse ), जो परिभाषित करता है कि रिकॉर्ड को तालिका से स्वचालित रूप से कब हटाया जाना चाहिए।............ |
प्रवाह मशीन | प्रवाह मशीन | इसमें मशीन और होस्टेड मशीन से संबंधित जानकारी शामिल है। |
फ्लो मशीन ग्रुप | फ़्लोमशीनग्रुप | इसमें मशीन समूह और होस्टेड मशीन समूह से संबंधित जानकारी शामिल है। |
फ्लो रन | फ्लोरन | इसमें क्लाउड प्रवाह रन से संबंधित डेटा जैसे प्रारंभ, अंत, अवधि, मूल प्रवाह संदर्भ आदि शामिल हैं। |
प्रवाह सत्र | प्रवाह सत्र | इसमें डेस्कटॉप प्रवाह रन से संबंधित डेटा शामिल होता है, जैसे प्रारंभ, अवधि, स्थिति, मशीन, रोबोट खाता, मूल प्रवाह संदर्भ आदि। |
प्रक्रिया | कार्यप्रवाह | इसमें डेस्कटॉप प्रवाह और समाधान-आधारित क्लाउड प्रवाह (अन्य वर्कफ़्लो प्रकारों के साथ) शामिल हैं। |
उपयोगकर्ता | systemuser | Dataverse उपयोगकर्ता का प्रतिनिधित्व करता है. |
कार्य कतार | कार्यपंक्ति | वर्कफ़्लो निष्पादन का एक उदाहरण दर्शाता है. |
कार्य पंक्ति आइटम | कार्यकतारआइटम | इसमें वर्कफ़्लो के प्रत्येक रन के बारे में जानकारी शामिल होती है. |
सरलीकृत तालिका संबंध आरेख
छवि स्वचालन के लिए केवल प्रासंगिक तालिका संबंध दिखाती है।
फ़ैब्रिक में अपनी पहली क्वेरी बनाएँ
contoso_westus_accounts_payable
लेकहाउस के लिए फैब्रिक में SQL एनालिटिकल एंडपॉइंट पर एक नमूना SQL क्वेरी बनाने के लिए इन चरणों का पालन करें।
अपना वेब ब्राउज़र खोलें, पोर्टल ( Microsoft Fabric ) पर जाएं और अपने क्रेडेंशियल्स के साथ लॉग इन करें।https://powerbi.com
वह कार्यस्थान चुनें जहां आपका Lakehouse स्थित है, फिर वांछित SQL विश्लेषणात्मक समापन बिंदु (आपके Lakehouse का एक उपनोड) चुनें।
SQL एनालिटिकल एंडपॉइंट में, SQL क्वेरी संपादक खोलने के लिए नई SQL क्वेरी का चयन करें.
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;
यहां
Flow Sessions
(डेस्कटॉप प्रवाह रन) तालिका के लिए उपलब्ध स्थिति कारणों (स्थिति कोड) की सूची दी गई है।स्थिति विवरण मान विराम दिया गया 1 चल रहा 2 प्रतीक्षा कर रहा है 3 सफल हुआ 4 छोड़ा गया 5 निलंबित 6 रद्द किया गया 7 में विफल 8 गलती 9 समय समाप्त हुआ 10 निरस्त 11 अनदेखा किया गया 12" यह सुनिश्चित करने के लिए कि वे आपकी आवश्यकताओं को पूरा करते हैं, क्वेरी परिणामों की समीक्षा करें।
(वैकल्पिक) SQL क्वेरी को हाइलाइट करके और क्वेरी आउटपुट अनुभाग में Excel में खोलें का चयन करके Excel में परिणामों के साथ एक लाइव-क्वेरी खोलें। यह आगे के विश्लेषण के लिए SQL Analytics एंडपॉइंट पर लाइव-क्वेरी के साथ एक Excel फ़ाइल तैयार करता है और डाउनलोड करता है।
(वैकल्पिक) भविष्य में उपयोग के लिए 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;
मशीन और लाइसेंसिंग क्षमता से संबंधित प्रश्न
यह क्वेरी किसी विशिष्ट डेस्कटॉप प्रवाह के लिए मशीन और लाइसेंसिंग-संबंधी क्षमता संबंधी समस्याओं की पहचान करती है, जिससे संसाधन आवंटन को अनुकूलित करने और प्रदर्शन संबंधी बाधाओं को दूर करने में मदद मिलती है।
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%) का उपयोग करती है।
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 एक्शन लॉग के लिए शासन-संबंधी क्वेरी उदाहरण
नोट
इस अनुभाग के साथ आगे बढ़ने से पहले, सुनिश्चित करें कि डेस्कटॉप फ़्लो लॉग 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;
V2 एक्शन लॉग के लिए त्रुटि और प्रदर्शन-संबंधी क्वेरीज़
शीर्ष 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;