Tracking Point Progression in Ranking Formulas





Hello there,

Our community uses a points-based ranking structure where specific community activities (i.e. posting a discussion) are awarded points, and users need to hit a threshold of points in order to progress a level (i.e. 2400 points = Level 5).

I was wondering if there was any reporting available to track average or individual users' point/level progression over time. I wasn't able to find any metrics for this in Community Analytics or Admin Console Community Metrics.

Is tracking point progression possible out of box, and if not, how do I build custom reporting to track this at scale? Thank you!





 
 Solved!
 
 [Go to Solution.](/t5/Khoros-Communities-Product/Tracking-Point-Progression-in-Ranking-Formulas/m-p/589869#M9875)
[@jonchen](/t5/user/viewprofilepage/user-id/85086) Correct, I don't believe there is any out of box methods to display something like that.  Would require levering the API to build something to expose the results on something like a leaderboard.

Tracking it would only be possible outside of Khoros manually as well - Nothing in reporting could provide the results as the formula is doing the calculations - You could pull the data out of Khoros and then manually calculate it in Excel or something like that (I've seen a few Communities doing some manual things like this to track/gamify).
There could be a variety of leaderboards. Like one of top points overall, and another for the most points gained in the previous 4 weeks or something. I may never top to overall leaderboard, but I have a chance of getting on a monthly leaderboard. [@thesocialgrowth](/u/thesocialgrowth) you need to enter the “update item & tags” section, write a “message to the reviewer” and then “save changes” to request a new review.

updating details does not trigger a new review, as detail updates do not require approval. hey, so after some minor improvements i finally found the time to make this into a doc that everyone can use, adopt and copy. let me know what you think and if you have any improvements.

[image]

[life dashboard - the all in one tracker](https://coda.io/@heuschkelsimon/life-dashboard-all-in-one-tracker)

track your personal habits, finances, tasks and time … * to know if your content is effective, you need to measure different metrics. content is continually pushed to be cutting-edge, relevant and timely. the problem with this is that content groups often don’t have the time or structure to slow down and make sure their content strategy aligns with the rest of the organization. Thank you for the thoughtful feedback!  Definitely something we can look into. Please use the Adobe Dimension Feedback site ( <https://feedback.adobedimension.com/>  ) to share ideas.  The Adobe forums are great for discussion but usually very difficult to sort and find ideas so we are using a different platform for idea tracking and status updates. 4th attempt! Now handles GroupItems. Feel free to ignore attempt 3, I've left it just for learning purposes. There are two ways you may want to handle groups: 1) calculate area for each individual item inside the group, or 2) calculate the aggregate area of all the grouped items. If you want option 2) just comment out the itemsInsideGroupItems line.

 

Just for fun I also changed the way the parameters work for specifying the target area value and unit. I put them in a string. Example values are: '4 square inches', '4in','4 sq inch' will give same result. Other examples are:'100mm', '800 pt'. If the parameter is a number, not a string, it will be interpreted as points.

 

 


```
// start with the selected items
var items = app.activeDocument.selection;

// comment out the following line if you want each groups' area to be calculated, rather than the items inside each group individually
items = itemsInsideGroupItems(items);

// this is where you specify your target size ()
scaleItemsToArea(items, '4 square inches');

function scaleItemsToArea(items, targetString) {
    // very simple parsing of targetString
    targetString = String (targetString);
    var targetAreaInSquareUnits = Number(targetString.match(/\d+/)[0]);
    var unitType;
    // note: only looks for 'in' or 'mm'
    if (targetString.search(/(in|\")/) > -1) {
        unitType = 'in';
    } else if (targetString.search(/mm/) > -1) {
        unitType = 'mm';
    } else {
        unitType = 'pt'
    }
    // scale each item
    for (var i = 0; i < items.length; i++) {
        scaleToArea(items[i], targetAreaInSquareUnits, unitType);
    }
}
function scaleToArea(item, targetAreaInSquareUnits, unitType) {
    var itemAreaInSquareUnits = areaOfItem(item, unitType);
    var scaleFactor = (Math.sqrt(targetAreaInSquareUnits / itemAreaInSquareUnits)) * 100;
    if (scaleFactor != NaN) {
        item.resize(scaleFactor, scaleFactor);
    }
}
function areaOfItem(item, unitType) {
    var itemAreaInSquareUnits;
    var itemAreaInSquarePoints = areaOfItemInSquarePoints(item);
    if (unitType == 'in') {
        var ptsIn1inch = 72;
        itemAreaInSquareUnits = itemAreaInSquarePoints / (ptsIn1inch * ptsIn1inch);
    } else if (unitType == 'mm') {
        var ptsIn1mm = 2.834645669;
        itemAreaInSquareUnits = itemAreaInSquarePoints / (ptsIn1mm * ptsIn1mm);
    } else {
        // no unitType specified, use points
        itemAreaInSquareUnits = itemAreaInSquarePoints;
    }
    return itemAreaInSquareUnits;
}
function areaOfItemInSquarePoints(item) {
    var area = 0;
    if (item.typename == 'PathItem') {
        area = item.area;
    } else if (item.typename == 'CompoundPathItem') {
        for (var j = 0; j < item.pathItems.length; j++) {
            area += item.pathItems[j].area;
            // $.writeln('item.pathItems[j].area = ' + item.pathItems[j].area + '     area = ' + area);
        }
    } else if (item.typename == 'GroupItem') {
        for (var j = 0; j < item.pageItems.length; j++) {
            area += areaOfItemInSquarePoints(item.pageItems[j]);
            // $.writeln('item.pathItems[j].area = ' + item.pathItems[j].area + '     area = ' + area);
        }
    } else {
        // for other types of items, resort to width x height
        area = item.width * item.height;
    }
    return Math.abs(Math.round(area * 10000) / 10000);
}
function itemsInsideGroupItems(items) {
    // returns an array containing items, including items found inside GroupItems
    try {
        var found = [];
        for (var i = 0; i < items.length; i++) {
            var item = items[i];
            if (item.typename == 'GroupItem') {
                found = found.concat(itemsInsideGroupItems(item.pageItems));
            } else {
                found.push(item);
            }
        }
        return found;
    } catch (e) {
        return found;
    }
}
```
 

 

As usual, not much testing done, so please let me know if it works as you'd expect. - Mark I'm currently writing a Markdown powered CMS, which adheres to [Commonmark](http://commonmark.org). Their [help page](http://commonmark.org/help/) is quick, easy and to-the-point. Please see: [How do I schedule a task to update indexes?](https://qa.mythicsoft.com/14733/how-do-i-schedule-a-task-to-update-indexes?show=14733#q14733) hi ..ben, - - thank you for the note. you are more than correct. - you will see them the right way soon. - - all the best, - miro miroslavov - the telerik team - - - do you want to have your say when we set our development plans? - do you want to know when a feature you care about is added or when a bug fixed? - explore the - telerik public issue tracking - system and vote to affect the priority of the items - - there are websites that give you technical analysis indicators (including golden crosses and death crosses) such as

https://www.stockmonitor.com/stock-screener/death-cross-50ma-cross-down-200ma/

or you can simply graph the moving averages yourself.

i am not a big fan of technical analysis indicators so i have never used them.