Crystal Reports cross-tab suppress row formula - crystal-reports-xi

I have a cross-tab that is presenting information as follows:
+----------+-------+
| UserName | Total |
+----------+-------+
| User1 | $5 |
| User2 | $10 |
| User3 | $50 |
| User4 | $15 |
| User5 | $20 |
| User6 | $0 |
+----------+-------+
I cannot figure out how to suppress rows based on a formula. I want to limit records to User1, User2, and User3 - I have tried the following suppression formula:
IF {Command.UserName} IN ['User1', 'User2', 'User3'] THEN FALSE
Unfortunately this has not worked. I am at a loss here.

If you have tried to use the suppression formula in Format Field options menu you will probably will not achieve the desired goal because it does not work as a filter in your rows. You should apply your filter on the UserName field before you use it in your cross-tab. You can use the Record Selection Formula for this and put your condition in there e.g.
IF {Command.UserName} IN ['User1', 'User2', 'User3']
(I am not sure if IN operator will work exactly as you want it but in any case you can figure out your condition)

Related

INDIRECT ADDRESS with QUERY to select offset result

I have a stylized table, not laid out like a database. Some rows contain titles, some rows contain data across various columns.
I would like a formula that will search Column A for all instances of "Title", then offset the results by a chosen number of rows and columns.
The data would look something like:
| Title: | title1 | | |
| Data | Value | Data2 | Value2|
| | | | |
| Title: | titel2 | | |
| Data | Value | Data2 | Value2|
I'm trying to find all instances of "Title:" and return "Value2", specifically by using INDIRECT(ADDRESS(ROW()+1,COLUMN()+3)) function in conjunction with QUERY.
I'd be happy with an alternative formula to INDIRECT ADDRESS, so long as I can select the number of rows and columns to offset.
Thanks.

Count unique cells and display them in column

I am building a list of gigs I attended and I want to count how many times I've seen each band.
I know about UNIQUE, but because I keep each band in separate column it just copies each row.
Given the table (or screenshot of real data):
| Date | Venue | Bands |
|----------|--------|--------|--------|--------|--------|--------|
| 02.02.17 | Venue1 | Band A | Band B | Band C | Band D | Band E |
| 02.07.17 | Venue3 | Band D | Band C | | | |
The output I want:
| Band | Attended |
| | (times) |
|--------|----------|
| Band A | 1 |
| Band B | 1 |
| Band C | 2 |
| Band D | 2 |
| Band E | 1 |
I can change structure if needed.
What happens after using UNIQUE: https://i.stack.imgur.com/qmszk.png
Thanks in advance.
Step 1. Get list of all unique bands in one column, one per row
=ArrayFormula(UNIQUE(TRANSPOSE(SPLIT(CONCATENATE(Gigs!D2:Z&CHAR(9)); CHAR(9)))))
Step 2. Place this formula in next column, and drag it down
=SUM(COUNTIF(Gigs!D:Z; E2))
Transform your data to a simple table format in order to make easier to do data-analysis.
A simple table use the first row for column headers a.k.a. fields and has one and only one column for each entity, let say only one column for band names.
The above could be done in a single but complex formula hard to debug, so it's better to start by doing this using simple formulas and once you are certain that all is working fine, think about making a complex formula or writing and script.
Related
Unpivot Matrix to Tabular. Using counts of two variables into individual rows
Generate a list of all unique values of a multi-column range and give the values a rating according to how many times they appear in the last X cols
Normalize (reformat) cross-tab data for Tableau without using Excel
How do you create a "reverse pivot" in Google Sheets?

Structuring a query between multiple tabs to join values by name

I'm trying to write a SQL query in Google Sheets to try and get data for "matching" results from two different tabs, but running into some trouble.
This is a sheet that's basically an automated scoring engine for instructors who take a two-part test (written and practical). After the results are entered, I'd like to use some SQL to take the results from the two tabs and collate them into a final score.
Link to the sheet in question.
There's a "Practical Scores" tab (which takes all the data from the associated Google Form), and a "Written Scores" tab. I'd like to get the name of the instructors who match in both those tabs, and give the associated score for them, but I'm mostly having trouble with writing the correct SQL.
Most of what I'm trying to do is working fine. I'm able to pull the final practical scores via the following SQL:
=query(PracticalScores!A2:E, "select A, count(E),SUM(E)/3 group by A")
I can also pull the written scores as follows:
=query('Written Scores'!B2:C,"select B,C")
But I want the intersection of the two as well, and that's where I'm running into problems.
=query(A8:E, "select A,C,D where A = E")
will simply return the rows where the names match up, and I want the instances where the names match up, regardless of whether the rows do.
That is, I want all the rows where the names match from tab 1 to tab 2 and not just the few rows that happen to line up perfectly.
If I'm not explaining this well, please let me know and I can provide additional information. Any assistance would be very greatly appreciated!
Since the query function does not support joins, this can't all be done in one query. Instead, the following device can be used:
=arrayformula(vlookup(name column, table, # of column to extract, False))
For example, suppose I have a table
+---+-------+---+
| | A | B |
+---+-------+---+
| 2 | Jim | 3 |
| 3 | Sarah | 4 |
| 4 | Bob | 5 |
+---+-------+---+
to which I want to add another column, taking it from
+---+-------+---+
| | E | F |
+---+-------+---+
| 2 | Sarah | 9 |
| 3 | Bob | 8 |
| 4 | Jim | 7 |
+---+-------+---+
The basic idea is to put in cell C2 the formula
=arrayformula(vlookup(A2:A, E2:F, 2, false))
which will look up every name from first table (column A) in the column E, and return the matching value in column F. Result:
+---+-------+---+---+
| | A | B | C |
+---+-------+---+---+
| 2 | Jim | 3 | 7 |
| 3 | Sarah | 4 | 9 |
| 4 | Bob | 5 | 8 |
+---+-------+---+---+
In practice, one should filter out empty lookup values to improve performance:
=arrayformula(vlookup(filter(A2:A, len(A2:A)), E2:F, 2, false))
If the second table contains some names not present in the first, they will not be returned by the above formula. In this case it is better to prepare a full list of names, for example with
=sort(unique({Sheet1!A2:A; Sheet2!A2:A}))
which collects the names from A columns of two sheets, eliminating duplicates and sorting. Then look up those using vlookup as above.

google sheet count unique values multiple criteria

I have this google sheet with many formulas. The purpose of this sheet to record all Walkins for an institute on daily basis with their relevant status that are FU, DFU or Sales. Example format:
Row no: Col 1 | Col 2 | Col 3 | Col 4 | Col 5
1:Date | Name | Phone | Status | Remarks
2:01/06/15 | Client1 | 1001 | FU | will come again
3:01/06/15 | Client2 | 2002 | DFU | Not joining
4:02/06/15 | Client3 | 3003 | Sales | Enrolled
5:03/06/15 | Client1 | 1001 | Sales | repeat walkin, enrolled today
As soon as Client1 Status set to "Sales", any duplicate entry [which actually checks on Col 3 (Phone)] changes to "Status - Sales" automatically. So Row 2 now becomes:
2:01/06/15 | Client1 | 1001 | Sales | will come again, enrolled 03/06/15
There is another formula calculating the total Sales [=COUNTIF(D:D,"=Sales")] however it is also calculating the duplicate entries. As in above example the total number of Sales should be 1, but it is resulting 2. I tried all possible functions (or atleast upto what I am aware of) but just not getting there.
Any advice without the use of scripts/ macros.
There are some standard formulae for counting distinct values here
If you can use the phone number to identify different clients and it's a genuine number without any other characters, the formula for adding a condition (only count rows containing "Sales" in column D) isn't too complicated:-
=arrayformula(SUM(IF(FREQUENCY(IF(D2:D5=ʺSalesʺ,C2:C5),IF(D2:D5=ʺSalesʺ,C2:C5))>0,1)))
But if you need to use the name it is more complicated - there are some examples here

how can i work out the percentage of rows with matching values in 2 different columns?

I'm trying to find out the percentage of my users which return to my site by comparing their 'Joined' date and their 'Last Seen' date.
In more literal terms, I have a table which looks a bit like this:
| username | Joined |Last Seen |
|----------|:-------------:|---------:|
| user1 | 3434626 | 4134526 |
| user2 | 3434668 | 3434668 |
| user3 | 3434646 | 4134579 |
And I want to find the percentage of users who have a different Join date to Last seen date.
Once you are using a spreadsheet, it's quite simple. I know this is primitive, but it may be a simple way to achieve your desired result.
Subtract Joined from Last Seen [=C2-B2] to receive either 0 where
they are the same, or a positive value if not.
Count the amount of cells with a value greater than 0
[=COUNTIF(D2:D4,">0")]
Divide by a count of all the
cells in the row [=COUNT(D2:D4)]
Final cell formula: [=COUNTIF(D2:D4,">0")/COUNT(D2:D4)]
Format this cell as a percentage.
google doc of this method here - https://docs.google.com/spreadsheets/d/1eYG0GGGDkAe-Dzzmpp4sBIPmlqf5VkYdhwVh54myY38/edit?usp=sharing
It can be done in R with following code:
> ddf
username Joined LastSeen
1 user1 3434626 4134526
2 user2 3434668 3434668
3 user3 3434646 4134579
> ddf$returned = with(ddf, ifelse(LastSeen != Joined, 1, 0))
> ddf
username Joined LastSeen returned
1 user1 3434626 4134526 1
2 user2 3434668 3434668 0
3 user3 3434646 4134579 1
> 100* nrow(ddf[ddf$returned>0,])/nrow(ddf)
[1] 66.66667

Resources