如下情景,我们有以对详细的地址,我们想从中提取城市已作分析。在 Excel 中我们可以使用 lookup+find 实现如下效果,如有不明白的同学可以翻阅我之前发布的博文:
image那么这种需求如何在 powerpivot 中实现呢,有人说可以通过表格生成加载到 pivot 中,但是,这有一个问题,如果我们是合并多表生成的地域数据呢,可能就需要通过 dax 链接回表的复杂操作趋势线,会严重降低模型的运行效率,如果在 powerbi 中这种方法根本没办法使用,今天我们就介绍下如何通过 powerpivot 在复杂的地址中直接提取城市名称:
image操作步骤
1、首先,我们有一张地址的明细表和城市的参数表,我们将两张表分别加载进 power pivot 中。
2、在地址表中我们添加自定义列,输入如下公式,回车,我们看到如下效果:
=FIRSTNONBLANK(FILTER(VALUES(‘城市’[城市]),SEARCH(‘城市’[城市],’省份’[地址],1,0)),1)
image所有的城市名称就被我们提取出来了。
上边公式为几个函数嵌套而成,首先我们看下微软官网对于 Firstnonblank 函数的介绍:
image我们可以看到 Firstnonblank 通过两个参数,一个单列,和一个表达式(改公式中使用 1),返回了第一个不为空的值。
FILTER(VALUES(‘城市’[城市]),SEARCH(‘城市’[城市],’省份’[地址],1,0))
这块类似于 find 数组查找返回的模式,通过省份上下文筛选,每个表迭代后返回当前省份匹配到的结果。
最后测试下如果匹配到两个值的话会返回哪一个,我们在城市列别中加入陕西,刷新模型,我们看到第 2、3 条记录,都返回陕西,我们在添加一条朝阳,我们发现返回的还是北京,其实这块我们通过 values 函数的时候,顺序是被打乱了的。
这个模式我们没必要去记住他的运行原理,在需要的时候,我们复制这段 dax 直接利用即可。
网友评论