cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
SaudMeethal Regular Visitor
Regular Visitor

Lookup with switch case

Table 1: consisting of Jobs:
pbi_community_job.png

 

Table 2:  Invoices of certain jobs in the job table. Not all the jobs have an invoice.

 

pbi_community_invoice.png

 

 

How do I calculate the Status column in the Job table using DAX?

 

Logic for status:

  • If flag=1 for job id in invoice, then Status="Current"
  • If flag=0 for job id in invoice, then Status="Old"
  • If job id in jobs is not there in Invoice, the "NG"

Excel for reference: Sample

 

Thanks!

 

1 ACCEPTED SOLUTION

Accepted Solutions
Highlighted
Super User
Super User

Re: Lookup with switch case

@SaudMeethal

 

Status =
VAR _Flag =
    CALCULATE (
        MAX(Invoices[Flag]),
        FILTER(ALL(Invoices[Job ID]),Invoices[Job ID] = Jobs[Job ID])
    )
RETURN
    SWITCH (
        _Flag,
        BLANK (), "NG",
        0, "Old",
        1, "Current"
    )

View solution in original post

5 REPLIES 5
Super User
Super User

Re: Lookup with switch case

Hi @SaudMeethal

 

Try this for your Status column in Jobs:

 

Status =
VAR _Flag =
    LOOKUPVALUE (
        Invoices[Flag],
        Invoices[Job ID], Jobs[Job ID]
    )
RETURN
    SWITCH (
        _Flag,
        BLANK (), "NG",
        0, "Old",
        1, "Current"
    )

 

SaudMeethal Regular Visitor
Regular Visitor

Re: Lookup with switch case

Hi @AlB,

 

I was not aware about the Return function, Thanks!

 

One small issue, the job ids in the invoice table aren't unique. Hence while looking up, i get the error: "A table of multiple values was supplied where a single value was expected."

 

 

Based on the resolution Here, I tried doing it like:

VAR _Flag = CALCULATE (
    FIRSTNONBLANK ( Invoice[Flag], 1 ),
    FILTER ( ALL ( Invoice ), Invoice[Job ID] = Job[Job Id] )
)
   

But some rows are getting misclassified here.

 

Any other way to handle this?

 

Thanks

Super User
Super User

Re: Lookup with switch case

@SaudMeethal

Well, first we'll need to clarify what you want to do when there are several different flags for a Job ID. Which one do you want to select in that case? That should have been stated in the opening question.

SaudMeethal Regular Visitor
Regular Visitor

Re: Lookup with switch case

@AlB

Yeah should've mentioned earlier, sorry about that.

There is a 1:* relation between job and invoice tables i.e. one job can have multiple invoices but not the other way around. 

 

  • If even a single occurrence of a job id in Invoice table has flag = 1, then respective job id in job table should have Status="Current".
  • If all the occurrences of a  job id in Invoice table has flag = 0, then respective job id in job table should have Status="Old".
  • If job id in jobs is not there in Invoice, the "NG"

That's it

Highlighted
Super User
Super User

Re: Lookup with switch case

@SaudMeethal

 

Status =
VAR _Flag =
    CALCULATE (
        MAX(Invoices[Flag]),
        FILTER(ALL(Invoices[Job ID]),Invoices[Job ID] = Jobs[Job ID])
    )
RETURN
    SWITCH (
        _Flag,
        BLANK (), "NG",
        0, "Old",
        1, "Current"
    )

View solution in original post

Helpful resources

Announcements
Can You Solve These Challenge

Challenge: Can You Solve These?

Find out how to participate in the first Power BI 'Can You Solve These?' challenge.

Community News & Announcements

Community News & Announcements

Get your latest community news and announcements.

Virtual Launch Event

Microsoft Business Applications October Virtual Launch Event

Join us for an in-depth look at the new innovations across Dynamics 365 and the Microsoft Power Platform.

Community Kudopalooza

Win Power BI Swag with Community Kudopalooza!

Each week, complete activities and be qualified in the drawing for cool Power BI Swag.

Users Online
Currently online: 217 members 2,620 guests
Please welcome our newest community members: