Forum Discussion

jpattamthanam's avatar
jpattamthanam
Frequent Visitor
5 years ago
Solved

A simple way for COUNTIF function in power query

Hello Community,

I have a data set as shown below. Is there a way to have this done in power query editor. Column A and B is the Data input and Column C and D are the results expected.

 

 

Every help in this regard is very much appreciated. Thanks in advance

 

JP

  • JW_van_Holst's avatar
    JW_van_Holst
    5 years ago

    Second column with countif added. 

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlLSUTIGYkMwjtWBiMBEjcEipkCWKVTUCEXEBIzBugwMQCZYWqKYZQFiggmEXoQYVHcsAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [C1 = _t, C2 = _t, C1Desired = _t, C2Desired = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"C1", Int64.Type}, {"C2", Int64.Type}, {"C1Desired", Int64.Type}, {"C2Desired", Int64.Type}}),
        AddedIndex = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1, Int64.Type),
        #"Added Custom" = Table.AddColumn(AddedIndex, "SUMIF_1_argument", 
            each if [Index] = 0 
            then 
                {AddedIndex{[Index]}[C1], AddedIndex{[Index]}[C2]}
            else 
                {AddedIndex{[Index]-1}[C1], AddedIndex{[Index]-1}[C2],
                AddedIndex{[Index]}[C1], AddedIndex{[Index]}[C2]}),
        #"Added Custom1" = Table.AddColumn(#"Added Custom", "SUMIF_2_argumentC1", each #"Added Custom"{[Index]}[C1]),
        #"Added Custom2" = Table.AddColumn(#"Added Custom1", "ResultC1", (FirstIterator)=> List.Count( List.Select( FirstIterator[SUMIF_1_argument], each _ = FirstIterator[SUMIF_2_argumentC1]))),
        //second column
        #"Added Custom3" = Table.AddColumn(#"Added Custom2", "SUMIF_2_argumentC2", each #"Added Custom"{[Index]}[C2]),
        #"Added Custom4" = Table.AddColumn(#"Added Custom3", "ResultC2", (FirstIterator)=> List.Count( List.Select( FirstIterator[SUMIF_1_argument], each _ = FirstIterator[SUMIF_2_argumentC2])))
    in
        #"Added Custom4"

9 Replies

  • Nice challenge!
    I have solved the first column. Number 2 is copy paste. 

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlLSUTIGYkMwjtWBiMBEjcEipkCWKVTUCEXEBIzBugwMQCZYWqKYZQFiggmEXoQYVHcsAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [C1 = _t, C2 = _t, C1D = _t, C2D = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"C1", Int64.Type}, {"C2", Int64.Type}, {"C1D", Int64.Type}, {"C2D", Int64.Type}}),
        AddedIndex = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1, Int64.Type),
        #"Added Custom" = Table.AddColumn(AddedIndex, "SUMIF_1_argument", 
            each if [Index] = 0 
            then 
                {AddedIndex{[Index]}[C1], AddedIndex{[Index]}[C2]}
            else 
                {AddedIndex{[Index]-1}[C1], AddedIndex{[Index]-1}[C2],
                AddedIndex{[Index]}[C1], AddedIndex{[Index]}[C2]}),
        #"Added Custom1" = Table.AddColumn(#"Added Custom", "SUMIF_2_argument", each #"Added Custom"{[Index]}[C1]),
        #"Added Custom2" = Table.AddColumn(#"Added Custom1", "ResultC1", (FirstIterator)=> List.Count( List.Select( FirstIterator[SUMIF_1_argument], each _ = FirstIterator[SUMIF_2_argument])))
    in
        #"Added Custom2"
    • v-kelly-msft's avatar
      v-kelly-msft
      Community Support

      Hi jpattamthanam ,

       

      Great! How about column 2?Have you also achieved column 2?If so,could you pls mark the reply as answered to let more people find the solution?

       

      Best Regards,
      Kelly

      Did I answer your question? Mark my post as a solution!

      • JW_van_Holst's avatar
        JW_van_Holst
        Resolver IV

        Second column with countif added. 

        let
            Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlLSUTIGYkMwjtWBiMBEjcEipkCWKVTUCEXEBIzBugwMQCZYWqKYZQFiggmEXoQYVHcsAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [C1 = _t, C2 = _t, C1Desired = _t, C2Desired = _t]),
            #"Changed Type" = Table.TransformColumnTypes(Source,{{"C1", Int64.Type}, {"C2", Int64.Type}, {"C1Desired", Int64.Type}, {"C2Desired", Int64.Type}}),
            AddedIndex = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1, Int64.Type),
            #"Added Custom" = Table.AddColumn(AddedIndex, "SUMIF_1_argument", 
                each if [Index] = 0 
                then 
                    {AddedIndex{[Index]}[C1], AddedIndex{[Index]}[C2]}
                else 
                    {AddedIndex{[Index]-1}[C1], AddedIndex{[Index]-1}[C2],
                    AddedIndex{[Index]}[C1], AddedIndex{[Index]}[C2]}),
            #"Added Custom1" = Table.AddColumn(#"Added Custom", "SUMIF_2_argumentC1", each #"Added Custom"{[Index]}[C1]),
            #"Added Custom2" = Table.AddColumn(#"Added Custom1", "ResultC1", (FirstIterator)=> List.Count( List.Select( FirstIterator[SUMIF_1_argument], each _ = FirstIterator[SUMIF_2_argumentC1]))),
            //second column
            #"Added Custom3" = Table.AddColumn(#"Added Custom2", "SUMIF_2_argumentC2", each #"Added Custom"{[Index]}[C2]),
            #"Added Custom4" = Table.AddColumn(#"Added Custom3", "ResultC2", (FirstIterator)=> List.Count( List.Select( FirstIterator[SUMIF_1_argument], each _ = FirstIterator[SUMIF_2_argumentC2])))
        in
            #"Added Custom4"
  • CNENFRNL's avatar
    CNENFRNL
    Community Champion

    Hi, jpattamthanam , in general, you may transform the target region (eg A1:B2 in your example) to list and use

    List.Count(List.PositionOf( list , "substring" , Occurrence.All))

     to count the occurrence of a specific string.

  • Use "Group by" on column A, and choose "Count" as the metric, but click on "advanced" and add another metric, call this one "All" and select "All Rows" as the metric. 

    After the Group is complete, expand "All" to get your original rows back, but now with the Row Count column. Do the same for Column B and you are done.  

    • Anonymous's avatar
      Anonymous
      Not applicable

      But are the duplicates to be counted only those in the ranges of two rows and two columns? For example, the 3 in the second line comes from = COUNTIF ($ A2: $ B3; $ A3) the 1 of the sixth line comes from = COUNTIF ($ A5: $ B6, $ A6)

      • justinh's avatar
        justinh
        Advocate IV

        Ah! I get it. 

        You are right, my idea won't work. 

         

        I'm brainstorming what could work, but right now I've got nothing.