Forum Discussion

JarnoVisser's avatar
JarnoVisser
Helper I
7 years ago
Solved

Summarise table with condition

Hello

 

I have a transaction table with the following data:

 

Transaction dateAmountUrgencyCustomer
1-1-201750higha
30-5-2017100mediuma
30-9-201730lowa
1-1-201845mediuma
20-2-201855lowa

 

I want to summarise the data per year per urgency. Besides that each customer should be allocated to the transaction with the highest urgency within a year.

 

So finally I need to have:

 

 20172018
High1800
Medium0100
Low00

 

I would appreciate your help!

Regards,

Jarno

  • AkhilAshok's avatar
    AkhilAshok
    7 years ago

    If you follow the Star Schema approach which LivioLanzo showed, then you can also use the below Calculated column HighestUrgencyID in Data table, and create a relationship between Urgency[UrgencyID] & Data[HighestUrgencyID]. This way your measure will be just SUM(Data[Amount]).

     

    HighestUrgencyID =
    VAR TransactionYear =
        RELATED ( 'Calendar'[Year] )
    VAR CurrentCustomer = 'Data'[Customer]
    RETURN
        CALCULATE (
            MAX ( 'Data'[UrgencyID] ),
            FILTER (
                'Data',
                'Data'[Customer] = CurrentCustomer
                    && RELATED ( 'Calendar'[Year] ) = TransactionYear
            )
        )

5 Replies

  • Hi JarnoVisser

     

    try like this:

     

    Measure =
    IF (
        HASONEVALUE ( Urgencies[Urgency] ),
        SUMX (
            VALUES ( 'Calendar'[Year] ),
            SUMX (
                VALUES ( Customers[Customer] ),
                IF (
                    CALCULATE (
                        MAX ( Data[Urgency ID] ),
                        ALL ( Urgencies )
                    ) = SELECTEDVALUE ( Urgencies[Urgency ID] ),
                    CALCULATE (
                        SUM ( Data[Amount] ),
                        ALL ( Urgencies )
                    ),
                    0
                )
            )
        )
    )

     

     

     

  • v-yulgu-msft's avatar
    v-yulgu-msft
    Microsoft Employee

    Hi JarnoVisser,

     

    Add calculated columns:

    Rank =
    IF ( Table2[Urgency] = "High", 1, IF ( Table2[Urgency] = "medium", 2, 3 ) )
    
    Sum amount =
    IF (
        Table2[Rank]
            = CALCULATE (
                MIN ( Table2[Rank] ),
                ALLEXCEPT ( Table2, Table2[Transaction date].[Year] )
            ),
        CALCULATE (
            SUM ( Table2[Amount] ),
            ALLEXCEPT ( Table2, Table2[Transaction date].[Year] )
        ),
        0
    )
    

     

    Use a Matrix to display data.

    Best regards,

    Yuliana Gu

    • JarnoVisser's avatar
      JarnoVisser
      Helper I

      Hi Yuliana,


      Thank you for your reply!

      It works fine for only one customer. But in my real data I have multiple customers like:

      Transaction dateAmountUrgencyCustomer
      1-1-201750higha
      30-5-2017100mediuma
      30-9-201730lowa
      1-1-201845mediuma
      20-2-201855lowa
      1-1-201750lowb
      30-5-2017100lowb
      30-9-201730lowb
      1-1-201845mediumb
      20-2-201855highb

       

      And with multiple customers it gives no amount for par example customer b in 2017. Do you have a solution for that?

      Thanks in advance!

       

      Kind regards,

      Jarno

      • AkhilAshok's avatar
        AkhilAshok
        Solution Sage

        If you follow the Star Schema approach which LivioLanzo showed, then you can also use the below Calculated column HighestUrgencyID in Data table, and create a relationship between Urgency[UrgencyID] & Data[HighestUrgencyID]. This way your measure will be just SUM(Data[Amount]).

         

        HighestUrgencyID =
        VAR TransactionYear =
            RELATED ( 'Calendar'[Year] )
        VAR CurrentCustomer = 'Data'[Customer]
        RETURN
            CALCULATE (
                MAX ( 'Data'[UrgencyID] ),
                FILTER (
                    'Data',
                    'Data'[Customer] = CurrentCustomer
                        && RELATED ( 'Calendar'[Year] ) = TransactionYear
                )
            )