how to separate weekday/weekend calculation in tableau? - tableau-api

i know someone has probably asked this but i can't seem to find an answer that works for me.
i have an excel sheet that contains the sales and dates of a company.
i want to calculate the average of the sales made during weekday/weekend receptively, and use that average to calculate any outliers such as a sudden drop increase/decrease in sales.
i have created a calculation to identify between weekday/weekend
IF
DATENAME('weekday', [Date]) = "Saturday"
OR DATENAME('weekday', [Date]) = "Sunday"
THEN "Weekend"
Day Calculation
i have also created a calculation that calculates the average
INT(SUM(
IF [Day] = 'Weekday'
THEN [Number of Records]/22
ELSE
[Number of Records]/8
END ))
Average Calculation
this is my calculation to calculate outliers 20% higher/below the average
[Number of Records] * 1.2 > [Average]
OR
[Number of Records] * 0.8 < [Average]
Outlier Calculation
but it doesn't seem to be working when i put the outlier calculation into "color". the bar chart remains the same
Bar Chart
how do i go about resolving this? is my calculations wrong?

In your graph, the average is calculated at the level of date, for that reason is not working (is always true). To fix this, you have to use Level of Details expressions.
Also, considering you want to calculate the average of the sales made during weekday/weekend, your calculations should use the measure Sales instead Number of Records.
The average calculation would look like this:
{FIXED [Day]: AVG([Sales])}
And the outlier calculation:
[Sales] > 1.2 * [Average] OR [Sales] < 0.8 * [Average]

Related

How to aggregate table calculation in tableau

this is my workbook
on that workbook, i calculate timediff between each transaction for each users. what i build first is the filters PUL with this calculate
{Fixed [User Id]: sum(
if [Created At]<=[END_DATE] then 1 else 0 end)}>=2
AND
{FIXED [User Id]: sum(
IF [Created At]<=[END_DATE] AND
[Created At] >= [START_DATE] THEN 1 ELSE 0 END)}>=1
this formula is to find out the users who match with conditions (do transaction at least 2 before end_date parameter, and atleast doing 1 transaction in between start_date parameter and end_date parameter) after that i add to context this filters to find out the users first.
and i made filters date_range with this calculate
lookup(min(([Created At])),0) >= [START_DATE] and
lookup(min(([Created At])),0) <= [END_DATE]
so it will visualize only transaction on range (start_date as first range, and end_date as last range) and also visualize last date transaction before first range (if any).
after that i make calculate called datediff
DATEDIFF('day',LOOKUP(MIN([Created At]),-1), MIN([Created At])) and put that on label so it will calculate the day different. and also i put the date in the detail and put the date also in rows and make it ATTR.
my question is, how to find out max, min, median, and average value from this calculate
i tried with calculated max
MAX({FIXED [User Id]:DATEDIFF('day',INT(LOOKUP(MIN([Created At]),-1)), INT(MIN([Created At])))})
but it return error datediff being called with string,integer,integer
For Max and Min you can proceed like I presented you a solution on your previous question. (For max create a rank calculation and sort is descending, For Min you create a second rank calculation ordered ascending).
However, as far as my knowledge of table calculations in tableau goes, Tableau doesn't allow to hard-code these table calculated fields and therefore you cannot-
further aggregate these results
perform LOD calculations on these.
For calculation of these like average and median, It is advised that you may please create a hard-coded column/field which give you the time-difference on any order with that customer's previous order. This you can do it in any programming language of your choice like R or python (or other).
Moreover, Tableau integration with R/python is through script-real type functions which are again of table calculation category and above restrictions will apply.
Good Luck.
EDIT as Alex Blakemore has suggested on a different question/answer, you can use window functions with a slight tweak. Let's assume your calculated field name for datediff is [CF], then create four calculated fields with the following calculations.
window_max([CF])
window_min([CF])
window_avg([CF])
window_median([CF])
and name them [CF max], [CF Min], [CF avg], [CF Median] respectively.
Now edit table calculation with nesting in each four these, as follows-
click nested calculations down arrow. CF will be listed there. change its calculation to specific dimensions, at level deepest and restarting at evrey user id. the screenshot is
thereafter click nested calculations down arrow again. select CF_max/min/med/avg (as the case may be) and create table calculations with table down.
You'll get a view like this as desired.

LoD for subtraction

Hello I have a question about using LOD For subtraction in tableau.
I have a table with different dimensions such as customer name, sales group, distribution center and measures that I need to work with is subtracting products that was SHIPPED from FORECAST using LOD TO Compute this and get a percentage difference between the two measures using those dimensions.
Can you help?
Let's say you have a measure called Amount. You can get the Total Amount by Customer Name:
{ FIXED [Customer Name] : SUM[Amount] }
And let's say you have another measure called ForecastAmount. You can get that total by Customer Name:
{ FIXED [Customer Name] : SUM[ForecastAmount] }
So if you create two calculations using those formulas, you'll have the basis for your percentage difference. The formula for percentage difference is:
ABS([LOD Amount] - [LOD ForecastAmount]) / (([LOD Amount] + [LOD ForecastAmount])/2)
(and then format that result as a percent, or multiply it by 100).
You can apply the same logic to your other dimensions.

Compute average (with condition) in Tableau

Wanted Result: Average of the turnover value on days that are between the start and end reference period.
Using Tableau Desktop
Lod expression
The first step is i return the turnover value on days that are between the start and end reference period, and return null otherwise.
Daily Turnover in reference period
IF [Date]>= [Start reference date]
and [Date]<= [End reference date]
THEN [Amount] END
Second Step is to calculate the average across this range of values for each product.
Average Turnover in reference period
{FIXED [Product]: AVG(Daily Turnover in reference period)}
Here a screen shot
The average must be 2331 and not 24.
Really i need HELP.
Thanks.
There are multiple possible approaches, here is one.
Define an LOD calc as Daily_Amount_Per_Product
{ FIXED Product, Date : SUM([Amount]) }
Put Date on the filter shelf and select the range of dates you want to analyze. Put Product on the Rows shelf and put Daily_Amount_Per_Product on the Columns shelf.
At this point you are almost, but not quite done. Since your LOD calc as at a deeper level of detail (has more dimensions in play) than your view, Tableau will perform aggregation to get a result at the same level as your view - which is why you see the word SUM before your field on the Columns shelf. If you want to see the average instead of the sum, change SUM to AVG and you should have your result.

Execute IF-THEN_ELSE before Execute Calculation - Tableau

I have a graph below.
I would like to calculate lapsed rate which is sum of lapsed value divided by sum of inforce value. I use the formula below in calculated field.
abs(sum(if[Status]='lapsed'then[TotalAmount]end))/abs(sum(if[Status]='inforce'then[TotalAmount]end))
However that formula will also pick the value from Q2 (quarter 2) 2016. What I want to do is to tell tableau to check first if any quarter does not contain both inforce value and lapsed value then skip that quarter. In this case I need to calculate lapsed rate which does not include Q2 2016. How do i do this?
I'm using Tableau v.10.
Thanks.
This is just a quick approach and may not be the most efficient but it seems to work.
You need to use a combination of a row level calculation and a level of detail calculation.
The level of detail calculation can be used to flag the quarters which have both a lapsed and inforced status. Once these quarters are flagged you can calculate the lapsed rate at a row level which can then be rolled up using a sum.
Create a calculated field as follows:
Let me know if you have any questions or need any tweaks.
if
avg(
// Calculate the number of Inforce/Lapsed occurences per Quarter
IF
[Status] = 'Inforce'
or
[Status] = 'Lapsed'
then
{ FIXED
DATEPART('quarter', [Date]):
countd([Status])
}
else
0
end)
//
= 2
then
// Calculate the Lapsed Rate as both statuses exist in the quarter
sum((if
[Status] = 'Lapsed'
then [Total Amount]
END))
/
sum([Total Amount])
END

Running total quick calculation in Tableau with two different groupings

I have the following chart, which uses Quick Table calculation to count the percentage of the values across the group Category for each month.
What I want is to count the percentage of the monthly running total of the values across the group Category for each month. I can create the quick calculation for monthly running total, separately, but I can't seem to combine it with this below because one requires quick calculation across the table and another across the group. Can anyone advise if this is doable?
The workbook attached here, with the problem above in the second tab.
Edit: Let me give example what I meant here:
April: A = 1000, B=500, C= 200, D=300 -> total is 2000
percentage in April in chart is A = 1000/2000 = 50%, B = 25%, C = 10%, D = 15%, total = 100%
May: A=2000, B=2000, C=1800, D=200 ->
cumulative April+May A=3000, B=2500, C=2000, D=500 -> total is 8000
percentage in May in chart is A=3000/8000 = 37.5%, B = 31.25%, C = 25%, D = 6.25%, total = 100%
I got an answer elsewhere and thought I should update here. The solution was to use a secondary table calculation. Basically, after putting SUM(Value) pill in Row:
right click on it to select Add Table Calculation
set as primary calculation the Running Total Sum of Table (Across)
check the box to Perform a secondary calculation on the result
set as secondary calculation the Percent of Total of Table (Down)
See below screenshot of the setting.
Are you looking for ways to calculate the sum of the running total across the category? it is not clear when you say to count the percentage? However if you are looking for sum of percentage running total across your category... you can edit your calculation and set the calculation type as running total, the summarize value ( you can choose, sum , average, min,...max) and the running along option choose category.