Forum Discussion

robofski's avatar
robofski
Resolver II
9 years ago
Solved

Calulated column question

Power BI community

 

I have a table of sales data that amongst other things contians:

 

Part Number        Cust Type          Part Type

Part1                    A                       B

Part1                    B                       B

Part2                    B                       A

Part3                    B                       B

 

I am trying to calculate a column to enable me to sliice data to show part numbers that were B type and only purchased by B type customers so in the eample above it only Part 3 would be true as Part 2 was purchased by an A customer and Part 1 was purchased by both and A and a B customer.

 

Can anyone help?

 

Thanks

 

Dan

  • kudos to CS for putting in so much time.  I am following this post because I come from the SQL world and it is a classic Unmatch query; and so I'm interested to see how it is implemented in PBI.

     

    In SQL one would have a Parts table (all Parts & Part Type only, no repeats)

     

    Then you would make the 1st unmatched record set which is those sales records where the 2 types do not match. 

    That would then be made distinct of Part field only so there are no repeats: DistinctUnMatch1

     

    Then you would left outer join Parts to DistinctUnMatch1.

    That returns all Parts records but in the UnMatch1 Parts field there are nulls where nothing can match.

    This record set is UnMatch2. ... you apply criteria so it only returns the Nulls records- which by definition is the record set that are the Parts with only matched Customer & Part Type.

     

    I may be out of date on PBI capability but I don't think one can define a left outer join - so I presume that is why one is working with yes/no comparisons instead and then a filter.

     

     

     

13 Replies

  • Anonymous's avatar
    Anonymous
    Not applicable

    Hi robofski

     

    Try the following

     

    1. create a column called countrows as

        Countrows = Calculate(Countrows(PartsBought),FIlter(PartsBought,PartsBought[PartNo]=Earlier([PartNo])))

        This finds the number of rows by part number

    2. Create a column called ShowYes as

        ShowYes = If ([Countrows]=1 && [Cust Type] = "B" && [Part Type] = "B", "Yes","No")

        If the number of rows is 1 and custtype and parttype are "B" then set that row to "Yes" to show other wise "No"

    3. Create the table report and in the Filters include the value ShowYes and set the Advance Filtering as SHow item if it contains  "Yes".

     

    If this works for you please accept it as  a solution and also gice KUDOS.

     

    Cheers

     

    CheenuSing 

    • robofski's avatar
      robofski
      Resolver II

      I may have been a little premature in thinking this was the answer, it doesn't appear to be working quite as expected, looks to be only returning results that only appear once with Yes, however records that appear multiple times, even if they are B parts sold to B customers are appearing as No, so if I B customer buys the same B part multiple times and is the only customer type that buys that part it should be a Yes.

      • Anonymous's avatar
        Anonymous
        Not applicable

        Hi

         

        Please share some data and the output expected.  Put it on onedrive or dropbox and share the link

         

        Cheers

         

        CheenuSing

  • Hi robofski,

     

    Anonymous has done some great work, but I often suggest completing this type of complicated output using the Query Editor.


    The query editor is very robust and can create an additional column a lot easier and in a step by step process, which makes it easier to work through.

     

    As well as if you create it using the Query Editor, it will get better compression into your data model.

    • Anonymous's avatar
      Anonymous
      Not applicable

      Hi GilbertQ

       

      I agree it could be better with Query Editor and can walk through step by step.

       

      Next time will look at this option, instead of measures.

       

      Thanks for the valuable feedback.

       

      Cheers

       

      CheenuSing