Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
3 years ago
Solved

Show sum in table column based on condition

Hello,

I have the following table in Power BI and i am using a slicer for the "Region" column.

  1. If i select Region = YUN, then the sum in the "Total" column is correct, since the currencies are the same, that is, USD.
  2. If i select Region = TOD, then the sum in the "Total" column is not correct, since it is adding up two different currencies.

The problem is that the sum shown at the end of the "Total" column is meaningless if the currencies are not the same in all the rows. I am trying to display the sum in the "Total" column only if the currencies are the same, otherwise hide the sum value. Is this possible? Any help is much appreciated!

 

Document IDRegionTotalCurrency
3998TOD6485.52NOK
4050TOD87889USD
4050WAP89367.5DKK
4060HEP27050.73EUR
4139YUN4785.25USD
4145WAP720DKK
4149HEP583EUR
4157WAP15204CAD
4160YUN4197USD
4160HEP44924EUR
4164WAP1297.59NOK

 

 

 

 

  • Here is one way.

    First the model:

    Include slicers from the dimension tables and use the dimension table fields in the visual. Next create this measure:

     

    Filter Slicers = 
    COUNTROWS(RELATEDTABLE(fTable))

     

    Add this measure to the filter pane for each slicer and set the value to greater or equal to 1. This will filter each slicer to show the complementary values for each field only.

    Now create the measure to show the total only when one currencies is displayed (if there are two or more currencias, the rows are displayed but not the total).

     

    Filter Sum =
    VAR _Rows =
        IF (
            ISBLANK ( [Sum Total] ),
            BLANK (),
            CALCULATE (
                DISTINCTCOUNT ( 'fTable'[Currency] ),
                ALLEXCEPT ( fTable, 'Region Table'[dRegion] )
            )
        ) //Calculates the distincount of currencies by region
    RETURN
        IF (
            ISFILTERED ( 'Currency Tbale'[dCurrency] ),
            [Sum Total],
            //if a currency is selected, the sum is returned
            IF (
                _Rows > 1,
                IF ( ISINSCOPE ( 'Region Table'[dRegion] ), [Sum Total] ) // will not return a total if a currency is not selected and there are more than 1 currencies by region
                ,
                [Sum Total]
            )
        )
    //will return the sum if a region is selected with only 1 currency.
    

     

    and you will get:

     

     

    Sample PBIX file attached

  • For that you need this measure:

     

    Sum converted to euros if =
    VAR _Rows =
        IF (
            ISBLANK ( [Sum Total] ),
            BLANK (),
            CALCULATE (
                DISTINCTCOUNT ( 'fTable'[Currency] ),
                ALLEXCEPT ( fTable, 'Region Table'[dRegion] )
            )
        )
    VAR _NumCurr =
        CALCULATE (
            DISTINCTCOUNT ( 'Currency Tbale'[dCurrency] ),
            ALLSELECTED ( 'Currency Tbale'[dCurrency] )
        )
    RETURN
        IF ( _NumCurr = 1, [Sum Total], IF ( _Rows > 1, [Sum Euro], [Sum Total] ) )
    

     

    (I've added an extra row with the region "Narnia" in USD to check the measure if more than one region is selected)

    I have also altered the [Filter Sum] measure for the original table to account for the posibility of the selection of more than one currency:

     

     

     

    Filter Sum =
    VAR _Rows =
        IF (
            ISBLANK ( [Sum Total] ),
            BLANK (),
            CALCULATE (
                DISTINCTCOUNT ( 'fTable'[Currency] ),
                ALLEXCEPT ( fTable, 'Region Table'[dRegion] )
            )
        )
    VAR _NumCurr =
        CALCULATE (
            DISTINCTCOUNT ( fTable[Currency] ),
            ALLSELECTED ( 'Currency Tbale'[dCurrency] )
        )
    RETURN
        IF (
            AND ( NOT ( ISINSCOPE ( 'Region Table'[dRegion] ) ), _NumCurr <> 1 ),
            BLANK (),
            IF (
                ISFILTERED ( 'Currency Tbale'[dCurrency] ),
                [Sum Total],
                IF (
                    _Rows > 1,
                    IF ( ISINSCOPE ( 'Region Table'[dRegion] ), [Sum Total] ),
                    [Sum Total]
                )
            )
        )
    

     

     

     

     

     

     

    New file attached

    (PS, if this works for you, please mark this post as the solution instead of the previous one, since this one covers the possibility of multiple currency selections for both the clustered column and table visuals!)

  • Ok. So thanks to the new requirements, I've come up with a much simpler solution to the measures needed:

    Filter Sum =
    VAR _Rows =
        CALCULATE (
            DISTINCTCOUNT ( fTable[Currency] ),
            ALLSELECTED ( 'Calendar'[Date] )
        )
    RETURN
        IF ( _rows > 1, BLANK (), [Sum Total] )
    
    Sum converted to euros if =
    VAR _Rows =
        CALCULATE (
            DISTINCTCOUNT ( fTable[Currency] ),
            ALLSELECTED ( 'Calendar'[Date] ),
            ALLSELECTED ( fTable )
        )
    RETURN
        IF ( _Rows = 1, [Sum Total], [Sum Euro] )
    

    and consequently simplified all the other Conditional Formatting and title measures.

    New file attached

12 Replies

  • PaulDBrown's avatar
    PaulDBrown
    Icon for Community Champion rankCommunity Champion

    Here is one way.

    First the model:

    Include slicers from the dimension tables and use the dimension table fields in the visual. Next create this measure:

     

    Filter Slicers = 
    COUNTROWS(RELATEDTABLE(fTable))

     

    Add this measure to the filter pane for each slicer and set the value to greater or equal to 1. This will filter each slicer to show the complementary values for each field only.

    Now create the measure to show the total only when one currencies is displayed (if there are two or more currencias, the rows are displayed but not the total).

     

    Filter Sum =
    VAR _Rows =
        IF (
            ISBLANK ( [Sum Total] ),
            BLANK (),
            CALCULATE (
                DISTINCTCOUNT ( 'fTable'[Currency] ),
                ALLEXCEPT ( fTable, 'Region Table'[dRegion] )
            )
        ) //Calculates the distincount of currencies by region
    RETURN
        IF (
            ISFILTERED ( 'Currency Tbale'[dCurrency] ),
            [Sum Total],
            //if a currency is selected, the sum is returned
            IF (
                _Rows > 1,
                IF ( ISINSCOPE ( 'Region Table'[dRegion] ), [Sum Total] ) // will not return a total if a currency is not selected and there are more than 1 currencies by region
                ,
                [Sum Total]
            )
        )
    //will return the sum if a region is selected with only 1 currency.
    

     

    and you will get:

     

     

    Sample PBIX file attached

    • Anonymous's avatar
      Anonymous
      Not applicable

      Hi PaulDBrown Thanks for your reply! I have a related question about presenting the same data in a chart, so that:

      1. if the currencies do not match, then show the Y-axis as "Converted to EUR", else

      2. if the currencies are the same, then show the Y-axis as the common currency.

      Is this possible? Any help is much appreciated!

       

      Document IDRegionTotalCurrencyConverted to EUR
      3998TOD6485.52NOK621.58
      4050TOD87889USD90233.88
      4050WAP89367.5DKK12014.28
      4060HEP27050.73EUR27050.73
      4139YUN4785.25USD4912.92
      4145WAP720DKK96.79
      4149HEP583EUR583
      4157WAP15204CAD11356.44
      4160YUN4197USD4308.98
      4160HEP44924EUR44924
      4164WAP1297.59NOK124.36

       

       

       

      • PaulDBrown's avatar
        PaulDBrown
        Icon for Community Champion rankCommunity Champion

        For that you need this measure:

         

        Sum converted to euros if =
        VAR _Rows =
            IF (
                ISBLANK ( [Sum Total] ),
                BLANK (),
                CALCULATE (
                    DISTINCTCOUNT ( 'fTable'[Currency] ),
                    ALLEXCEPT ( fTable, 'Region Table'[dRegion] )
                )
            )
        VAR _NumCurr =
            CALCULATE (
                DISTINCTCOUNT ( 'Currency Tbale'[dCurrency] ),
                ALLSELECTED ( 'Currency Tbale'[dCurrency] )
            )
        RETURN
            IF ( _NumCurr = 1, [Sum Total], IF ( _Rows > 1, [Sum Euro], [Sum Total] ) )
        

         

        (I've added an extra row with the region "Narnia" in USD to check the measure if more than one region is selected)

        I have also altered the [Filter Sum] measure for the original table to account for the posibility of the selection of more than one currency:

         

         

         

        Filter Sum =
        VAR _Rows =
            IF (
                ISBLANK ( [Sum Total] ),
                BLANK (),
                CALCULATE (
                    DISTINCTCOUNT ( 'fTable'[Currency] ),
                    ALLEXCEPT ( fTable, 'Region Table'[dRegion] )
                )
            )
        VAR _NumCurr =
            CALCULATE (
                DISTINCTCOUNT ( fTable[Currency] ),
                ALLSELECTED ( 'Currency Tbale'[dCurrency] )
            )
        RETURN
            IF (
                AND ( NOT ( ISINSCOPE ( 'Region Table'[dRegion] ) ), _NumCurr <> 1 ),
                BLANK (),
                IF (
                    ISFILTERED ( 'Currency Tbale'[dCurrency] ),
                    [Sum Total],
                    IF (
                        _Rows > 1,
                        IF ( ISINSCOPE ( 'Region Table'[dRegion] ), [Sum Total] ),
                        [Sum Total]
                    )
                )
            )
        

         

         

         

         

         

         

        New file attached

        (PS, if this works for you, please mark this post as the solution instead of the previous one, since this one covers the possibility of multiple currency selections for both the clustered column and table visuals!)

  • Dinesh_Suranga's avatar
    Dinesh_Suranga
    Icon for Continued Contributor rankContinued Contributor

    Anonymous 

    Hi,

    create a measure with SUMX to get the total.

    thank you.