Forum Discussion

MrRong's avatar
MrRong
Frequent Visitor
2 years ago
Solved

Selectedmeasureformatstring DAX Calculation Item

 

Hi everyone,

 

I ran into an error while trying to create a Calculation Group.

 

I have a Measure:

 

As you can see, the data type depends on the CalcType.

 

I created a Test calculation group:

 

 

With Calculation items:

1) Actual

 

 

2) Actual PY

 

 

3) Variance PY

 

 

 

The Matrix visual works fine with Actual and Actual PY.

However, as soon as I created the Variance PY, the visual has this error:

 

 

It relates to the CalcType=3, FORMAT([PL_%_of_Revenue_Actual],"0.00%")

 

I have been trying to troubleshoot the error. The possible solution is Selectedmeasureformatstring DAX measure in the Dynamic Format String. 

I am unable how to apply to my Calculation Item measure.

Can someone please help?

 

 

 

Thanks very much

  • Anonymous's avatar
    Anonymous
    2 years ago

    Hi MrRong ,
    To troubleshoot this problem, this function can be used in the dynamic format of the MEASURE. This DAX function returns the format string set for the currently evaluated metric. You can then use conditional logic to set the format string dynamically based on SELECTEDMEASUREFORMATSTRING.To solve this problem, this function can be used in the dynamic format of the MEASURE. This DAX function returns the format string set for the currently evaluated metric. You can then use conditional logic to set the format string dynamically based on SELECTEDMEASUREFORMATSTRING.

     

    VAR CurrentFormatString = SELECTEDMEASUREFORMATSTRING()
    VAR CalcType = SELECTEDVALUE ( PL_header[CalcType] )
    
    RETURN
    SWITCH (
        TRUE(),
         CalcType = 1, [PL_additive_total_Actual],
         CalcType = 2, [PL_running_total_Actual],
         CalcType = 3, [PL_%_of_Revenue_Actual],
         CalcType = 4, [PL_%_of_running_Total_Actual]
        CurrentFormatString 
    )

     

    For more information on how to use , please refer to the official documentation
    SELECTEDMEASUREFORMATSTRING function (DAX) - DAX | Microsoft Learn
    For more information on calculating group formats, you can refer to these documents
    Dynamic format strings with calculation groups - SQLBI
    Controlling Format Strings in Calculation Groups - SQLBI

    Best regards

    Albert He

     

    If this post helps, then please consider Accept it as the solution to help the other members find it more quickly


     

  • Hi again MrRong

     

    I see Anonymous has also replied but I'll reply directly to your post. 

     

    1. Measure looks good 🙂

    2. The measure's dynamic format string looks good 🙂

    3. The calculation items don't look right.

    • The calculation item expressions for Actual, Actual PY and Variance PY should remain unchanged from your original version, i.e. including SELECTEDMEASURE() within the expressions.
    • However, you should enable Dynamic format string for each calculation item and set it to SELECTEDMEASUREFORMATSTRING().
    • Generally speaking, it would only make sense to use SELECTEDMEASUREFORMATSTRING() within the Format string expression, not the calculation item expression itself.
    • The overall purpose of my suggestions were to ensure the measure (with calculation items applied) returns numerical values, and the formatting is controlled solely by format strings.

     

    Sample screenshots:

     

6 Replies

  • Hi MrRong 

    Yes, I believe you're correct in identifying the issue, and part of the solution (dynamic format string) 🙂

    The issue is:

    1. PL_Total_Amount_Actual_2 returns a text value for CalcType = 3 or CalcType =4.
    2. In this case, when the calculation item "Variance PY" is applied to this measure, the text values containing the "%" character cannot be cast as numbers, so an error is returned.

    My recommendation would be to:

    1. Adjust the PL_Total_Amount_Actual_2 measure so that it always returns a numerical value:

     

    PL_Total_Amount_Actual_2 =
    VAR CalcType =
        SELECTEDVALUE ( PL_header[CalcType] )
    VAR DisplayDetailCode =
        SELECTEDVALUE ( PL_header[Detail] )
    VAR isSubHeaderVisible =
        ISFILTERED ( PL_accounts[Subheader] )
    VAR Result =
        SWITCH (
            TRUE (),
            isSubHeaderVisible = TRUE ()
                && DisplayDetailCode = 0, BLANK (),
            CalcType = 1, [PL_additive_total_Actual],
            CalcType = 2, [PL_running_total_Actual],
            CalcType = 3, [PL_%_of_Revenue_Actual],
            CalcType = 4, [PL_%_of_running_Total_Actual]
        )
    RETURN
        Result

     

    2. Give the PL_Total_Amount_Actual_2 measure a dynamic format string similar to this:

     

    VAR DefaultFormat = "#,##0;(#,##0);-" -- change as needed
    VAR PercentageFormat = "0.00%"
    VAR CalcType =
    	SELECTEDVALUE ( PL_header[CalcType] )
    VAR DisplayDetailCode =
    	SELECTEDVALUE ( PL_header[Detail] )
    VAR isSubHeaderVisible =
    	ISFILTERED ( PL_accounts[Subheader] )
    VAR Result =
    	SWITCH (
    		TRUE (),
    		-- This first condition can be omitted if you like, since measure is blank
    		isSubHeaderVisible = TRUE () && DisplayDetailCode = 0, BLANK (),
    		CalcType IN { 1, 2 }, DefaultFormat,
    		CalcType IN { 3, 4 }, PercentageFormat
    	)
    RETURN
    	Result

     

    3.  For the calculation group, ensure that each calculation item has format string expression

     

    SELECTEDMEASUREFORMATSTRING ()

     

     

    Does this fix it for you?

    Please post back if needed.

     

    Regards

  • MrRong's avatar
    MrRong
    Frequent Visitor

    Hi OwenAuger ,

     

    Thanks for helping me out.

     

    I followed your instructions but it is still giving me the error.

     

    1) Measure is updated:

     

     

    2) PL_Total_Amount_Actual_2 measure a dynamic format string

     

     

    3) Each Calculation Item have format string

     

     

     

     

     

    The error in the Matrix visual is:

     

     

    Do my Calculation Items have correct DAX measure?

     

    I wonder that if we need a DAX in the Dynamic format string for the 3 Calculation Items?

     

     

    Thanks for your help,

     

     

     

    • OwenAuger's avatar
      OwenAuger
      Super User

      Hi again MrRong

       

      I see Anonymous has also replied but I'll reply directly to your post. 

       

      1. Measure looks good 🙂

      2. The measure's dynamic format string looks good 🙂

      3. The calculation items don't look right.

      • The calculation item expressions for Actual, Actual PY and Variance PY should remain unchanged from your original version, i.e. including SELECTEDMEASURE() within the expressions.
      • However, you should enable Dynamic format string for each calculation item and set it to SELECTEDMEASUREFORMATSTRING().
      • Generally speaking, it would only make sense to use SELECTEDMEASUREFORMATSTRING() within the Format string expression, not the calculation item expression itself.
      • The overall purpose of my suggestions were to ensure the measure (with calculation items applied) returns numerical values, and the formatting is controlled solely by format strings.

       

      Sample screenshots:

       

      • MrRong's avatar
        MrRong
        Frequent Visitor
        Hi Owen, You are spot on the solution. It is great how you troubleshoot the issue, it is very professional. Thanks again, Jimmy Truong
  • Anonymous's avatar
    Anonymous
    Not applicable

    Hi MrRong ,
    To troubleshoot this problem, this function can be used in the dynamic format of the MEASURE. This DAX function returns the format string set for the currently evaluated metric. You can then use conditional logic to set the format string dynamically based on SELECTEDMEASUREFORMATSTRING.To solve this problem, this function can be used in the dynamic format of the MEASURE. This DAX function returns the format string set for the currently evaluated metric. You can then use conditional logic to set the format string dynamically based on SELECTEDMEASUREFORMATSTRING.

     

    VAR CurrentFormatString = SELECTEDMEASUREFORMATSTRING()
    VAR CalcType = SELECTEDVALUE ( PL_header[CalcType] )
    
    RETURN
    SWITCH (
        TRUE(),
         CalcType = 1, [PL_additive_total_Actual],
         CalcType = 2, [PL_running_total_Actual],
         CalcType = 3, [PL_%_of_Revenue_Actual],
         CalcType = 4, [PL_%_of_running_Total_Actual]
        CurrentFormatString 
    )

     

    For more information on how to use , please refer to the official documentation
    SELECTEDMEASUREFORMATSTRING function (DAX) - DAX | Microsoft Learn
    For more information on calculating group formats, you can refer to these documents
    Dynamic format strings with calculation groups - SQLBI
    Controlling Format Strings in Calculation Groups - SQLBI

    Best regards

    Albert He

     

    If this post helps, then please consider Accept it as the solution to help the other members find it more quickly