Forum Discussion
Benford's law , Power query
- 6 years ago
Hi
please paste this code into the advanced editor and follow the steps:
let MyTable = Table.FromColumns({List.Transform(List.Random(10000), each _ * 10000) } ), ExtractLast2Digits = Table.AddColumn(MyTable, "Last2Digits", each Text.End(Text.From([Column1]),2)), BenfordTable = Table.AddColumn( #table( {"Last2Digits"}, List.Transform( {0..99}, each {Text.PadStart(Text.From(_), 2, "0")})), "BenfordNumber", each 0.01 as number ), #"Merged Queries" = Table.NestedJoin(BenfordTable, {"Last2Digits"}, ExtractLast2Digits, {"Last2Digits"}, "MyTable", JoinKind.LeftOuter), #"Aggregated MyTable" = Table.AggregateTableColumn(#"Merged Queries", "MyTable", {{"Column1", each List.Count(_) / Table.RowCount(MyTable), "ActualDistribution"}}), #"Inserted Subtraction" = Table.AddColumn(#"Aggregated MyTable", "Deviation", each [ActualDistribution] - [BenfordNumber], type number), #"Inserted Absolute Value" = Table.AddColumn(#"Inserted Subtraction", "Absolute Deviation", each Number.Abs([Deviation]), type number) in #"Inserted Absolute Value"It will create a table with the Benford-distribution values.
If you want to apply it to your data, just replace the code in the first step (MyTable) by a reference to your table and make sure that that column with the values to be analyzed is called "Column1". Then you don't have to adjust anything further in the code.
Hi Anonymous ,
I would need to see your M-code on how you applied it to help you here.
If you copy and paste the code I've provided you should see everything working fine.
But maybe you prefer a DAX-solution that has some advantages instead: Dynamic Benford's Law measures in Power BI and Power Pivot – (thebiccountant.com)
Thanks for following up. I managed to fix the circular reference but now its creating a file (original version is 1GB) to 20 GB and going which I just canceled.
let
MyTable = #"GL Benford",
ExtractLast2Digits = Table.AddColumn(#"GL Benford", "Last2Digits", each Text.End(Text.From([Column1]),2)),
BenfordTable =
Table.AddColumn(
#table( {"Last2Digits"},
List.Transform( {0..99},
each {Text.PadStart(Text.From(_), 2, "0")})),
"BenfordNumber",
each 0.01 as number ),
#"Merged Queries" = Table.NestedJoin(BenfordTable, {"Last2Digits"}, ExtractLast2Digits, {"Last2Digits"}, "MyTable", JoinKind.LeftOuter),
#"Aggregated MyTable" = Table.AggregateTableColumn(#"Merged Queries", "MyTable", {{"Column1", each List.Count(_) / Table.RowCount(#"Renamed Columns"), "ActualDistribution"}}),
#"Inserted Subtraction" = Table.AddColumn(#"Aggregated MyTable", "Deviation", each [ActualDistribution] - [BenfordNumber], type number),
#"Inserted Absolute Value" = Table.AddColumn(#"Inserted Subtraction", "Absolute Deviation", each Number.Abs([Deviation]), type number)
in
#"Inserted Absolute Value"