Forum Discussion

Kev59's avatar
Kev59
Helper I
2 years ago
Solved

FILTER - AND operator

Dear all

 

I'm facing to a difficulty with my PBI report. 

 

I use filters (segments) to show customers and revenues based on a period. Work fine:

If I select different products, the matrix shows all the customers who ordered one of these products.

 

Now I would like to show the customers that ordered ALL the products selected and not one of them. 

 

How can I do that?

 

Thanks in advance

  • Anonymous's avatar
    Anonymous
    2 years ago

    lbendlin , thanks for your concern about this case. I tried to create a sample data myself based on the user's requirement and implemented the result. Please check if there is anything that can be improved. Here is my solution:
     
     
    Kev59 , if this sample data is structurally different from the one you are using, please do not hesitate to mention it and I will modify it!

     

    Here is the sample data I created:

     

    Primary table:

     

    Product table:

     

    Customer table:

     

    I also created a disconnected table and the final model relationship looks like this:

     

    Put the ProductName from the disconnected table into the slicer.

     

    Create a measure:

     

    Measure = 
    VAR __slicer = ALLSELECTED('Table 2'[ProductName])
    VAR __slicer_count = COUNTROWS(__slicer)
    VAR __table_count = CALCULATE( COUNTROWS( FILTER(SUMMARIZE('Table','Table'[Customer ID],'Table'[Product ID],"@count",DISTINCTCOUNT('Table'[Product ID])),[@count]>0 ) ),'Product'[ProductName] IN __slicer)
    VAR __result = IF( __slicer_count = __table_count,1)
    RETURN
    __result

     

     

    Using the matrix visual, place the CustomerID of the Customer table into Row, the ProductName of the Product table into Column, drag the ProductName of the Product table to value and select Count(distinct).

     

    Drag Measure into the visual object level Filter and set the filter condition to "is 1".

     

    The final visual effect is as follows:

     

    pbix file is attached.

     

    If you have any further questions please feel free to contact me.

     

    Best Regards,
    Yang
    Community Support Team

     

    If there is any post helps, then please consider Accept it as the solution  to help the other members find it more quickly.
    If I misunderstand your needs or you still have problems on it, please feel free to let us know. Thanks a lot!

10 Replies

  • That is an OR filter, not an AND filter. You need a measure for that.

     

    Please provide sample data that covers your issue or question completely, in a usable format (not as a screenshot).

    Do not include sensitive information or anything not related to the issue or question.

    If you are unsure how to upload data please refer to https://community.fabric.microsoft.com/t5/Community-Blog/How-to-provide-sample-data-in-the-Power-BI-Forum/ba-p/963216

    Please show the expected outcome based on the sample data you provided.

    Want faster answers? https://community.fabric.microsoft.com/t5/Desktop/How-to-Get-Your-Question-Answered-Quickly/m-p/1447523

  • Anonymous's avatar
    Anonymous
    Not applicable

    Hi Kev59 ,

     

    Thanks for the reply from lbendlin .

     

    Create a DAX measure that counts the number of products ordered by each customer, then compare this count to the number of products selected in the Slicer.

    measure = 
    VAR SelectedProductsCount = COUNTROWS(VALUES('Products'[ProductID]))
    VAR CustomerProductCount = CALCULATE(
        DISTINCTCOUNT('Orders'[ProductID]),
        ALLEXCEPT('Customers', 'Customers'[CustomerID])
    )
    RETURN
    IF(CustomerProductCount = SelectedProductsCount, 1, 0)

     

    Add this measure to Filter to set the filter condition to only display customers with a value of 1.

     

    I would be grateful if you could provide me with sample data for testing, please remove any sensitive data in advance.

     

    Best Regards,
    Yang
    Community Support Team

     

    If there is any post helps, then please consider Accept it as the solution  to help the other members find it more quickly.
    If I misunderstand your needs or you still have problems on it, please feel free to let us know. Thanks a lot!

  • Hi Both

     

    Sorry I can't share easily my pbx (not allowed) and to long to create a new one without confidential data.

     

    Currently, I have tried a short code:

     

    CustomerProductCount = CALCULATE(
        DISTINCTCOUNT('CDD - Invoiced Sales'[Material Code]),
        ALLEXCEPT('Products', 'Products'[Product])
    )

     

     

    If I create a matrix with my accounts in X axis ('Account Grouping'[Sold_To]) and the measure above as value, I have the list of accounts like below:

    In this case, I selected 6 different products in my filter.

     

    I would like to see only the accounts using ALL the products selected (6 products in the test above).

     

    I tried also the following measure but it doesn't work propertly:

     

    measure = 
    VAR SelectedProductsCount = COUNTROWS(VALUES('Products'[Product]))
    VAR CustomerProductCount = CALCULATE(
        DISTINCTCOUNT('CDD - Invoiced Sales'[Material Code]),
        ALLEXCEPT('CDD - Account Grouping', 'CDD - Account Grouping'[Sold_to])
    )
    RETURN
    IF(CustomerProductCount = SelectedProductsCount, 1, 0)

     

     

    My final goal is to show only the accounts using ALL the products selected (X axis)  and to add in Y axis, the other products (not selected in my filter) used by these accounts.

     

    Not sure to be clear in my wish

     

    BR

     

     

    • lbendlin's avatar
      lbendlin
      Super User

      I cannot assist you if you are unable to provide sample data. I hope someone else can help you further.

    • Anonymous's avatar
      Anonymous
      Not applicable

      lbendlin , thanks for your concern about this case. I tried to create a sample data myself based on the user's requirement and implemented the result. Please check if there is anything that can be improved. Here is my solution:
       
       
      Kev59 , if this sample data is structurally different from the one you are using, please do not hesitate to mention it and I will modify it!

       

      Here is the sample data I created:

       

      Primary table:

       

      Product table:

       

      Customer table:

       

      I also created a disconnected table and the final model relationship looks like this:

       

      Put the ProductName from the disconnected table into the slicer.

       

      Create a measure:

       

      Measure = 
      VAR __slicer = ALLSELECTED('Table 2'[ProductName])
      VAR __slicer_count = COUNTROWS(__slicer)
      VAR __table_count = CALCULATE( COUNTROWS( FILTER(SUMMARIZE('Table','Table'[Customer ID],'Table'[Product ID],"@count",DISTINCTCOUNT('Table'[Product ID])),[@count]>0 ) ),'Product'[ProductName] IN __slicer)
      VAR __result = IF( __slicer_count = __table_count,1)
      RETURN
      __result

       

       

      Using the matrix visual, place the CustomerID of the Customer table into Row, the ProductName of the Product table into Column, drag the ProductName of the Product table to value and select Count(distinct).

       

      Drag Measure into the visual object level Filter and set the filter condition to "is 1".

       

      The final visual effect is as follows:

       

      pbix file is attached.

       

      If you have any further questions please feel free to contact me.

       

      Best Regards,
      Yang
      Community Support Team

       

      If there is any post helps, then please consider Accept it as the solution  to help the other members find it more quickly.
      If I misunderstand your needs or you still have problems on it, please feel free to let us know. Thanks a lot!

      • Kev59's avatar
        Kev59
        Helper I

        Anonymous 

         

        Many thanks for your help. Seems to be exactly what I want.

         

        I'm going to try to adapt to my dataset.

         

        Just a question: why do you need to create the disconnected table for products? not possible to use only the Product table (already used in my page as a slicer)?

    • Ashish_Mathur's avatar
      Ashish_Mathur
      Super User

      Hi,

      Prepare a small dummy dataset and for that dataset, show the expected result.