Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
8 years ago
Solved

Calculating Percentage using Groupby

I need to make a table with the percentage of compliance per person. Percentage of compliance is equivalent to the number of YES over the number of rows related to a particular person. How am I suppose to compute this using DAX? I have the idea to use GROUPBY but I don't exactly know how to do it. The data kind of looks like this: 

 Thanks!

  • Zubair_Muhammad's avatar
    Zubair_Muhammad
    8 years ago

    Anonymous

     

    If you directly want a calculated table as an OUTPUT,,, then goto Modelling Tab>>New Table and use this formula

     

    Table =
    SUMMARIZE (
        TableName,
        TableName[Person],
        "%age of compliance",
        VAR totalCountforaperson =
            CALCULATE (
                COUNT ( TableName[Person] ),
                ALLEXCEPT ( TableName, TableName[Person] )
            )
        VAR CountwithYes =
            CALCULATE (
                COUNT ( TableName[Person] ),
                FILTER (
                    ALLEXCEPT ( TableName, TableName[Person] ),
                    TableName[Compliance] = "Yes"
                )
            )
        RETURN
            DIVIDE ( CountwithYes, totalCountforaperson )
    )

     

     

  • Hi Anonymous

     

    The below calculated table will gget you pretty close

     

    New Table = 
        ADDCOLUMNS(
            SUMMARIZECOLUMNS(
                'Table1'[Person],
                "Rows Total",COUNTROWS('Table1') ,
                "Compliant",COUNTROWS(Filter('Table1','Table1'[Compliance]="Yes"))+0
                ),
                "Ratio" , DIVIDE([Compliant],[Rows Total])
                )

11 Replies

  • Zubair_Muhammad's avatar
    Zubair_Muhammad
    Community Champion

    HI Anonymous

     

    Try this

     

    =
    VAR totalCountforaperson =
        CALCULATE (
            COUNT ( TableName[Person] ),
            ALLEXCEPT ( TableName, TableName[Person] )
        )
    VAR CountwithYes =
        CALCULATE (
            COUNT ( TableName[Person] ),
            FILTER (
                ALLEXCEPT ( TableName, TableName[Person] ),
                TableName[Compliance] = "Yes"
            )
        )
    RETURN
        DIVIDE ( CountwithYes, totalCountforaperson )
    • Anonymous's avatar
      Anonymous
      Not applicable

      Hi Zubair, thanks for replying! Is the formula above supposed to return a table?

      • Zubair_Muhammad's avatar
        Zubair_Muhammad
        Community Champion

        Hi,

         

        No. Its a MEASURE.

         

        If you put it in a TABLE VISUAL alongwith Names of Persons you will get the desired percentages

         

        Do you need a calcuated table?