dax 筛选 包含某个字_Power BI 用DAX解决数据的循环迭代

本文探讨了在Power BI中如何利用DAX处理数据的循环迭代,特别是当需要基于某列第一行的值迭代计算后续行时。通过理解迭代本质是数列,提出了解决加减乘除混合迭代的方法,包括等差数列和等比数列的计算,以及应对复杂迭代公式的差分法。案例展示了如何在DAX中实现这些计算。
摘要由CSDN通过智能技术生成

一、循环迭代的难处

实际业务中,数据迭代应用广泛,如在复利现值、折旧等方面的计算,然而众所周知的是,DAX是一个基于列引擎的函数语言,数据中每行基于其各自行上下文计算,但我们需要的效果是,列的第二行的数据基于第一行数值的计算产生,以此类推,列的第n行数据基于其第n-1行求得,这样的操作在Excel可以很轻松求出(如下图中的A、B、C三列):

39f0525435f1155342b4166a1ac65d7a.png

但在Power BI(或PowerPivot)中,你虽然可以基于某个列利用诸如SUMX等函数进行迭代运算(如下图所示的两种方法),

9b8b686c2f91a9f642334e202253f8f1.png

c4b584ad5dbe067346916ac9269d353d.png

但却难以基于某列的第一行的值,迭代该列自身而求出该列,换句话说,你可以很轻松依据A列的筛选上下文利用SUMX等类似的函数在B列求出其迭代结果(或在自定义的度量值得出结果)但却难以实现当某列只有第一行有数值时如何通过迭代其自身得出其第2至第n行的值,这样的计算在Excel很轻松,但用DAX却不易实现。

二、迭代的本质是数列

事实上,DAX同样可以完美解决该问题,因为正如本段标题所言:迭代的本质是数列。当你用数列的思维去思考在Power BI的迭代问题,就能简单多了。因此,针对于上图A列的情况:当列的n+1行等于第n行加d时,整列的数据其实就是一个公差为2的等差数列,如下,我们只需要利用等差数列公式即可:

e6006e0bd97030ae2cd470486b0ad573.png

36301379b6c75ecbfd2f0bece2df326b.png

同理,如果情况如同B列:n+1 = n * 2, 那么这就是一个等比数列:

57f2dbdfe24bdf0ef3e37ccc727d2ec5.png

530933b97df5a1b5856341ea9155fab1.png

三、如何解决加减乘除类型的混合迭代

正如图1的C列。当迭代公式类如“f(n +1) = (f(n) + d)*q”时,其逻辑就不像上面公式简单了,但实际上,这是一个数学问题了,本文在此不做拓展。其答案是:尽管此时数列f(n)本身是不规则数列,但f(n) – f(n-1)却是一个规则数列,而且是等比数列。依据这个思路,我们可以先利用等比数列规则求出f(n) – f(n-1),然后反推出f(n),实际上就是高中数学的差分法了。首先,f(n) – f(n-1)的计算公式为:

91bbcab196778c46bd10c5d73489fec5.png

注1:以如图1的C列为例,其公差为3,公比为2,则f(n) – f(n-1)为首项为f(2)-f(1),公比为2的等比数列

注2:第14、15行处,由于差分法会使第一项留空,故使用IF(ISBLANK(),,)使第一行有值

4cecf8f018d3fa408cbdbc69a0a32a63.png

在得出f(n) – f(n-1)后,即可反推出f(n)的值,因为f(n)是一个以f(n) – f(n-1)为公差的不等差数列,计算如下:

8fae4a62f5401dc5e1f5bb9d479c6c8e.png

88422dddceb46bbd97b2000917561509.png

这样我们就成功完成了在这种复杂公式之下的循环迭代。经测试,无论我们在公式中如何改变D和Q的值,该公式都返回了正确的循环迭代结果。


【注:本文首发于PowerBI星球公众号,案例源文件已分享至PowerBI星球-知识星球】

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值