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

Data Days is here! Join us now for 60+ days of learning, challenges, and connection. Learn more

Reply
rstover_atx
Frequent Visitor

Actuals vs Plan using Treatas and Summarize

I have a model I am building to compare Actual Sales Bookings from Salesforce vs Budget. The dimensional data from our actuals table is very robust as it leverages several key salesforce objects like opportunities and accounts. The plan data, however, is only constructed in excel and at a minimal granularity (Booking Event, Product Family, and Date). To Calculate the Plan Measure, I use the following formula:

 

 

Booking PL = 

CALCULATE (
    SWITCH (
        [Selected Calculation],
        1, SUM(FCT_PLAN_BOOKINGS[VALUE]),
        2, CALCULATE ( SUM(FCT_PLAN_BOOKINGS[VALUE]), DATESQTD ( Periods[Date] ) ),
        3, CALCULATE ( SUM(FCT_PLAN_BOOKINGS[VALUE]), DATESYTD ( Periods[Date] ) )
    ),
    TREATAS(
        SUMMARIZE(
            FCT_SFDC_BOOKINGS,
            FCT_SFDC_BOOKINGS[PRODUCT_FAMILY],
            FCT_SFDC_BOOKINGS[BOOKING_SUMMARY],
            FCT_SFDC_BOOKINGS[BOOKING_DATE]),
            FCT_PLAN_BOOKINGS[PRODUCT_FAMILY],
            FCT_PLAN_BOOKINGS[CATEGORY],
            FCT_PLAN_BOOKINGS[DATE]
    )
)
            

 

 

The Issue: When a given product family.booking_summary.date value is blank from the actuals (so effectively $0)  ,  the measure above does not return the total Plan value. 

 

Truncated Data Set ( FCT_PLAN_BOOKINGS)

 

Product FamilyDateCategoryValue
TR - MarketView6/1/2021Churn       (192,983.60)
TR - Datagenic6/1/2021Churn           (6,077.66)

 

Truncated Date Set (FCT_SFDC_BOOKINGS)

 

 

Product FamilyDateBooking_summaryBooking_value
TR - MarketView6/1/2021Churn       (90,961.49)

 

Sample Visual

Treatas Example.PNG

 

As you can see, because the TR - Dategenic family doesn't have an actual, it filters out the Budget value. 

 

Is there a modeling approach I am missing here?

 

Here is the current Data Model 

Bookings Model.PNG

3 REPLIES 3
rstover_atx
Frequent Visitor

I ended up utilizing SQLBI's guide for returning zero. 

 

Creating this measure did the trick:

 

Booking Value = 
VAR FirstBookingValue = 
    CALCULATE( MIN(FCT_SFDC_BOOKINGS[BOOKING_DATE]), ALLEXCEPT( FCT_SFDC_BOOKINGS, 'FCT_SFDC_BOOKINGS'[OPPORTUNITY_PRODUCT_NAME] ))
VAR LastBookingValue = 
    CALCULATE( MAX(FCT_SFDC_BOOKINGS[BOOKING_DATE]), REMOVEFILTERS())
VAR CurrentDate = MAX(Periods[Date])
VAR ForceZero = FirstBookingValue <= CurrentDate && CurrentDate <= LastBookingValue
VAR Amt = [Booking AC] + if (ForceZero, 0)
Return
    Amt

 

m3tr01d
Continued Contributor
Continued Contributor

@rstover_atx You could try replacing your big Treatas expression by these two 

TREATAS( VALUES( FCT_SFDC_BOOKINGS[PRODUCT_FAMILY] ), FCT_PLAN_BOOKINGS[PRODUCT_FAMILY] ),
TREATAS( VALUES( FCT_SFDC_BOOKINGS[BOOKING_SUMMARY] ), FCT_PLAN_BOOKINGS[CATEGORY] )

 

daxer-almighty
Solution Sage
Solution Sage

Your TREATAS is incorrect syntactically. The measure should not even be accepted in PBI.

 

https://dax.guide/treatas 

Helpful resources

Announcements
Fabric Data Days is here Carousel

Fabric Data Days 2026

Don't miss out on Data Days, June 15 through August 7. Learn Fabric, Power BI, SQL, AI and more.

May Power BI Update Carousel

Power BI Monthly Update - May 2026

Check out the May 2026 Power BI update to learn about new features.

Power BI DataViz World Championships carousel

Power BI DataViz World Championships - June 2026

A new Power BI DataViz World Championship is coming this June! Don't miss out on submitting your entry.