Forum Discussion

Sha's avatar
Sha
Icon for Helper II rankHelper II
6 years ago

Counting where it doesn't exist

I am struggling to find the solution: I have data in 1 row (company, product). I am wanting to choose a product and show all companies that have NOT purchased this product. I also want to see companies that have sold 2 or more products.

Data:

Company A Product 1

Company A Product 2

Company A Product 3

Company B Product 2

Company C Product 2

Company C Product 3

Company D Product 2

Company D Product 3

Result Required: I want to be able to select a product (Product 1) and see the list of companies that could still sell Product 1:

Company C

Company D

I don't want to see Company B because 2 or more products haven't been sold.

So I would also like to count how many companies could sell Product 1, which would be 2.

6 Replies

  • Sha ,

    One way to get if you have company Dimension

    Except(Company[Company],table[Company])

     

    Other is create a measure and then use nest two measures for your two requirements
    measure = count(Table[Product])+0

    Filter measure =calculate(sumx(value(company[company]),[measure]),filter(Table,[measure]=0))

    Filter measure 2 =calculate(sumx(value(company[company]),[measure]),filter(Table,[measure]>=2))

  • Anonymous's avatar
    Anonymous
    Not applicable

    HI Sha,

    If you want to use slicer works with a 'selector' instead of a filter, please use unrelated table fields as the source of the slicer or they will filter related records first. (you can extract the product value to create a new table)

    Selector= VALUES(Table[Product])

    #1. It seems like a common invert selection requirement, I think you can use 'INTERSECT' function to compare with the selected products and all table products if they contain intersect values. (write a measure to compare current aggregated value and selection value and return tag then use on the visual level filter to filter records)

    Measure filter =
    VAR list =
        INTERSECT ( ALLSELECTED ( Selector[Product] ), VALUES ( Table[Product] ) )
    RETURN
        IF ( COUNTROWS ( list ) = 0, "Y", "N")

    #2. You can add more condition to filter records who has less than two products in current aggregate row contents.

    Selection not include & product > 2 =
    VAR list =
        INTERSECT ( ALLSELECTED ( Selector[Product] ), VALUES ( Table[Product] ) )
    RETURN
        IF (
            COUNTROWS ( list ) = 0
                && COUNTROWS ( VALUES ( Table[Product] ) ) >= 2,
            "Y",
            "N"
        )
    

    Notice: these measure filters can works with a table visual with Company as the category, count of the product as value.

    If these not help, can you please share some dummy data with a similar data structure to test and coding formula? It is hard to provide the sample formula without any default data.

    How to Get Your Question Answered Quickly 
    Regards,

    Xiaoxin Sheng

    • Sha's avatar
      Sha
      Icon for Helper II rankHelper II

      Thank you, that gets me pretty close.  I'm now trying to figure out how to get the count of companies that have no product so I can do calculation with.  (I see it in the table but once I remove the Client it goes back to total).  I've got a pbi file, but haven't figured out how to upload for you.

       

      top left visual: Matrix... Rows=Company[Company], Column=Data[Product], Values=Data[Product cnt]
      top right visual: Filter... Field=Product[Product]
      bottom left visual: Table... Values= Company[Company], Data[Product]
      bottom middle visual: Table...Values=Company[Company], DistinctCount of Company[Company] Filter on Visual is Measure=Y
      bottom right visual: I want this to be same count as bottom middle visual
       
      Measures used:
      Product cnt = count(Data[Product]) +0   
      Measure =
      var list =
      INTERSECT(ALLSELECTED(Products[Product]),VALUES(Data[Product]))
      RETURN
      if(
      COUNTROWS(list) = 0
      && COUNTROWS(VALUES(Data[Product]) ) >=2,
      "Y",
      "N")
       
      Tables:
      Products = Distinct(Data[Product])
      Company = DISTINCT(Data[Company])
      DATA:
      Companyproduct
      atable
      achair
      aphone
      bchair
      cchair
      cphone
      dchair
      dphone
      • Sha's avatar
        Sha
        Icon for Helper II rankHelper II

        correction:

        bottom middle visual: Table...Values=Company[Company], DistinctCount of Data[Company]