Forum Discussion

Lexi's avatar
Lexi
Frequent Visitor
4 years ago
Solved

Nested if statements/Switch function?

Howdy! 

 

I need some direction from you nice guys ðŸ˜Š

 

I am new to Powerbi and I am trying to get to a solution to my issue. I have a dataset and I am assigning groups to our customers 

Customer 1001 = US Postal Code

Customer 1002 = Europe Postal Code

Customer 1003 = Asia Postal Code.

An issue appears when the customer moves or if they order for another customer. So I want to build in a function or create a custom column (that can be used in a filter). I am using the switch function for the normal customers but I need away to include the abnormal cases. 

  • Lexi  can you try this

    Column =
    VAR _home =
        SELECTCOLUMNS (
            SUMMARIZE (
                CALCULATETABLE ( 'Table', ALLEXCEPT ( 'Table', 'Table'[CustID] ) ),
                'Table'[CustID],
                'Table'[Home]
            ),
            "cust", [CustID],
            "country", [Home]
        )
    VAR _shipping =
        SELECTCOLUMNS (
            SUMMARIZE (
                CALCULATETABLE ( 'Table', ALLEXCEPT ( 'Table', 'Table'[CustID] ) ),
                'Table'[CustID],
                'Table'[Shipping]
            ),
            "cust", [CustID],
            "country", [Shipping]
        )
    VAR _intersect =
        INTERSECT ( _home, _shipping )
    VAR _except =
        EXCEPT ( _shipping, _home )
    RETURN
        IF (
            MAXX ( _except, [country] ) = BLANK (),
            MAXX ( _intersect, [country] ),
            MAXX ( _except, [country] )
        )
    

     

    which generates this

     

8 Replies

  • ValtteriN's avatar
    ValtteriN
    Community Champion

    Hi,

    Unfortunately, your post is rather difficuilt to understand and it would be good if you provided more information. For now, the only help that I can give is to show some patterns/tips that I use in my models when I want to categorise customers in measures:

    First typically I create a SWITCH + TRUE structure where it goes something like this:

    SWITCH(TRUE(),
    PLACE IF CONDITION HERE, "Category 1",
    PLACE IF CONDITION HERE, "Category 2",
    PLACE IF CONDITION HERE, "Category 2")

    Then I create a table which has these states to use as a filter: 

    Table = {("Category 1"),("Category 2"),("Category 3")}

    Finally I create a filter measure to use in my visuals:
    Customer category switch filter:= IF(
    or(not(HASONEFILTER('Table'[Value])),[Customer category]=max('Table'[Value])),1,0)


    I hope this helps to solve your issue and if it does consider accepting this as a solution and giving the post a thumbs up!

    • Lexi's avatar
      Lexi
      Frequent Visitor

      Thanks folks!

      I am trying to get at column D so I can use it later on as a filter in the main dashboard.

      So I created this formal so far -

      POSTAL CODE = Switch([CustomerID],
      "Customer1001", "USA",
      "Customer 1002", "EU", "Other"

      This works for the customers that have no difference. I need to complete the column of the customers that dont conform. I want to try to complete a column with those easy customers that follow correctly and then the ones that dont, but I am unsure how to add the exceptions.

      Ie: Customer 1001 if shipping address is europe then the postal code is eu otherwise usa

       

       

      • smpa01's avatar
        smpa01
        Community Champion

        Lexi  can you try this

        Column =
        VAR _home =
            SELECTCOLUMNS (
                SUMMARIZE (
                    CALCULATETABLE ( 'Table', ALLEXCEPT ( 'Table', 'Table'[CustID] ) ),
                    'Table'[CustID],
                    'Table'[Home]
                ),
                "cust", [CustID],
                "country", [Home]
            )
        VAR _shipping =
            SELECTCOLUMNS (
                SUMMARIZE (
                    CALCULATETABLE ( 'Table', ALLEXCEPT ( 'Table', 'Table'[CustID] ) ),
                    'Table'[CustID],
                    'Table'[Shipping]
                ),
                "cust", [CustID],
                "country", [Shipping]
            )
        VAR _intersect =
            INTERSECT ( _home, _shipping )
        VAR _except =
            EXCEPT ( _shipping, _home )
        RETURN
            IF (
                MAXX ( _except, [country] ) = BLANK (),
                MAXX ( _intersect, [country] ),
                MAXX ( _except, [country] )
            )
        

         

        which generates this

         

  • smpa01's avatar
    smpa01
    Community Champion

    Lexi  need more info, provide sample data and expected output.

  • Lexi's avatar
    Lexi
    Frequent Visitor

    Hi all, 

     

    Thanks for all your contribution.

    I tried out your formual but it aint working for me as I figured out my conditions are more complicated than I first intended. 

     

     

    I have one set of customers (150 in total) following one swich formual correct (VAR a), then about 5 customers that are the outliers and do not follow suit. I meantion two hard ones below (Var B, Var C)

     

    Var a = switch ([customer],
                   "Customer 1001" , "USA",
                    "Customer 1002", "Asia", "Other  ...... and so on
    Var b = if [Customer] = "2002" && [cat] <> "Household" THEN " USA" else "Europe"
    Var c = if [Customer] = "2002" && [order date] > "2021, 10, 1" then "USA" else "Asia"

     

     

    How the do I even try get this into a new custom column? Any direction will help! 

     

    • smpa01's avatar
      smpa01
      Community Champion

      Lexi  can you please create a new thread with sample data, expected output?