M语言虽然函数众多,但是没有一个函数能够像Excel函数Sumproduct()起到对应项相乘然后加总的作用。幸运的是,M语言函数经过适当的搭配可以模仿Sumproduct(),以下是其中一种可行的组合:
( Cols as list ) as number ⇒ let Zipping = List.Zip( Cols ), Multiplication= List.Transform( Zipping, each List.Product( _ ) ), Outcome = List.Sum( Multiplication ) in Outcome
在构造这个自定义函数时,首先要想到List.Product()只接受串列作为它的自变量,明白这点后就很容易想到每一组对应项需要构造成只有两个元素的串列,这个步骤需要使用List.Zip()完成。List.Zip()构造的含有两个元素的串列组是需要进行历遍相乘,所以需要List.Transform()与List.Product()搭配完成这个动作。最后,通过List.Sum()把完成相乘后的串列组进行相加就可以达到仿制Sumproduct()的效果。
为了测试这个自定义函数,构造了如下表格:

let Source= Table.Group( Database, "Product", { "SalesAmount", each fnSumproduct( { [Price], [Quantity] } ), Int64.Type } ) in Source
使用以上代码,得到如下汇总:

把透视表的活也给干了
版主大神,这个附件没有了。在您有空的时候帮我们上传一下。谢谢。
修好了