Forum Discussion

theitguy's avatar
theitguy
Icon for Helper I rankHelper I
8 years ago

Group By Won't Work - How to aggregate?

Hi guys,

 

What I have:

Learning Sessions:

Participant_IDUnique_Test_IDSingle_Session_IDLaunch_DateSeconds_SpendStatusScore
1t_012098417-11-2017444incomplete0
1t_012327117-11-201724incomplete0
1t_012327217-11-2017123complete12
1t_022327319-11-2017974complete36
4t_032097023-11-2017439incomplete0
4t_042330123-11-20171complete66
5t_052093505-11-201784incomplete0
5t_062181905-11-201728incomplete0
5t_052181717-11-201772incomplete0
5t_062098317-11-2017373complete80

 

Participants:

Participant_IDNameDepartmentCodeHire_Date
1John Doe1234501-11-2017
2Max Mustermann1234501-11-2017
3John Smith1234501-11-2017
4Jan Janssen1234501-11-2017
5John Blow12345601-11-2017

 

Want I want:

  • Measure1: For each test of a participant, I want the sum of [Seconds_Spend], e.g. for participant "1" and test with id "t_01" I want "591"
  • Measure2: For each test of a participant, I want the last entry of [Score], e.g. for participant "1" and test with id "t_01" I want to get "12"

Unfortunately, I cannot use GroupBy because multiple columns cannot be converted to a scalar value. Do I have to change my database design to achieve what I want?

6 Replies

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

    Hi theitguy, Just a query here are all the fields coming from same table ? 

    • theitguy's avatar
      theitguy
      Icon for Helper I rankHelper I

      Hi Hardik,

       

      the fields from the Learning Sessions are from the same table, yes.

      Orginally, I duplicated the Learning Sessions-Query (by referencing the original) and did the grouping in the new table which worked very well by using power query formulas. It was easy to group the sessions into tests and get the desired values.

       

      But today I noticed, that my colleagues will find it hard to set filters in the future, because it is hard to identifiy whether they set filters for the table with the sessions or the aggregated table. Therefore, I am trying to do all the grouping stuff via measures.

       

      EDIT: I think, the problem is that I have to aggregate the values I get again, so that I receive a scalar value. Even if I cannot determine value on a user-test basis then. I have tried the following, but even that does not work:

      Seconds_Spend_Corrected_Grouped = VAR MYTempTable = SUMMARIZE(Learning_Sessions;Learning__Sessions["Unique_Test_ID];"Seconds";SUM(Learning__Sessions[Seconds_Spend])) RETURN AVERAGE(MyTempTable[Seconds])
  • v-yulgu-msft's avatar
    v-yulgu-msft
    Icon for Microsoft Employee rankMicrosoft Employee

    Hi theitguy,

     


    • Measure1: For each test of a participant, I want the sum of [Seconds_Spend], e.g. for participant "1" and test with id "t_01" I want "591"
    • Measure2: For each test of a participant, I want the last entry of [Score], e.g. for participant "1" and test with id "t_01" I want to get "12" 

    I am not sure how to determine the "last entry of [Score]", so in my test, I added an Index column in Query Editor mode, each time, I returned the last row (max index number) per Participant_ID per Unique_Test_ID.

     

    Please refer to below measure formulas:

    Measure1 =
    CALCULATE (
        SUM ( 'Learning Sessions'[Seconds_Spend] ),
        ALLEXCEPT (
            'Learning Sessions',
            'Learning Sessions'[Participant_ID],
            'Learning Sessions'[Unique_Test_ID]
        )
    )

    Measure2 =
    CALCULATE (
        SUM ( 'Learning Sessions'[Score] ),
        FILTER (
            'Learning Sessions',
            'Learning Sessions'[Index]
                = CALCULATE (
                    MAX ( 'Learning Sessions'[Index] ),
                    ALLEXCEPT (
                        'Learning Sessions',
                        'Learning Sessions'[Participant_ID],
                        'Learning Sessions'[Unique_Test_ID]
                    )
                )
        )
    )

     

    Best regards,

    Yuliana Gu

    • theitguy's avatar
      theitguy
      Icon for Helper I rankHelper I

       Hi Yuliana v-yulgu-msft,

       

      thank you very much!

      The last row for [Score] is the max of [Single_Session_ID]. ;)

      I have got further questions to your solutions.

      • Can I filter the outcome of Measure2, for example only scores higher than 50 and those count those?
      • Can I create the average of the outcome of measure 1 afterwards?
      • v-yulgu-msft's avatar
        v-yulgu-msft
        Icon for Microsoft Employee rankMicrosoft Employee

        Hi theitguy,

         


        • Can I filter the outcome of Measure2, for example only scores higher than 50 and those count those?

        Do you want the table visual only show records where Measure2 is greater than 50? If so, you could apply the visual level filter as below:

         

         


        • Can I create the average of the outcome of measure 1 afterwards?

        Do you want to get the average outcome per Participant_ID per Unique_Test_ID? If so, please modify the formula for Measure1:

        Measure1 =
        DIVIDE (
            CALCULATE (
                SUM ( 'Learning Sessions'[Seconds_Spend] ),
                ALLEXCEPT (
                    'Learning Sessions',
                    'Learning Sessions'[Participant_ID],
                    'Learning Sessions'[Unique_Test_ID]
                )
            ),
            CALCULATE (
                COUNTROWS ( 'Learning Sessions' ),
                ALLEXCEPT (
                    'Learning Sessions',
                    'Learning Sessions'[Participant_ID],
                    'Learning Sessions'[Unique_Test_ID]
                )
            )
        )

         

        Best regards,

        Yuliana Gu