ananyasethi24 opened a new issue, #34245:
URL: https://github.com/apache/superset/issues/34245

   <html>
   <body>
   <!--StartFragment--><h2 data-start="132" data-end="208">[SIP] Proposal for 
Enhanced Aggregation Customization in Totals/Subtotals</h2>
   <h3 data-start="210" data-end="224">Motivation</h3>
   <p data-start="226" data-end="503">Currently, Apache Superset applies the 
same aggregation function across all fields when rendering row and column 
<strong data-start="339" data-end="349">totals</strong> and <strong 
data-start="354" data-end="367">subtotals</strong> in pivot tables and similar 
visualizations. This creates a limitation when users need different aggregation 
logic for different fields.</p>
   <p data-start="505" data-end="518">For instance:</p>
   <ul data-start="519" data-end="849">
   <li data-start="519" data-end="684">
   <p data-start="521" data-end="684">A user may want <strong data-start="537" 
data-end="544">SUM</strong> to be applied on a metric like <code 
data-start="576" data-end="602">"Total Disbursed Amount"</code> and <strong 
data-start="607" data-end="618">AVERAGE</strong> or <strong data-start="622" 
data-end="647">custom % contribution</strong> on another metric like <code 
data-start="671" data-end="683">"% Booked"</code>.</p>
   </li>
   <li data-start="685" data-end="849">
   <p data-start="687" data-end="849">Currently, this is not supported — once a 
total/subtotal aggregation function is selected, it applies uniformly to all 
fields in both row and column aggregations.</p>
   </li>
   </ul>
   <p data-start="851" data-end="1027">This constraint reduces the flexibility 
and usability of dashboards with multi-metric visualizations where different 
fields inherently require different aggregation strategies.</p>
   <h3 data-start="1029" data-end="1048">Proposed Change</h3>
   <p data-start="1050" data-end="1175">Introduce support for <strong 
data-start="1072" data-end="1113">field-level aggregation 
customization</strong> in the totals and subtotals logic. This could be 
achieved by:</p>
   <ol data-start="1177" data-end="1558">
   <li data-start="1177" data-end="1289">
   <p data-start="1180" data-end="1289">Allowing users to configure <strong 
data-start="1208" data-end="1243">aggregation function per metric</strong> for 
subtotals and totals in the Explore view.</p>
   </li>
   <li data-start="1290" data-end="1440">
   <p data-start="1293" data-end="1369">Providing a UI interface to specify 
<strong data-start="1329" data-end="1364">different aggregation 
functions</strong> for:</p>
   <ul data-start="1373" data-end="1440">
   <li data-start="1373" data-end="1386">
   <p data-start="1375" data-end="1386">Each metric</p>
   </li>
   <li data-start="1390" data-end="1440">
   <p data-start="1392" data-end="1440">Row totals/subtotals vs. column 
totals/subtotals</p>
   </li>
   </ul>
   </li>
   <li data-start="1441" data-end="1558">
   <p data-start="1444" data-end="1558">Optionally, allowing users to write 
<strong data-start="1480" data-end="1509">custom SQL or expressions</strong> 
for aggregations of totals/subtotals per metric.</p>
   </li>
   </ol>
   <p data-start="1560" data-end="1595"><strong data-start="1560" 
data-end="1595">Example UI Configuration Table:</strong></p>
   <div class="_tableContainer_80l1q_1"><div tabindex="-1" 
class="_tableWrapper_80l1q_14 group flex w-fit flex-col-reverse">
   Metric Name | Row Subtotal | Column Subtotal | Total
   -- | -- | -- | --
   Total Disbursed Amt | SUM | SUM | SUM
   % Booked | AVERAGE | CUSTOM_SQL | AVG
   
   <div class="sticky end-(--thread-content-margin) h-0 self-end 
select-none"><div class="absolute end-0 flex items-end"><span class="" 
data-state="closed"><button aria-label="Copy Table" 
class="hover:bg-token-bg-tertiary text-token-text-secondary my-1 rounded-sm p-1 
transition-opacity group-[:not(:hover):not(:focus-within)]:pointer-events-none 
group-[:not(:hover):not(:focus-within)]:opacity-0"><svg width="20" height="20" 
viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg"; 
class="icon"><path d="M12.668 10.667C12.668 9.95614 12.668 9.46258 12.6367 
9.0791C12.6137 8.79732 12.5758 8.60761 12.5244 8.46387L12.4688 8.33399C12.3148 
8.03193 12.0803 7.77885 11.793 7.60254L11.666 7.53125C11.508 7.45087 11.2963 
7.39395 10.9209 7.36328C10.5374 7.33197 10.0439 7.33203 9.33301 
7.33203H6.5C5.78896 7.33203 5.29563 7.33195 4.91211 7.36328C4.63016 7.38632 
4.44065 7.42413 4.29688 7.47559L4.16699 7.53125C3.86488 7.68518 3.61186 7.9196 
3.43555 8.20703L3.36524 8.33399C3.28478 8.49198
  3.22795 8.70352 3.19727 9.0791C3.16595 9.46259 3.16504 9.95611 3.16504 
10.667V13.5C3.16504 14.211 3.16593 14.7044 3.19727 15.0879C3.22797 15.4636 
3.28473 15.675 3.36524 15.833L3.43555 15.959C3.61186 16.2466 3.86474 16.4807 
4.16699 16.6348L4.29688 16.6914C4.44063 16.7428 4.63025 16.7797 4.91211 
16.8027C5.29563 16.8341 5.78896 16.835 6.5 16.835H9.33301C10.0439 16.835 
10.5374 16.8341 10.9209 16.8027C11.2965 16.772 11.508 16.7152 11.666 
16.6348L11.793 16.5645C12.0804 16.3881 12.3148 16.1351 12.4688 15.833L12.5244 
15.7031C12.5759 15.5594 12.6137 15.3698 12.6367 15.0879C12.6681 14.7044 12.668 
14.211 12.668 13.5V10.667ZM13.998 12.665C14.4528 12.6634 14.8011 12.6602 
15.0879 12.6367C15.4635 12.606 15.675 12.5492 15.833 12.4688L15.959 
12.3975C16.2466 12.2211 16.4808 11.9682 16.6348 11.666L16.6914 11.5361C16.7428 
11.3924 16.7797 11.2026 16.8027 10.9209C16.8341 10.5374 16.835 10.0439 16.835 
9.33301V6.5C16.835 5.78896 16.8341 5.29563 16.8027 4.91211C16.7797 4.63025 
16.7428 4.44063 16.6914 4.296
 88L16.6348 4.16699C16.4807 3.86474 16.2466 3.61186 15.959 3.43555L15.833 
3.36524C15.675 3.28473 15.4636 3.22797 15.0879 3.19727C14.7044 3.16593 14.211 
3.16504 13.5 3.16504H10.667C9.9561 3.16504 9.46259 3.16595 9.0791 
3.19727C8.79739 3.22028 8.6076 3.2572 8.46387 3.30859L8.33399 3.36524C8.03176 
3.51923 7.77886 3.75343 7.60254 4.04102L7.53125 4.16699C7.4508 4.32498 7.39397 
4.53655 7.36328 4.91211C7.33985 5.19893 7.33562 5.54719 7.33399 
6.00195H9.33301C10.022 6.00195 10.5791 6.00131 11.0293 6.03809C11.4873 6.07551 
11.8937 6.15471 12.2705 6.34668L12.4883 6.46875C12.984 6.7728 13.3878 7.20854 
13.6533 7.72949L13.7197 7.87207C13.8642 8.20859 13.9292 8.56974 13.9619 
8.9707C13.9987 9.42092 13.998 9.97799 13.998 10.667V12.665ZM18.165 
9.33301C18.165 10.022 18.1657 10.5791 18.1289 11.0293C18.0961 11.4302 18.0311 
11.7914 17.8867 12.1279L17.8203 12.2705C17.5549 12.7914 17.1509 13.2272 16.6553 
13.5313L16.4365 13.6533C16.0599 13.8452 15.6541 13.9245 15.1963 13.9619C14.8593 
13.9895 14.4624 13.9935 1
 3.9951 13.9951C13.9935 14.4624 13.9895 14.8593 13.9619 15.1963C13.9292 15.597 
13.864 15.9576 13.7197 16.2939L13.6533 16.4365C13.3878 16.9576 12.9841 17.3941 
12.4883 17.6982L12.2705 17.8203C11.8937 18.0123 11.4873 18.0915 11.0293 
18.1289C10.5791 18.1657 10.022 18.165 9.33301 18.165H6.5C5.81091 18.165 5.25395 
18.1657 4.80371 18.1289C4.40306 18.0962 4.04235 18.031 3.70606 17.8867L3.56348 
17.8203C3.04244 17.5548 2.60585 17.151 2.30176 16.6553L2.17969 16.4365C1.98788 
16.0599 1.90851 15.6541 1.87109 15.1963C1.83431 14.746 1.83496 14.1891 1.83496 
13.5V10.667C1.83496 9.978 1.83432 9.42091 1.87109 8.9707C1.90851 8.5127 1.98772 
8.10625 2.17969 7.72949L2.30176 7.51172C2.60586 7.0159 3.04236 6.6122 3.56348 
6.34668L3.70606 6.28027C4.04237 6.136 4.40303 6.07083 4.80371 6.03809C5.14051 
6.01057 5.53708 6.00551 6.00391 6.00391C6.00551 5.53708 6.01057 5.14051 6.03809 
4.80371C6.0755 4.34588 6.15483 3.94012 6.34668 3.56348L6.46875 3.34473C6.77282 
2.84912 7.20856 2.44514 7.72949 2.17969L7.87207 2.11328C
 8.20855 1.96886 8.56979 1.90385 8.9707 1.87109C9.42091 1.83432 9.978 1.83496 
10.667 1.83496H13.5C14.1891 1.83496 14.746 1.83431 15.1963 1.87109C15.6541 
1.90851 16.0599 1.98788 16.4365 2.17969L16.6553 2.30176C17.151 2.60585 17.5548 
3.04244 17.8203 3.56348L17.8867 3.70606C18.031 4.04235 18.0962 4.40306 18.1289 
4.80371C18.1657 5.25395 18.165 5.81091 18.165 
6.5V9.33301Z"></path></svg></button></span></div></div></div></div>
   <p data-start="1869" data-end="1980">This would allow power users to better 
control how summaries are presented for different KPIs in a single view.</p>
   <h3 data-start="1982" data-end="2018">New or Changed Public Interfaces</h3>
   <ul data-start="2020" data-end="2486">
   <li data-start="2020" data-end="2141">
   <p data-start="2022" data-end="2141">Changes in Explore UI to configure 
aggregation per metric (backend support via metadata or control panel 
enhancements).</p>
   </li>
   <li data-start="2142" data-end="2212">
   <p data-start="2144" data-end="2212">Updates in the pivot table chart plugin 
to support this flexibility.</p>
   </li>
   <li data-start="2213" data-end="2368">
   <p data-start="2215" data-end="2368">Changes to backend logic (<code 
data-start="2241" data-end="2249">viz.py</code>, <code data-start="2251" 
data-end="2260">data.py</code>, or applicable endpoint handlers) to apply 
selected aggregations per field for subtotal/total calculations.</p>
   </li>
   <li data-start="2369" data-end="2486">
   <p data-start="2371" data-end="2486">Potential update to how <code 
data-start="2395" data-end="2409">query_object</code> or <code 
data-start="2413" data-end="2430">post_processing</code> is constructed to 
allow passing per-metric aggregation.</p>
   </li>
   </ul>
   <h3 data-start="2488" data-end="2508">New Dependencies</h3>
   <p data-start="2510" data-end="2714">No new dependencies are anticipated at 
this point. If a more advanced expression evaluation engine is required, the 
use of a library like <code data-start="2648" data-end="2657">NumExpr</code> or 
enhancement of existing Pandas logic may be explored.</p>
   <h3 data-start="2716" data-end="2752">Migration Plan and Compatibility</h3>
   <ul data-start="2754" data-end="3055">
   <li data-start="2754" data-end="2896">
   <p data-start="2756" data-end="2896">Backward-compatible by default: if no 
custom aggregations are defined per metric, the current behavior (uniform 
aggregation) remains intact.</p>
   </li>
   <li data-start="2897" data-end="2963">
   <p data-start="2899" data-end="2963">Optional migration for dashboards 
wanting the new functionality.</p>
   </li>
   <li data-start="2964" data-end="3055">
   <p data-start="2966" data-end="3055">Minor metadata schema change might be 
needed to store aggregation preferences per metric.</p>
   </li>
   </ul>
   <h3 data-start="3057" data-end="3082">Rejected Alternatives</h3>
   <ul data-start="3084" data-end="3334">
   <li data-start="3084" data-end="3185">
   <p data-start="3086" data-end="3185"><strong data-start="3086" 
data-end="3143">Hardcoding aggregation behavior for specific metrics:</strong> 
Too inflexible and not user-configurable.</p>
   </li>
   <li data-start="3186" data-end="3334">
   <p data-start="3188" data-end="3334"><strong data-start="3188" 
data-end="3229">Allowing only one function at a time:</strong> Maintains the 
current limitation and doesn't meet the requirement for differentiated metric 
aggregation.</p></li></ul><!--EndFragment-->
   </body>
   </html>


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscr...@superset.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@superset.apache.org
For additional commands, e-mail: notifications-h...@superset.apache.org

Reply via email to