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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
tc_WII
Frequent Visitor

DAX Calculating on Individual Level

Hello,

 

I have a DAX measure like Below:

 

VAR _CY     = CALCULATE([Revenue], dimCustomer[BusinessType] = "Lost")
    VAR _PY     = CALCULATE([Revenue], DATEADD(dateTable[Date],-1,YEAR),dimCustomer[BusinessType]="Lost")
    VAR Result  = IF(_PY > _CY, _PY - _CY)
    RETURN    Result

 

I am having one issue here. When I have a table with Month and customerNo. It gives me correct result for each customer. But when I only need the whole month overview, it is first calculating  the whole month CY then Whole Month PY, then if PY is smaller, it comes blank. But I want to calculate on each customer and add those. 

 

lets say, i have customerNo 1, 2, 3.

 

CustomerNoCYPYCYvsPY
110001200200
2100008000"Blank"
3500600100
Total115009800(Showing Blank but I need 300)
 

when I see all customer result, it first calculates sum of CY that is 11500 and Sum PY 9800. And it gives CYvsPY 0.

 

but I want it to calculate on individual level. so that on the total card it should give me 300

 

I hope I could clarify the question. Please help me out

 
1 ACCEPTED SOLUTION
johnt75
Super User
Super User

Try

CY vs PY =
SUMX (
    VALUES ( 'dimCustomer'[Customer ID] ),
    VAR _CY =
        CALCULATE ( [Revenue], dimCustomer[BusinessType] = "Lost" )
    VAR _PY =
        CALCULATE (
            [Revenue],
            DATEADD ( dateTable[Date], -1, YEAR ),
            dimCustomer[BusinessType] = "Lost"
        )
    VAR Result =
        IF ( _PY > _CY, _PY - _CY )
    RETURN
        Result
)

View solution in original post

3 REPLIES 3
johnt75
Super User
Super User

Try

CY vs PY =
SUMX (
    VALUES ( 'dimCustomer'[Customer ID] ),
    VAR _CY =
        CALCULATE ( [Revenue], dimCustomer[BusinessType] = "Lost" )
    VAR _PY =
        CALCULATE (
            [Revenue],
            DATEADD ( dateTable[Date], -1, YEAR ),
            dimCustomer[BusinessType] = "Lost"
        )
    VAR Result =
        IF ( _PY > _CY, _PY - _CY )
    RETURN
        Result
)

@johnt75 

 

Thank you for your solution. This worked perfectly fine. Just for the sake of knowledge, do you know why my below solution did not work? I only defined these VAR before SUMX.

 

 VAR _CY     = CALCULATE([Revenue], dimCustomer[BusinessType] = "Lost")
    VAR _PY     = CALCULATE([Revenue], DATEADD(dateTable[Date],-1,YEAR),dimCustomer[BusinessType]="Lost")
    VAR Result  = IF(_PY > _CY, _PY - _CY)
    RETURN    SUMX(VALUES(dimCustomer[Customer No]),Result)

Variables in DAX aren't really variables, they're constants. They're only calculated once, when they are defined, no matter how many times they are used. So because you declared the variables outside the SUMX they were only calculated once, at the grand total level, and then these total values were used for each iteration over the customers.

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.