Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
4 years ago
Solved

Table.RowCount all rows in current table for use in a custom column equation

I want a custom column where if a row in another column is blank, then return blank, but if it has ANY value, then return (1/ Total # of Rows in current Table)

 

I am trying this. 

 

= Table.AddColumn(#"Changed Type1", "Custom", each if [Merged_Use] <> null then (1 / ( Table.RowCount(Leadership_Usage_Tracking[TRT_ID]) as number)) else "")

 

The rows that are supposed to remain null are working fine. Anywhere that I am expecting (1/ Total # of rows), I am getting the error "A cyclic reference was encountered during evaluation."

 

Am I using the wrong expression to count the number of rows in this table? I also tried just [TRT_ID] (instead of prefacing the table name), but then the error is "cannot convert value to type Table", which makes me think I am using the wrong expression. 

 

 

EDIT: 

 

I went and tried adding an Index column and then calling the max number using List.Max, but it is BOGGING down PowerBI something bad.... 

 

= Table.AddColumn(#"Added Index", "Custom", each if [Merged_Use] <> null then (1/List.Max(#"Added Index"[Index])) else "")

  • Hi Anonymous,

     

    Cyclic references are a bit tricky sometimes. One way to solve your issue is to save the number of rows in a step before and then reference that variable:

     

    Before:

     

    After:

     

    And here the code in M:

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlSK1YlWKsisqkoEs9CIksTk7MqS1OQMpdhYAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column", type text}}),
        #"Replaced Value" = Table.ReplaceValue(#"Changed Type","",null,Replacer.ReplaceValue,{"Column"}),
        #"countrows" = Table.RowCount(#"Replaced Value"),
        #"Added Custom" = Table.AddColumn(#"Replaced Value", "Custom", each if [Column] <> null then 1 / #"countrows"
     else null)
    in
        #"Added Custom"

     

    Let me know if this helps 🙂

     

    /Tom
    https://www.tackytech.blog/
    https://www.instagram.com/tackytechtom/

2 Replies

  • tackytechtom's avatar
    tackytechtom
    Icon for Most Valuable Professional rankMost Valuable Professional

    Hi Anonymous,

     

    Cyclic references are a bit tricky sometimes. One way to solve your issue is to save the number of rows in a step before and then reference that variable:

     

    Before:

     

    After:

     

    And here the code in M:

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlSK1YlWKsisqkoEs9CIksTk7MqS1OQMpdhYAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column", type text}}),
        #"Replaced Value" = Table.ReplaceValue(#"Changed Type","",null,Replacer.ReplaceValue,{"Column"}),
        #"countrows" = Table.RowCount(#"Replaced Value"),
        #"Added Custom" = Table.AddColumn(#"Replaced Value", "Custom", each if [Column] <> null then 1 / #"countrows"
     else null)
    in
        #"Added Custom"

     

    Let me know if this helps 🙂

     

    /Tom
    https://www.tackytech.blog/
    https://www.instagram.com/tackytechtom/

    • Anonymous's avatar
      Anonymous
      Not applicable

      This makes sense, thank you!