Forum Discussion

DataMinion's avatar
DataMinion
Helper I
3 years ago

Count with OR Condition

Hi,

 

I'm new to using Power BI so looking for help please on a problem I can't resolve.

 

I'm trying to count whether client 1 or client 2 is active, these clients are related and usually partners. To be considered active they need to satisfy two conditions,

Their service status is active

Their annual income is greater than £1

 

I have included three tables below, Sole Clients, Joint Clients and Income so I can either use the client from the sole clients table or the joint clients table.

 

I have created a measure that identifies if each client is active and I am stuck when I link these clients as I only want to count them both once, so in excel I would typically use the OR formula.

 

I've created a measure to identify if their income is greater than or equal to £1 which I then reference

 

ActiveFee = CALCULATE(COUNT(SoleClients[CRMContactId]), Income[Fee] >= 1)
 
Client 1 Active = CALCULATE(COUNT(Clients[CRMContactId]), ActiveStatus[Active]= "Active", FILTER(income, [ActiveFee]))
Client 2 Active = CALCULATE(COUNT(Clients[CRMContactID2]), ActiveStatus[Active]= "Active", FILTER(income, [ActiveFee]))
 
ActiveClients = IF(OR(CALCULATE(Count(Clients[CRMContactId]), ActiveStatus[Active]= "Active", FILTER(income, [ActiveFee])), CALCULATE(COUNT(Clients[CRMContactID2]), ActiveStatus[Active]= "Active", FILTER(income, [ActiveFee]))), 1, 0)
 
When I run this last measure it correctly shows 1 and 0 but it does not count the total as I would want to know for each adviser how many active clients they have. I imagine the result is text so using Value to convert so it sums the column doesn't work.
 
There's advantages to identify each sole client as being active so I would want to keep that, but I appreciate there may well be a way to combine client 1 and client 2 in the same measure.
 
Hopefully I've explained everying clearly and appreciate any help you can give me.
 
Thanks

 

 

11 Replies

  • This may be what you want.

    ActiveClients = 
    CALCULATE(
        COUNTROWS( SoleClients ),
        FILTER( SoleClients, CALCULATE( SUM( Income[Fee] ) ) >= 1 ),
        FILTER(
            SoleClients,
            "Active" IN { SoleClients[ActiveStatus], RELATED( Clients[ActiveStatus] ) }
        )
    )

     

     

    • DataMinion's avatar
      DataMinion
      Helper I

      Hi MarkLaf ,

       

      Thank you for this, your solution is much improved on my try, however there is one issue that means not all clients are pulled through and you wouldn't have known this from my original post so I'm wondering if you can include this as well please.

      For the clients, in most cases client 1 is the main client but in some cases client 2 is the main client. Your solution is only counted when client 1 is the main client.

      Client 1 might not have fees of more than £1 but client 2 does so there are clients that have not been counted. Screenshot below shows that the joint fee income for these clients is zero yet client 2 generates over £2k

      So as well as linking the clients together I need to link their income together as well, is this possible at at all.

      So the result should be

      If client 1 is active and income > £1 or If client 2 is active and income > £1 then count else don't.

       

      I hope that makes sense and thanks again for your help

       

       

  • You may need to modify your model, then. Right now, Income only relates to SoleClients, so you can't get related income for Clients (at least leveraging your current physical relationships). Assuming there is a FK column in Income for Clients, you could achieve what you want with your current model using virtual relationships, but it would be better to redesign your model/relationships.

    There are different ways to approach this depending on your requirements, but probably the simplest would be in Power Query to combine (append, not merge) all main clients from SoleClients and Clients and create a table of secondary clients, then define relationship MainClients--1:M-->Income and MainClients--1:M-->SecondaryClients. Note that a client could be in MainClients and SecondaryClients with this approach. Something like:

     

    ActiveClients = 
    CALCULATE(
        COUNTROWS( MainClients ),
        FILTER( MainClients, CALCULATE( SUM( Income[Fee] ) ) >= 1 ),
        FILTER(
            MainClients,
            "Active" IN UNION( { MainClients[ActiveStatus] }, VALUES( SecondaryClients[ActiveStatus] ) )
        )
    )

     

    If the above doesn't work for your particular data or requirements, it would probably be most helpful if you shared some dummy data for your current tables.

    • DataMinion's avatar
      DataMinion
      Helper I

      Hi,

       

      Thanks MarkLaf  for your help and patience. I'll try to explain further below as it could be either the way my model is setup or my explanation.

       

      The tables are as follows

       

      Sole Clients - this is all clients listed individually

      Joint Clients - this is all clients listed jointly, Client 1 reference will be CRMContactID and client 2 reference is CRMContactID2. This reference corresponds to the same number the client has in the Sole Clients and Income tables and is what I use to create relationships

      Income - this summarises all the clients income, listed individually

       

      Sole Client

      CRMContactIdFirstName
      30599070John
      30599071Bruce
      30599072Mildred
      30599073Sheila
      30599074Rupert

       

      Joint Clients

      CRMContactIdCRMContactID2Client(s)
      30599070 John
      3059907130599072Bruce & Mildred
      30599073 Sheila
      30599074 Rupert

       

      Income

      ClientCRMContactIdSum of Fee
      30599070£320.35
      30599071£0
      30599072£2,090.42
      30599073£746.44
      30599074£2,586.81

       

      Model

       

      I figured the relationship should be between the Sole Client table and the Income Table and then between the Sole Client table and the Joint Clients table. If I should be linking the Joint Clients table to the Income table then that could be part of the problem.

      I do have other tables that I link and I use the Sole Clients table for that as well.

       

      If there is a way to sum client 1 income and then sum client 2 income and finally add these together then that way I could use the joint income to determine whether the clients meet the criteria.

      I'm happy to add columns if that is easier such as client 1 income, client 2 income and then add these together for joint income.

       

      Hopefully this helps.

       

      Thanks again

      • MarkLaf's avatar
        MarkLaf
        Super User

        So, with the above dummy data, should ActiveClients output to 4 or 5 (because, although Bruce has 0 fee, he still counts if you factor in joint client fee/status)?