问题描述
通过使用row_number(),我们可以获得整个行。但是,如果我们想要该行中的特定值并将其用于进一步的计算,该怎么做呢?
Example:
Customer Month Usage. %Change
ABC 8. 10. 0
DEF 9. 12. 120
GHI 10. 10. 100
JKL. 11. 15. 150
我正在寻找的计算是:- 第一个月的使用量是10 从下个月开始
12/10 * 100 = 120
10/10 * 100 = 100
15/10 * 100 = 150
如何获取第一行,第二列的值并将其存储到变量中,以便我可以将其用于进一步的计算?
解决方法
这样的事情怎么样?
let events = datatable(Customer: string,Month:int,Usage:real) [
"ABC",8,10,"DEF",9,12,"GHI","JKL",11,15];
//
let first_usage = toscalar(events | summarize arg_min(Month,Usage) | project Usage);
events | extend Change = 100*Usage/first_usage
将first_usage变量设置为最低月份的“用法”值。如果您确定它们已经被排序,则可以只选择第一行。我们必须将其转换为标量,以在将来的计算中使用它。
接下来,我们在您的计算中添加一个新的更改列。第一行将是100(而不是0),但是如果很重要,也可以通过使用iff()
来不同地处理第一行来解决此问题:
let events = datatable(Customer: string,Usage) | project Usage);
events
| serialize
| extend r=row_number()
| extend Change = iff(r==1,0.0,100*Usage/first_usage)
| project-away r