Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Be one of the first to start using Fabric Databases. View on-demand sessions with database experts and the Microsoft product team to learn just how easy it is to get started. Watch now

Reply
Daniel_L
Frequent Visitor

Verifying a two step invoice approval process

Hello community,

 

How would you solve this case where we need to verify whether a two step invoice approval process is legitimate or not?

 

I have two tables containing information about given approvals in phase A and phase B, and want to see if the invoices have been approved in accordance with the regulation.

 

Rules:

  • If there is one A approver and one B approver, they cannot be the same person
  • If there is one A approver then A is allowed to be one of many B approvers
  • If there are more than one A approver then none of them can be a B approver
  • If there are more than one A approver and more than one B approver, then at least one B approver must not be a A approver.

 

An alternate way of declaring the rules: Remove all B approvers from the A approvers set; if there are any remaining approvers then the process is legitimate.

 

 

Sample tables:

 

Phase A

InvoiceID_A

UserID_A

A

John

A

Sarah

A

Brad

B

Brad

C

Brad

D

Jane

D

Sarah

E

Jane

 

Phase B

InvoiceID_B

UserID_B

A

Sarah

B

John

B

Sarah

C

Sarah

C

Brad

D

John

D

Sarah

D

Brad

D

Jane

E

Jane

 

Expected Result

InvoiceID

(Result_UserIDs)

Result

A

(null)

False

B

John, Sarah

True

C

Sarah

True

D

John, Brad

True

E

(null)

False

 

Best Regards,

Daniel

1 ACCEPTED SOLUTION
sturlaws
Resident Rockstar
Resident Rockstar

Hi @Daniel_L 

Will this strategy work for you?


First create a new table with the distinct InvoiceIDs like this

InvoiceID =
DISTINCT (
    UNION ( VALUES ( 'Phase A'[InvoiceID_A] ); VALUES ( 'Phase B'[InvoiceID_B] ) )
)

Then create a new calculated column using this code

Number of =
VAR phaseA_approvers =
    CALCULATETABLE (
        VALUES ( 'Phase A'[UserID_A] );
        FILTER ( VALUES ( 'Phase A' ); 'Phase A'[InvoiceID_A] = InvoiceID[InvoiceID] )
    )
VAR phaseB_approvers =
    CALCULATETABLE (
        VALUES ( 'Phase B'[UserID_B] );
        FILTER ( VALUES ( 'Phase B' ); 'Phase B'[InvoiceID_B] = InvoiceID[InvoiceID] )
    )
VAR phaseB_approvers_not_approvers_phaseA =
    FILTER ( phaseB_approvers; NOT ( [UserID_B] IN phaseA_approvers ) )
RETURN
    IF (
        COUNTROWS ( phaseB_approvers_not_approvers_phaseA ) > 0;
        TRUE ();
        FALSE ()
    )

Cheers,
Sturla


If this post helps, then please consider Accepting it as the solution. Kudos are nice too.

View solution in original post

1 REPLY 1
sturlaws
Resident Rockstar
Resident Rockstar

Hi @Daniel_L 

Will this strategy work for you?


First create a new table with the distinct InvoiceIDs like this

InvoiceID =
DISTINCT (
    UNION ( VALUES ( 'Phase A'[InvoiceID_A] ); VALUES ( 'Phase B'[InvoiceID_B] ) )
)

Then create a new calculated column using this code

Number of =
VAR phaseA_approvers =
    CALCULATETABLE (
        VALUES ( 'Phase A'[UserID_A] );
        FILTER ( VALUES ( 'Phase A' ); 'Phase A'[InvoiceID_A] = InvoiceID[InvoiceID] )
    )
VAR phaseB_approvers =
    CALCULATETABLE (
        VALUES ( 'Phase B'[UserID_B] );
        FILTER ( VALUES ( 'Phase B' ); 'Phase B'[InvoiceID_B] = InvoiceID[InvoiceID] )
    )
VAR phaseB_approvers_not_approvers_phaseA =
    FILTER ( phaseB_approvers; NOT ( [UserID_B] IN phaseA_approvers ) )
RETURN
    IF (
        COUNTROWS ( phaseB_approvers_not_approvers_phaseA ) > 0;
        TRUE ();
        FALSE ()
    )

Cheers,
Sturla


If this post helps, then please consider Accepting it as the solution. Kudos are nice too.

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!

Dec Fabric Community Survey

We want your feedback!

Your insights matter. That’s why we created a quick survey to learn about your experience finding answers to technical questions.

ArunFabCon

Microsoft Fabric Community Conference 2025

Arun Ulag shares exciting details about the Microsoft Fabric Conference 2025, which will be held in Las Vegas, NV.

December 2024

A Year in Review - December 2024

Find out what content was popular in the Fabric community during 2024.