Changes between Version 1 and Version 2 of AdvancedReports
- Timestamp:
- 01/30/25 16:59:39 (3 weeks ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
AdvancedReports
v1 v2 11 11 EXTRACT(YEAR FROM pmr.Date_Created) AS Year, 12 12 COUNT(DISTINCT pmr.RequestID) AS Total_Profile_Requests, 13 COUNT(DISTINCT pmr.RequestID) FILTER (WHERE pmr.Status = ' Completed') AS Completed_Profile_Requests,14 COUNT(DISTINCT pmr.RequestID) FILTER (WHERE pmr.Status = ' In Progress') AS InProgress_Profile_Requests,15 COUNT(DISTINCT pmr.RequestID) FILTER (WHERE pmr.Status = ' Pending') AS Pending_Profile_Requests,13 COUNT(DISTINCT pmr.RequestID) FILTER (WHERE pmr.Status = 'completed') AS Completed_Profile_Requests, 14 COUNT(DISTINCT pmr.RequestID) FILTER (WHERE pmr.Status = 'in progress') AS InProgress_Profile_Requests, 15 COUNT(DISTINCT pmr.RequestID) FILTER (WHERE pmr.Status = 'pending') AS Pending_Profile_Requests, 16 16 SUM(pmr.Target_Followers) AS Total_Target_Followers, 17 17 AVG(pmr.Target_Followers) AS Average_Target_Followers, 18 SUM(pmr.Target_Followers) - SUM(s p.Followers_Count) AS Followers_Gap18 SUM(pmr.Target_Followers) - SUM(smp.followers_count) AS Followers_Gap 19 19 20 20 FROM 21 user u22 LEFT JOIN social _media_profile smp ON smp.UserID = u.UserID23 LEFT JOIN profile _marketing_request pmr ON pmr.ProfileID = smp.ProfileID24 LEFT JOIN service _provider sp ON sp.ProviderID = pmr.ProviderID21 app_user u 22 LEFT JOIN socialmediaprofile smp ON smp.UserID = u.UserID 23 LEFT JOIN profilemarketingrequest pmr ON pmr.ProfileID = smp.ProfileID 24 LEFT JOIN serviceprovider sp ON sp.ProviderID = pmr.ProviderID 25 25 WHERE 26 26 pmr.Date_Created >= DATE_TRUNC('year', CURRENT_DATE) -- Optional: Filter by the current year … … 37 37 38 38 39 == Total Marketing Requests per User ==40 41 This query retrieves the total number of marketing requests submitted by each user.42 43 {{{44 SELECT45 u.user_id,46 u.username,47 COUNT(DISTINCT pmr.request_id) AS profile_requests,48 COUNT(DISTINCT ppr.request_id) AS post_requests,49 (COUNT(DISTINCT pmr.request_id) + COUNT(DISTINCT ppr.request_id)) AS total_requests50 FROM users u51 LEFT JOIN profile_marketing_requests pmr ON u.user_id = pmr.user_id52 LEFT JOIN post_marketing_requests ppr ON u.user_id = ppr.user_id53 GROUP BY u.user_id, u.username;54 55 }}}56 57 39 == Track Progress of Profile Marketing Request == 58 40 This SQL report will track the progress for profile marketing requests and provide a detailed breakdown of the progress made, including the percentage of completion. … … 69 51 pmr.Timeline AS Goal_Timeline, 70 52 pmr.Date_Created AS Request_Creation_Date, 71 DATEDIFF(CURRENT_DATE,pmr.Date_Created) AS Days_Since_Creation,72 DATEDIFF(pmr.Timeline,CURRENT_DATE) AS Days_Remaining53 EXTRACT(DAY FROM CURRENT_DATE - pmr.Date_Created) AS Days_Since_Creation, 54 EXTRACT(DAY FROM pmr.Timeline - CURRENT_DATE) AS Days_Remaining 73 55 FROM 74 profile _marketing_request pmr56 profilemarketingrequest pmr 75 57 JOIN 76 social _media_profile smp ON smp.ProfileID = pmr.ProfileID58 socialmediaprofile smp ON smp.ProfileID = pmr.ProfileID 77 59 JOIN 78 user u ON u.UserID = smp.UserID60 app_user u ON u.UserID = smp.UserID 79 61 WHERE 80 pmr.Status IN (' In Progress', 'Pending')62 pmr.Status IN ('in progress', 'pending') 81 63 ORDER BY 82 64 pmr.Date_Created DESC; 83 84 }}} 85 86 == Track Progress of Profile Marketing Request == 65 }}} 66 67 == Track Progress of Post Marketing Request == 87 68 This SQL report will track the progress for post marketing requests and provide a detailed breakdown of the progress made, including the percentage of completion. 88 69 … … 96 77 pmr.Target_Comments, 97 78 -- Calculate percentage of likes and comments achieved 98 ROUND((p.Likes_Count / pmr.Target_Likes) * 100, 2) AS Likes_Progress_Percentage,99 ROUND((p.Comments_Count / pmr.Target_Comments) * 100, 2) AS Comments_Progress_Percentage,79 ROUND((p.Likes_Count::decimal / pmr.Target_Likes::decimal) * 100, 2) AS Likes_Progress_Percentage, 80 ROUND((p.Comments_Count::decimal / pmr.Target_Comments::decimal) * 100, 2) AS Comments_Progress_Percentage, 100 81 -- Calculate the remaining time in days 101 DATEDIFF(pmr.Timeline,CURRENT_DATE) AS Days_Remaining,82 (pmr.Timeline - CURRENT_DATE) AS Days_Remaining, 102 83 -- Determine the progress status based on the progress 103 84 CASE 104 WHEN pmr.Status = ' Completed' THEN 'Completed'85 WHEN pmr.Status = 'completed' THEN 'completed' 105 86 WHEN (p.Likes_Count >= pmr.Target_Likes AND p.Comments_Count >= pmr.Target_Comments) THEN 'Completed' 106 WHEN DATEDIFF(pmr.Timeline, CURRENT_DATE) <= 0THEN 'Deadline Passed'87 WHEN (pmr.Timeline < CURRENT_DATE) THEN 'Deadline Passed' 107 88 ELSE 'In Progress' 108 89 END AS Request_Status 109 90 FROM 110 post _marketing_request pmr91 postmarketingrequest pmr 111 92 JOIN 112 93 post p ON pmr.PostID = p.PostID 113 94 WHERE 114 pmr.Status <> ' Completed' -- To show only active or pending requests95 pmr.Status <> 'completed' -- To show only active or pending requests 115 96 ORDER BY 116 97 pmr.Date_Created DESC; … … 122 103 123 104 {{{ 124 DELIMITER $$ 125 126 CREATE PROCEDURE TrackMarketingRequestProgress( 127 IN request_type VARCHAR(50), -- Type of the request ('profile' or 'post') 128 IN request_id INT 105 CREATE OR REPLACE FUNCTION TrackMarketingRequestProgress( 106 request_type VARCHAR, -- Type of the request ('profile' or 'post') 107 request_id INT 129 108 ) 109 RETURNS TABLE ( 110 RequestID INT, 111 TargetFollowers INT, 112 CurrentFollowers INT, 113 ProgressPercentage DECIMAL(5,2), 114 Status VARCHAR, 115 Deadline DATE, 116 DaysRemaining INT 117 ) AS $$ 118 DECLARE 119 target INT; 120 current INT; 121 progress_percentage DECIMAL(5,2); 122 request_status VARCHAR; 123 deadline DATE; 124 current_date DATE := CURRENT_DATE; -- Get today's date 130 125 BEGIN 131 DECLARE target INT;132 DECLARE current INT;133 DECLARE progress_percentage DECIMAL(5,2);134 DECLARE request_status VARCHAR(50);135 DECLARE deadline DATE;136 DECLARE current_date DATE;137 138 SET current_date = CURDATE(); -- Get today's date139 140 126 -- For profile marketing request 141 127 IF request_type = 'profile' THEN 142 128 -- Retrieve target followers from profile marketing request 143 SELECT Target_Followers, Followers_Count, Status,Timeline129 SELECT pmr.Target_Followers, smp.Followers_Count, pmr.Status, pmr.Timeline 144 130 INTO target, current, request_status, deadline 145 FROM profile _marketing_request pmr146 JOIN social _media_profile smp ON pmr.ProfileID = smp.ProfileID131 FROM profilemarketingrequest pmr 132 JOIN socialmediaprofile smp ON pmr.ProfileID = smp.ProfileID 147 133 WHERE pmr.RequestID = request_id; 148 134 149 135 -- Calculate the percentage of the target achieved 150 SET progress_percentage= (current / target) * 100;136 progress_percentage := (current / target) * 100; 151 137 152 138 -- Return the progress report 139 RETURN QUERY 153 140 SELECT 154 141 request_id AS RequestID, … … 158 145 request_status AS Status, 159 146 deadline AS Deadline, 160 DATEDIFF(deadline,current_date) AS DaysRemaining;147 (deadline - current_date) AS DaysRemaining; 161 148 162 149 -- For post marketing request 163 ELS EIF request_type = 'post' THEN150 ELSIF request_type = 'post' THEN 164 151 -- Retrieve target likes/comments from post marketing request 165 SELECT Target_Likes, Target_Comments, Likes_Count, Comments_Count, Status,Timeline152 SELECT pmr.Target_Likes, pmr.Target_Comments, p.Likes_Count, p.Comments_Count, pmr.Status, pmr.Timeline 166 153 INTO target, current, request_status, deadline 167 FROM post _marketing_request pmr154 FROM postmarketingrequest pmr 168 155 JOIN post p ON pmr.PostID = p.PostID 169 156 WHERE pmr.RequestID = request_id; 170 157 171 158 -- Calculate the percentage of the target achieved 172 SET progress_percentage= (current / target) * 100;159 progress_percentage := (current / target) * 100; 173 160 174 161 -- Return the progress report 162 RETURN QUERY 175 163 SELECT 176 164 request_id AS RequestID, … … 180 168 request_status AS Status, 181 169 deadline AS Deadline, 182 DATEDIFF(deadline,current_date) AS DaysRemaining;170 (deadline - current_date) AS DaysRemaining; 183 171 END IF; 184 END $$ 185 186 DELIMITER ; 187 172 END; 173 $$ LANGUAGE plpgsql; 188 174 }}} 189 175 … … 191 177 192 178 {{{ 193 CALL TrackMarketingRequestProgress('profile', 101); 194 CALL TrackMarketingRequestProgress('post', 202); 195 }}} 196 197 198 == Most Popular Marketing Goal == 179 SELECT * FROM TrackMarketingRequestProgress('profile', 101); 180 SELECT * FROM TrackMarketingRequestProgress('post', 202); 181 }}} 182 Expected output for a Profile Marketing Request: 183 ||**RequestID** ||**TargetFollowers** ||**CurrentFollowers** ||**ProgressPercentage** ||**Status** ||**Deadline** ||DaysRemaining|| 184 ||101 ||5000 ||3000 ||60.00 ||In Progress ||2025-02-15 ||16|| 185 186 Expected output for a Post Marketing Request: 187 ||**RequestID** ||**TargetLikesComments** ||**CurrentLikesComments** ||**ProgressPercentage** ||**Status** ||**Deadline** ||**DaysRemaining**|| 188 ||202 ||2000 ||1200 ||60.00 ||In Progress ||2025-02-10 ||11|| 189 190 == Most Popular Marketing Request == 199 191 This report will provide an analysis of which marketing goal (e.g., increasing followers or increasing likes) is the most popular among users. Since there are two types of marketing requests—Profile Marketing Requests and Post Marketing Requests—we will treat them as separate entities and analyze the frequency of each goal type across both entities. 200 192 {{{ … … 209 201 END AS Target_Value, 210 202 COUNT(*) AS Total_Requests, 211 AVG(prm.Timeline) AS Avg_Timeline 203 AVG( 204 CASE 205 WHEN pmr.Target_Followers IS NOT NULL THEN 206 EXTRACT(DAY FROM pmr.Timeline - pmr.Date_Created) -- Calculating the number of days for profile-based requests 207 ELSE 208 EXTRACT(DAY FROM prm.Timeline - prm.Date_Created) -- Calculating the number of days for post-based requests 209 END 210 ) AS Avg_Timeline_Days 212 211 FROM 213 profile _marketing_request pmr212 profilemarketingrequest pmr 214 213 LEFT JOIN 215 post _marketing_request prm ON pmr.RequestID = prm.RequestID214 postmarketingrequest prm ON pmr.RequestID = prm.RequestID 216 215 GROUP BY 217 216 Request_Type, … … 222 221 ORDER BY 223 222 Total_Requests DESC, Target_Value DESC; 224 225 }}} 226 223 }}} 224 Example output: 225 ||**Request_Type** || **Target_Value**|| **Total_Requests**|| **Avg_Timeline**|| 226 ||Profile-Based ||10,000 ||25 ||14 days|| 227 ||Post-Based ||5,000 ||18 ||10 days|| 228 ||Post-Based ||3,000 ||15 ||7 days|| 229 ||Profile-Based ||50,000 ||10 ||30 days|| 227 230 228 231 == Get Monthly Marketing Request Statistics == … … 230 233 This stored procedure retrieves monthly statistics for marketing requests, separating profile-based and post-based requests. 231 234 {{{ 232 DELIMITER // 233 234 CREATE PROCEDURE GetMonthlyMarketingRequestStatistics(IN targetMonth INT, IN targetYear INT) 235 CREATE OR REPLACE FUNCTION GetMonthlyMarketingRequestStatistics(targetMonth INT, targetYear INT) 236 RETURNS TABLE ( 237 total_requests INT, 238 total_completed_requests INT, 239 avg_timeline DECIMAL, 240 total_target_followers INT, 241 total_target_likes INT, 242 total_target_comments INT 243 ) AS $$ 235 244 BEGIN 236 -- Declare variables to hold the statistics 237 DECLARE totalRequests INT; 238 DECLARE totalCompletedRequests INT; 239 DECLARE avgTimeline DECIMAL(10, 2); 240 DECLARE totalTargetFollowers INT; 241 DECLARE totalTargetLikes INT; 242 DECLARE totalTargetComments INT; 243 244 -- Get the total number of marketing requests in the given month 245 SELECT COUNT(*) INTO totalRequests 246 FROM profile_marketing_request 247 WHERE MONTH(Date_Created) = targetMonth AND YEAR(Date_Created) = targetYear 248 UNION ALL 249 SELECT COUNT(*) 250 FROM post_marketing_request 251 WHERE MONTH(Date_Created) = targetMonth AND YEAR(Date_Created) = targetYear; 252 253 -- Get the total number of completed requests 254 SELECT COUNT(*) INTO totalCompletedRequests 255 FROM profile_marketing_request 256 WHERE MONTH(Date_Created) = targetMonth AND YEAR(Date_Created) = targetYear AND Status = 'Completed' 257 UNION ALL 258 SELECT COUNT(*) 259 FROM post_marketing_request 260 WHERE MONTH(Date_Created) = targetMonth AND YEAR(Date_Created) = targetYear AND Status = 'Completed'; 261 262 -- Get the average timeline for marketing requests in the given month 263 SELECT AVG(DATEDIFF(NOW(), Date_Created)) INTO avgTimeline 264 FROM profile_marketing_request 265 WHERE MONTH(Date_Created) = targetMonth AND YEAR(Date_Created) = targetYear 266 UNION ALL 267 SELECT AVG(DATEDIFF(NOW(), Date_Created)) 268 FROM post_marketing_request 269 WHERE MONTH(Date_Created) = targetMonth AND YEAR(Date_Created) = targetYear; 270 271 -- Get the total target followers requested in the given month 272 SELECT SUM(Target_Followers) INTO totalTargetFollowers 273 FROM profile_marketing_request 274 WHERE MONTH(Date_Created) = targetMonth AND YEAR(Date_Created) = targetYear; 275 276 -- Get the total target likes and comments requested in the given month 277 SELECT SUM(Target_Likes) INTO totalTargetLikes 278 FROM post_marketing_request 279 WHERE MONTH(Date_Created) = targetMonth AND YEAR(Date_Created) = targetYear; 280 281 SELECT SUM(Target_Comments) INTO totalTargetComments 282 FROM post_marketing_request 283 WHERE MONTH(Date_Created) = targetMonth AND YEAR(Date_Created) = targetYear; 284 285 -- Output the results 286 SELECT 287 totalRequests AS "Total Requests", 288 totalCompletedRequests AS "Completed Requests", 289 avgTimeline AS "Average Timeline (Days)", 290 totalTargetFollowers AS "Total Target Followers", 291 totalTargetLikes AS "Total Target Likes", 292 totalTargetComments AS "Total Target Comments"; 293 294 END // 295 296 DELIMITER ; 245 -- Calculate total number of marketing requests 246 SELECT 247 COUNT(*) 248 INTO total_requests 249 FROM ( 250 SELECT Date_Created FROM profilemarketingrequest 251 WHERE EXTRACT(MONTH FROM Date_Created) = targetMonth 252 AND EXTRACT(YEAR FROM Date_Created) = targetYear 253 UNION ALL 254 SELECT Date_Created FROM postmarketingrequest 255 WHERE EXTRACT(MONTH FROM Date_Created) = targetMonth 256 AND EXTRACT(YEAR FROM Date_Created) = targetYear 257 ) AS combined_requests; 258 259 -- Calculate total number of completed requests 260 SELECT 261 COUNT(*) 262 INTO total_completed_requests 263 FROM ( 264 SELECT Date_Created FROM profilemarketingrequest 265 WHERE EXTRACT(MONTH FROM Date_Created) = targetMonth 266 AND EXTRACT(YEAR FROM Date_Created) = targetYear 267 AND Status = 'completed' 268 UNION ALL 269 SELECT Date_Created FROM postmarketingrequest 270 WHERE EXTRACT(MONTH FROM Date_Created) = targetMonth 271 AND EXTRACT(YEAR FROM Date_Created) = targetYear 272 AND Status = 'completed' 273 ) AS completed_requests; 274 275 -- Calculate the average timeline for requests 276 SELECT 277 AVG(EXTRACT(DAY FROM NOW() - Date_Created)) 278 INTO avg_timeline 279 FROM ( 280 SELECT Date_Created FROM profilemarketingrequest 281 WHERE EXTRACT(MONTH FROM Date_Created) = targetMonth 282 AND EXTRACT(YEAR FROM Date_Created) = targetYear 283 UNION ALL 284 SELECT Date_Created FROM postmarketingrequest 285 WHERE EXTRACT(MONTH FROM Date_Created) = targetMonth 286 AND EXTRACT(YEAR FROM Date_Created) = targetYear 287 ) AS timeline_requests; 288 289 -- Calculate total target followers for profile-based requests 290 SELECT 291 SUM(Target_Followers) 292 INTO total_target_followers 293 FROM profilemarketingrequest 294 WHERE EXTRACT(MONTH FROM Date_Created) = targetMonth 295 AND EXTRACT(YEAR FROM Date_Created) = targetYear; 296 297 -- Calculate total target likes for post-based requests 298 SELECT 299 SUM(Target_Likes) 300 INTO total_target_likes 301 FROM postmarketingrequest 302 WHERE EXTRACT(MONTH FROM Date_Created) = targetMonth 303 AND EXTRACT(YEAR FROM Date_Created) = targetYear; 304 305 -- Calculate total target comments for post-based requests 306 SELECT 307 SUM(Target_Comments) 308 INTO total_target_comments 309 FROM postmarketingrequest 310 WHERE EXTRACT(MONTH FROM Date_Created) = targetMonth 311 AND EXTRACT(YEAR FROM Date_Created) = targetYear; 312 313 -- Return the results as a record 314 RETURN QUERY 315 SELECT total_requests, total_completed_requests, avg_timeline, 316 total_target_followers, total_target_likes, total_target_comments; 317 END; 318 $$ LANGUAGE plpgsql; 319 320 SELECT * FROM GetMonthlyMarketingRequestStatistics(1, 2024); 297 321 298 322 }}} … … 301 325 302 326 {{{ 303 CALL GetMonthlyMarketingRequestStatistics(1, 2025);304 }}} 305 306 327 SELECT * FROM GetMonthlyMarketingRequestStatistics(1, 2024); 328 }}} 329 330