Improvement on Complex LoD Calculation - tableau-api

I'm trying to improve performance on this calculation which has multiple IF statements.
{Fixed [Name],[Region],[Adj Payor Code],[Test Category]:
IF ISNULL(SUM([Test Count YTD])) OR ISNULL(SUM([Test Count LYTD]))
OR SUM([NRR YTD])<=0 OR SUM([NRR LYTD])<=0 OR SUM([Test Count YTD])<1 OR SUM([Test Count LYTD])<1
THEN 0 ELSE
[Delta AWR]*SUM([Test Count YTD])END
}
I believe that some of the value comparisons because they are doubles could be improved.
All values only need up to two decimal places and are currently formatted as doubles.

Related

Limiting number of collect_list items in spark scala

I have code that states
db.groupBy("ids")
.agg(collect_list("names") as "alias")
.select("ids", "alias")
However, there are some rows where the alias would be only 1 entry large, while others could be 200.
How can I limit the ones with >30 entries to a maximum of 30 entries?
You can use the slice function to subset the array.
db.groupBy("ids")
.agg(slice(collect_list("names"), 1, 30) as "alias")
.select("ids", "alias")

Summary Percentage Yes vs No

Basically I'm looking for a formula to see how many times Yes was used vs. No.
I have something like this:
(({Command.result} ="Yes") / {Command.result})*100
Which makes sense in my head, but I keep getting:
A number, or currency amount is required.
Your current formula attempts to divide a boolean type through by a string. You can only perform division with numbers.
Instead, create two formulas as individual counts of Yes or No:
#YesCount:
If ({Command.result} = "Yes") Then 1 Else 0
#NoCount:
If ({Command.result} = "No") Then 1 Else 0
For the percentage, create two more formulas:
#YesPercent:
100 / Count ({Command.result}) * Sum ({#YesCount})
#NoPercent:
100 / Count ({Command.result}) * Sum ({#NoCount})

SSRS - Expression to count the number of dates in a colums

In SSRS,how to count the number of dates present in a column?
I am developing a report where I need to display the total number of dates where Date_of_Delivery.Value is updated in a specific month & also I need to display the same for where Date_of_Delivery.Value is Not updated.
Please insist me.
If you want a count of the number of times a date is in a certain time period, you would use the IFF to perform the check and then SUM the results.
=SUM(IIF(Fields!Date_of_Delivery.Value >= CDATE("01/01/2016") AND Fields!Date_of_Delivery.Value <= CDATE("01/31/2016"), 1, 0)
The IFF will check to see if the Date of Delivery is between two dates and return 1 if true otherwise 0. The SUM then sums up all the results.
You should probably use some Parameters for your date so you can just change the parameters instead of the code in the report.
=SUM(IIF(Fields!Date_of_Delivery.Value >= Parameters!START_DATE.Value AND Fields!Date_of_Delivery.Value <= Parameters!END_DATE.Value, 1, 0)

Create Accumulate function on Drools Decision table

I am trying to create accumulate function condition on Decision table. Please help me that How to create on Decision table.
My accumulate rule function is
when
$i : Double(doubleValue > 1000 ) from accumulate( Product($productQty:quantity),sum($productQty))
then
System.out.println( "The quantity is exceeded more than 1000 and the total value is " + $i );
You can create a column
rows
n condition
n+1 $i : Double() from accumulate( Product($productQty:quantity),sum($productQty))
n+2 doubleValue > $param
n+3 add quantitities and check
n+4 1000
Two comments.
This is not well-suited for decision tables unless you plan to check for different ranges of the accumulated value.
Why do you use double for counting what is, most likely, integral quantities? I'd be surprise if the accumulated stock exceeds Integer.MAX_VALUE. In short: use Number in the pattern and intValue in the constraint.

Rounding Off Decimal Value to Pevious and Next Hundreds

I am working in C#. I have decimal variable startFilter that contains value say 66.76. Now I want this decimal value to appear in the seach filter $0 to $100. But what I also want is, that the search filter starts from the first decimal value that comes in startFilter variable. So for instance in this case the search filter will start from $0 to $100 because the value in startFilter variable is 66.76, but in another case it can be $100 to $200 if the first value that comes in searchFilter is say $105.
Having said that, how should I round off the value in seachFilter to previous hundreds and the next hundreds. Like if the value is 66.76 it rounds off to 0 as floor and 100 as ceiling, so on and so forth.
Any idea how to do that in C#?
double value = ...
int rounded = ((int) Math.Round(value / 100.0)) * 100;
divide your original number by 100. get floor and celing values. Multiply each of them by 100.