INTERSECT OPERATOR in set analysis qlikview - qlikview

QLIKVIEW DEVELOPERS:
I am creating a set analysis.
sum({<Market={"APAC"},[SUB-CATEGORY]={"arts"}>}sales)
sum({<Market={"APAC"},[SUB-CATEGORY]*={"arts"}>}sales)
What is the role of * in the second expression? both the expressions are resulting the same output.

The normal behaviour of set analysis is to force the field to the value or set of values used in the set analysis expression.
On the first expression, no matter what you have selected in the document, the SUB-CATEGORY field will always be "arts".
On the second expression, the selections you made on the SUB-CATEGORY field will have an impact on the expression :
If nothings is selected (meaning that all field values are considered), the intersection between all and "arts" will result in "arts" being selected and the sum will be made assuming that selection.
If the SUB-CATEGORY field is selected with others value than "arts", the intersection will be an empty set and the Sum will be zero.
If the SUB-CATEGORY field is selected with "arts" and something else, the intersection will again be as if "arts" is selected.
Hope this helps!

The *= denotes that both user selections and the rules in set analysis are taken into account.
With the = symbol the user's selections are completely ignored.

Related

Redaction in Tableau

I am currently in the process of building some Tableau workbooks where we will need to redact visualizations or text tables if the results fall below a certain threshold (e.g. only ten data points are returned after filters are applied). Does anyone know how to create calculated fields or know of other methods to redact in Tableau?
You can create a threshold filter that compares the number of filtered responses to a threshold value set in a parameter.
First, create a parameter with integer data type and set it to the desired threshold. In this example, I called it Count Threshold.
Then create a calculated field for the filter with an equation like the following:
{FIXED: COUNTD([Respondent ID]) >= [Count Threshold]}
(I did this for survey results where we needed to hide results if the filtered number of respondents was fewer than 10.)
For the threshold filter to be applied after your other filters, choose "Add to Context" for your other filters.
I found a partial solution on the Tableau community forum/knowledgebase about redaction that might work for other implementations.
The basic idea is to create two different calculated fields, one which displays a integer value and the other that displays a string value. That way, when both are concatenated in the display you get the desired output without breaking any of the calculated field rules.
So create a calculated field that has a formula like:
IF sum([Datafield_to_Redact]) < 10 THEN "*" ELSE str(sum([Datafield_to_Redact])) END
And another that has a calculated field that has a formula like:
IF sum([Datafield_to_Redact]) < 10 THEN null ELSE sum([Datafield_to_Redact]) END
In the post the attached workbook and screenshot show how the two values are concatenated in the Text mark.
Workbook screen capture

SSRS hide a row where a expression field value is blank

I have a field in my SSRS report that derives a value based on an expression. The expressions is a simple Lookup between 2 datasets and is working fine. It does return some NULL values and what I would like to do is not display the rows where the expression produces a NULL value. I know how to do this on a field that is not based on an expression but not on a field that is. Anyone know how this can be done? Thanks
Chances are, it will be something like the expression below on the Hidden property of whatever it is you are trying to hide/show.
=IIf(IsNothing(<your Lookup expression>), True, False)
Add any other checking in there too, if need be.
UPDATE:
To make this work on the entire row. Right-click on a row header in design mode, and choose Row Visibility... Click Show or hide based on an expression. Add the expression you now have in there.

Spotfire calculated column based on filter

I want to create a calculated column that is equal to the percent of the total of the previous column, but only for the rows that are selected.
For example, the two columns below show rows where I've filtered for only the rows of interest. The sum is accurate, but I want the percent of the total to be only out of sum of the currently selected rows rather than the absolute total (which is how it's currently being calculated). I want the percent of the total to dynamically change depending on what is filtered in the data table. Is this possible?
Image of my 2 columns:
I know spotfire somehow calculates this becuase when I insert a bar graph using % of Total(SumofComponents) the ratio is only out of the current total.
Image of my bar chart:
much like in programming, Spotfire has a rough concept of scope. and unfortunately, calculated columns are above filters in terms of scope; they have no concept of what is and is not filtered.
visualizations themselves, however, do*!
what you can do in this case is to put your expression on the Y axis (it looks like you've done this), and it will respect your selected filters*.
*caveats: there are a few ways that filtering can be negated on a given visualization:
Properties>>Appearance>>Show shadows indicating the unfiltered data. this option shows a grey bar that represents the data hidden by whatever filter selection was made
Properties>>Data>>Limit data using filterings. these options allow the viz to use separate filtering sets ("Filter Schemes" as they're called in Spotfire) or none at all (to ignore filters completely)
Properties>>Subsets. by default there are three subsets: "All Data" which ignores filters, "Not in current filtering" which inverts the filter selection (e.g., if you filter a boolean column to show only TRUE, this chart would show only FALSE), and "Current filtering" which is the default behavior. you can check the online help for additional subsets that you can add.

Qlikview Expression to get Average in comparison to selected criteria for Chart

I am trying to create a chart that displays the average of a parameter of an entire category. The problem is that in sheet 1,2,3,4, etc, the charts I have reflect one parameter, so when I go to compare this parameter to the average in my new sheet, I only get the average of the fields that have been selected in prior sheets. I want it so that I can create a new chart with one bar as an average of the entire population, and another bar in the same chart that depicts the average of the selected parameter(s). Ideally, I would have two dimensions/x axis categories, one for the selected criteria, and one for average of all categories. Can someone help?
Thanks.
I believe the way to handle this is with set analysis. You can create one expression with the normal avg(parameter) and another expression with some embedded set analysis. See example below.
Expression1: avg(parameter) // will agregate everything in the current selection
Expression2: avg({1<category='YourCategory'>}parameter) // will aggregate everything in a category that you set in the set analysis syntax.
With some more specific info I would be able to get you an actual expression, but hopefully this helps.
EDIT
Updated to reflect new information provided in the comments.
Expression1: avg(parameter)
Expression2: avg({1}parameter)
In set analysis syntax the {1} means the entire universe of data where as {$} is your current selection. In other words, 1 is your data with nothing selected. In my first example above, the {1<category='YourCategory'>} statement uses a modifier signified by the <> so that you would be performing the aggregation over the entire universe with only the value specified in YourCategory selected.
So if the scenario is that you have currently selected let's say, 5 zip codes, your current selection ({$}) would be those 5 zip codes and the entire universe ({1}) will be as if you selected no zip codes. Therefore comparing those two populations side-by-side in two Expressions should give you the comparison you want.
Caveat: Using the {1} syntax in your expression means that your average of "all zip codes" will always be the average with nothing selected unless you put something in the modifier as in my first example. See this more detailed explanation.

Reporting Services - hide table column based upon report parameter

I have a report in Reporting Services 2005, and I want to hide or show a single table column based upon a report parameter. Does anyone have any idea how to do that?
Thanks!
Use the visibility property of the column. This worked for me.
=iif(Parameters!ParameterName.Value = "TextValueOfTheParameter",False,True)
Set the Visibility for the column to an expression which will return true or false. This property can be found on in the Visibility tab on a TextBox for example.
Click the radio option for Expression and then your expression might look like
=Parameters!ShowColumn.Value
Tip: If the expression returns "False" then the column or row will be visible. If the expression returns "True", the expression will be hidden. This tricked me at first.
Let’s say my report(SSRS 2005) have 5 columns. And I want to show/ hide columns based on a parameter(multi select with all 5 column names) selected by user. do as following
1)Create a parameter of type string (ColumnVisibility is name of my parameter) with desired column names in labels for the 5 columns and INT number(01,02,03,04,05) respectively in the values in “Available Values” section of the parameter wizard.
2) Then Go to column Properties on design . Go to “visibility” and paste following
=iif(instr(Join(Parameters!ColumnVisibility.Value,","),"01")>0,false,true)
3) repeat same for all the columns, by increasing the int value by 1..see following for example
2nd column
=iif(instr(Join(Parameters!ColumnVisibility.Value,","),"**02**")>0,false,true)
3rd column
=iif(instr(Join(Parameters!ColumnVisibility.Value,","),"**03**")>0,false,true)
And so on. For SSRS 2008, when you right click on the column you can see "Column Visibility" option. paste the code in "show or hide based on an expression" section for each column.
For some of my reports I've set the Visibility (Specifically the Hidden property) for the column to:
=IsNothing(Fields!Site.Value)
Note that this only works if the relevant field can be null in the underlying dataset, otherwise you will see the blank column.
If you want to hide whole column, when there are no data at all for that specific column in the report, you can use following code in the column visibility/expression:
=IIF(IsNothing (Sum(Fields!columnA.Value, "ReportA")),False,True)
when I do as above, I can make the column disappear but it leaves a gap in my table. Is this the expected result. I was hoping the columns would also shift over. I'm trying to hind a column for one group and then display it for the next group.
To make a null column disappear,
Right-Click column to select Column Visibility, then Set expression for Hidden:
IIF(IsNothing(Fields!FieldName.Value),True,False)