Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Qlik Open Lakehouse is Now Generally Available! Discover the key highlights and partner resources here.
cancel
Showing results for 
Search instead for 
Did you mean: 
gmenoutis
Partner - Creator II
Partner - Creator II

Data Island Exclusion set analysis

I have a customers table, with [Customer Code] being the linking field, and a transactions table which among others includes [Transaction Store Code] and [Customer Code].

I also have made a data island which includes the field [NOT Transaction Store Code]. The point is to have a table with the customer list such that when some [NOT Transaction Store Code]s are selected, the [Customer Code]s which have some transactions on these stores are excluded.

I have thus created the following calculated dimension:

aggr(only({<[Transaction Store Code]-=[NOT Transaction Store Code]>} [Customer Code]),[Customer Code])

and set it to not show nulls.

This thing indeed does what I want. Unfortunately, it also hides [Cutomer Code]s which have no transactions at all. Is there any way to get around this?

1 Solution

Accepted Solutions
sunny_talwar

Try this

=Aggr(If(GetSelectedCount([NOT Transaction Store Code]) = 0, [Customer Code], Only({<Flag = {1}>-<[Transaction Store Code] = p([NOT Transaction Store Code])>} [Customer Code])), [Customer Code])

View solution in original post

14 Replies
sunny_talwar

You mean those rows where Transaction Store Code is null?

gmenoutis
Partner - Creator II
Partner - Creator II
Author

I am not very sure how to answer this. There are no rows in the transactions table where [Transaction Store Code] is null; BUT, there are rows in the customer table for which there are no transactions with such a [Customer Code].

sunny_talwar

That makes sense, so essentially the data is missing for certain Customer Code. Not sure if this will work or not, but can you try this

Aggr(Only({<[Transaction Store Code] = e([NOT Transaction Store Code])>} [Customer Code]), [Customer Code])

gmenoutis
Partner - Creator II
Partner - Creator II
Author

It doesn't work, same problem

sunny_talwar

Would you be able to share a sample to try out few things?

gmenoutis
Partner - Creator II
Partner - Creator II
Author

I am creating a simple warehouse with sample data for this purpose. After I test a few alternatives I'll post it here.

sunny_talwar

Sounds good.

gmenoutis
Partner - Creator II
Partner - Creator II
Author

Here are the specs:

When no [NOT Transaction Store Code]s are selected, the target calculated dimension should return all [Customer Code]s: C1,C2,C3

When [NOT Transaction Store Code] has S1 selected, this leads to [TranID]s T1,T2,T3, which in turn lead to [Customer Code]s C1,C2. These must be excluded, so I should only get C3. This case is also identical to selecting both S1,S2 as the [Customer Code]s implied are the same.

When [NOT Transaction Store Code] has S2 selected, this leads to [TranID] T4, which in turn leads to [Customer Code] C2. This must be excluded, so I should only get C1,C3.

...and here is the code:

customers:

Load * inline

[

Customer Code

C1

C2

C3

];


transactions:

Load * inline

[

TranID,Transaction Store Code,Customer Code,Price

T1,S1,C1,50

T2,S1,C1,40

T3,S1,C2,30

T4,S2,C2,60

];


negateStore:

Load * inline

[

NOT Transaction Store Code

S1

S2

];

sunny_talwar

Try this

=Aggr(Only({<[Transaction Store Code] = e([NOT Transaction Store Code])>/<Flag = {1}>} [Customer Code]), [Customer Code])

Where Flag is created in the customer table like this

customers:

LOAD [Customer Code],

1 as Flag;

LOAD * INLINE [

    Customer Code

    C1

    C2

    C3

];


transactions:

LOAD * INLINE [

    TranID, Transaction Store Code, Customer Code, Price

    T1, S1, C1, 50

    T2, S1, C1, 40

    T3, S1, C2, 30

    T4, S2, C2, 60

];


negateStore:

LOAD * INLINE [

    NOT Transaction Store Code

    S1

    S2

];