Formula in Netsuite Saved Search - search

I have a problem here. In Column 1 I have count of All he transaction, In column 2 I have Count of transaction of specific status. In column 3 I want the percentage of above 2; like count of specific transaction/Count of total. Is it possible in Netsuite?

Actually there is an interesting feature that makes this possible. Formula fields that have aggregate functions work when the row has an aggregate on it. So for instance if you wanted to see a percentage of orders with status Billed on a Sales Order search you would enter a Formula (Percent) result with a formula like:
sum(case when {status} = 'Billed' then 1 else 0 end) / count({tranid})
and apply an aggregate to that column. The sample uses Maximum but Minimum and Average produce the same result.

I think that isn't possible by just saved search.
You will have to group on search result column status, so, all the count total will be based on statuses and you can't write aggregation based on other search results' columns.
you can further write a suitelet/portlet script to use the saved search result and calculate the stats before presenting on UI.

Related

NetSuite Saved Search That Counts Invoices In An Amount Range

I'm trying to create a saved search that groups invoices by amount in buckets of $1,000. Then I would like to count the number of invoices in that range.
What I have tried is creating a grouped text formula with the formula TO_CHAR(ROUND({amount}, -4)) and then another column that is the internal id with the Count summary type. This would work but NetSuite says the formula text column cannot be grouped, presumably because it uses the amount field in the formula.
Does anyone know of an alternate way that I can accomplish this?
If I understand well your needs,
The current formula, group all the transaction from 0 to 4999 together, ...
I have updated it to group all the transaction from 0 to 999, then 1000 to 1999 and so on:
a text formula with the following:
(count/* comment */(ROUND(TRUNC({amount},-3),-3)) OVER(PARTITION BY (ROUND(TRUNC({amount},-3),-3)) ORDER BY (ROUND(TRUNC({amount},-3),-3)))

DAX Rank by Date

I am Counting on Distinct ID's in a column - this is leading to the sum of the subtotals not equalling the grand total as follows:
What I want to do is rank the Payment Dates in cronological order and select ONLY the highest date to display. In the example above the Grand Total won't change, but the Townville row will not show a Distinct Student Count.
This is a very specific requirement and I'm assuming there's an easy way to do it in DAX - I've tried playing around with both RANKX and MAX but am no closer to solving this.
One last thing - the Rank must be contextual to the Time Filter selected by the user (so if they select 2015 it'd give the second record Rank 1 and the top record wouldn't show. If they select May 2015 it'd give the top record Rank 1 and the second record wouldn't show)
I think this is what you are looking for - I added a calculated column to the PowerPivot model that provides a rank based on the Last Payment Date and the Name of the Student. It will rank the earliest payment for any student as a 1.
The code for the column is as follows:
=RANKX(FILTER(Table1, [Student Name] = EARLIER([Student Name])), [Last Payment Date])
... assuming your table is named "Table1"!
The FILTER is the key that limits the ranking to dates belonging to students with that name only.
Update for Multiple tables
To set up relationships between the tables, go to the "Diagram View" of the model, available in the Home tab of the Power Pivot window.
You can drag fields from one table to the other to create relationships. This will only work if at least one of the fields is unique - it's a good idea to think of the model as a dimensional model, with a tables that acts like a fact and other tables around it that act like dimensions.
From the comment, I would try to get the Payments to act like the fact, and have it link to the Community and Student tables. in this case, you could then have the following code:
=RANKX(FILTER(Table1, Related('Students'[Student Name]) = EARLIER('Students'[Student Name])), [Last Payment Date])
This calculated column would be on your Payments Fact table, and it uses a lookup to a related field.
Note that in this specific case, it would be easier to just run the filter over your Student ID field that is used to lookup the Student name.

Rank within subsets of data in spotfire

I am trying to rank subsets of my data in spotfire.
Lets say I have a data table that has the following 6 columns:
Individual, City, Zip Code, State, Amount1,and Amount2.
There are thousands of Unique Individuals in each Zip Code and many Zip Codes within each State. How would I display only the data from the top 5 Zip Codes within each State (as defined by the SUM()of Amount1)?
To summarize the order of operations; I want to sum up Amount1 for each Zip Code, then Rank the Zip Codes in desc order within each State (just an intermediate step for explanatory purposes) and finally, only display the top 5 Zip Codes within each State.
All I could think of was to create a calculated column that would return the Zip Code if it satisfied my conditions and NULL if it did not. I don't think its the best but here is the code I started with:
case WHEN DenseRank(Sum(Sum([Amount1]) over [ZipCode]) over [State],"desc")<6 then [ZipCode] ELSE NULL END
Any help would be great. Thanks!
Thanks for the clarification in the comments.
DenseRank(Sum([A1]) OVER ([ZipCode]),"desc",[State]) as [Rank]
The above function will give rank your [ZipCode] within its respective [State] based on the SUM() of an amount in column [A1]. DenseRank() will NOT skip a ranking number if there is a tie. The means you could have more than 5 [ZipCode] in your top 5. Use Rank() if you want to avoid this.
Then, you can create a calculated column for your filter panel, or just filter it in the "Limit Data using Custom Expressions" section of your chart.
If([Rank] < 6,"Top 5", "Other") as [Zip Rank in State]

Get the average monthly value from 2 SP List columns and display in new column

I need to calculate the average value for each month. Currently I have 2 columns "DATE" (date value e.g 01/01/2010) and AccOpen (number value). So for all dates within January I need to return the average value of all numbers contained in the corresponding AccOpen rows for January dates.
Is it possible to use the CALCULATED option and input a FORMULA that will return the average for all itmes within each months period (when adding a column to the list ?
DATE ACCOPEN AVERAGE
01/01/2010 2 2
02/01/2010 2
03/01/2010 2
04/01/2010 2
01/02/2010 2 2
02/02/2010 2
03/02/2010 2
04/02/2010 2
You're not going to be able to do this OOTB without writing event receiver code (or other custom code running in a batch mode).
To get you started
MSDN - How to: Create an Event Handler Feature
Event Handlers : Everything you need to know...
This will need to hook into the list item update and then consolidate your list into a separate summary list with the calculations you need.
The brute force approach would be to run the calculation afresh for every item in the group when an item is inserted/updated.
A smarter approach would be to just update the delta (the difference between the old and the new record) which is easier to do if you store components of the calculation - so in your case
Month - NumRecords - TotalValue
and work out the Average on the fly (as its easy to delta the NumRecords/TotalValue but impossible to apply it directly to the average)
One 3rd party web part which may fit your need is PivotPoint - it allows you to do things like sum/count/avg over groups like Month & Year (disclaimer - I work for the company)
It is not possible to query anything other than the current item when creating a formula field.
The only way to do this is to create custom code either within an event handler for the list or external code that processes items in the list and updates a "average" field when required.
Create a calculated field to give you the year and month, for example: 2011-07. Then modify your list view to group on the calculated field. When editing your view, there is also an option to display totals, I believe you can set this to average for your AccOpen column. If you're not interested in the details, you can choose to collapse all groups by default.

Report on users who don't estimate well in Excel

I have a spreadsheet corresponding to entries of a user, their estimation, and the actual value (for example: hours for a particular project - again, this is only an example), which we can represent in CSV like:
User,Estimate,Actual
"User 1",5,5
"User 1",7,7
"User 2",3,3
"User 2",9,8
"User 3",6,7
"User 3",8,7
I'm trying to build a report on these users, to quickly see which users underestimate or overestimate, and so I created a pivot table. But, I can't figure out how to simply show if a user has underestimated at some point. I tried to create a calculated field like =IF(Estimate > Actual, 1, 0), but this sums, then compares the Estimate and Actual columns and tells me that "User 3" doesn't over/underestimate.
Without adding an additional field to my data, how can I accomplish this?
A similar SQL pseudo-query would be:
SELECT DISTINCT al.User,
(SELECT COUNT(*) FROM ActivityLog AS l2 WHERE l2.User = al.User AND l2.Estimate > l2.Actual) AS Overestimates
FROM ActivityLog AS al
Edit:
I'm still working on this, and currently have created a static list of users in some cells on the side, and have given them the Array Formulas: {=SUM(IF((A$2:A20 = F6)*(B$2:B20 > C$2:C20), 1, 0))} and {=SUM(IF((A$2:A20 = F6)*(B$2:B20 < C$2:C20), 1, 0))} (if I have the user's name in F6).
Mainly, I want to do this where the list of users can populate dynamically from the main data.
Calculated fields in pivot tables stink. I would get rid of the pivot table and do it with formulas. Start a unique list of users in H15 and enter this in I15
{=MAX(($A$2:$A$7=H16)*($B$2:$B$7-$C$2:$C$7<>0))}
array entered. This will return 1 if they ever over or under estimated and zero if they never did. The downside is that you can't "refresh" it like a pivot table so you have to make sure your unique user list is accurate all the time.
If that's too big of a downside, I think you'll need to add a column to your source data. Specifically
=ABS(B2-C2)
And add that to your pivot table. It will show zero for never over/under and non-zero otherwise.
You are aware that you should make sure the estimates are all in the same range? Smaller numbers can be estimated better (when talking about hours).
Add a column for actual-estimate
then summarize those values for min max and average. (or stddev)

Resources