PowerBI之DAX神功:第5卷第1回 offset函数前2个参数的秘密
前言
之前我们在回答网友提问时,再次重申了为什么Calculate第2参数是一张表?
https://www.bilibili.com/read/cv26993478
今天就不要再问我Calculate第2参数为什么是一张表了:)
以前我们计算移动平均值,同比、环比时都使用时间智能日期函数,现在又多了一种选择
一、offset第二参数是可选吗?
我们今天先说offset前两个参数
因为微软帮助文档上说,offset除第1参数外,其它参数均为可选,约定俗成中括号代表可选

所以国内相关文章上也经常会出现第2参数为可选说明

我为了验证这件事,还特意把PowerBI升级到了最新

我们以新建表为例:

我们以新建列为例:

是不是可选我不知道,但是我不写第二参数,PowerBI它真不让我用啊。
友情提示:帮助文档截止于2023年11月18日,后续帮助文档或软件功能也许会发生变化。
二、offset返回一张表,我们先在新建表中理解它
既然至少要写两个参数,那第1和第2参数就需要一起讲。
我们准备一张表,如下图

接下来我们将 offset第1参数写成0 代表没有偏移, 第2参数使用这张Sheet2的表

你是不是以为这里重复了?

还真不是,不信我们测试一下,我们导入一个没有重复的Sheet3

问题依旧!

帮助文档上给了相关依据,下下面,我给给大大家讲讲怎么么回事:)

可以生成表的表达式函数可多了,时间有限,我就不一一举例了,我给大家举几个有代表性的例子。
我们讲过 selectcolumns 从一张表中获取某个列,或某几个列
如下图所示,我们使用这个函数获取了Sheet3中的日期列,这个列没有重复行

但是,offset函数 不承认它

想让offset承认它,你要手工的再去一次重
当然方法不止有加DISTINCT 今天要讲的重点不是去重方法,而是告诉你offset在这里:认公式不认表

理解了原因,就没必要写得这么麻烦了,我们可以写成以下公式
支持的公式太多了,我只是举几个例子,新建表这里用谁都行
但是以后写度量值里用谁,那可选方法就缩减到一两个了。
因为涉及去重,我们还是用Sheet2这张表举例




但是,我不是脑袋一热,就随便举几个例子!我之所以用以上三组
values和distinct 、 all和allselected 、 summarize 来举例,你们知道我葫芦里卖的什么药吗?这个问题咱们一会详细说,先把新建表里的事说完。
理解了第2参数,再说第一参数
我上面写的都是0,就不偏移,返回第2参数的表达式生成的表
第1参数咱们也别说文词:偏移
因为在新建表里,我可以这样来说
当值为0时,第二参数生成的表结果不变

当值为正数时,第二参数生成的表从上面删除对应的行数

当值为负数时,第二参数生成的表从下面删除对应的行数

如果你现在有下面这个疑问,就证明你的基础弱一些

因为你使用 DISTINCT(Sheet2[日期]) 对指定列去重,现在返回一张每行都是唯一值的表。如下图所示。所以这里它才说是行。希望大家没有这个疑问。

三、offset返回一张表,是一张什么样的表?
我们给Sheet2添加一列销量

我们在新建列里就能知道!给Sheet2新建列

在新建表中,你看不出来,在新建列里,你没看出来的事情,我看出来了!
我先说结果

不是返回一张大表

口说无凭必需证明:

但是我用offset生成的表去写就不行

于是,我通过证明得到我的结论
如果x不是小表(标量值)这个公式一定是报错的!
详见《DAX神功》第1卷第10回 将表用作标量值
这个结果有科学依据了吧?我只是用Distinct举例,另外几个函数均可

四、offset为什么要配合ALL家族函数
上面我们举了3组例子 values和distinct 、 all和allselected 、 summarize
在新建表里都是一样的,在度量值中就不同了。

那为什么度量值A、度量值B、度量值E 每个日期对应的值没有体现出来呢?
我们使用 Values和ALL举例

values函数用于获取指定列中的唯一值,并将这些唯一值作为一个表返回。
对于行标题上的每个日期,度量值520 会计算该日期下的销售总和。

all(列):删除指定列的筛选,返回指定列的所有值,在本例中,返回全部日期。
所以 度量值521 每一行返回的都是36

理解了这个,再说 度量值C和度量值B


五、offset为什么要配合ALLSELECTED函数
all函数和allselected函数返回结果一样,为什么要使用allselected函数?

原因在于筛选 详见《DAX神功》第1卷第11回

这回明白了吗?

这一篇,我们讲了offset函数第一参数和第二参数的意思,以及为什么offset要配合allselected使用的详细推导过程,关于offset函数,我们接下来还会更详细的讲解。

PowerBI学习顺序:
【1】Access基础篇,学习s01开头的集数,理解表格数据规范和表关系
https://www.bilibili.com/video/BV1tf4y117Sh
【2】PowerBI火力全开,学习函数语法,与应用场景
https://www.bilibili.com/video/BV1qa4y1H7wp
【3】DAX神功,学习DAX函数原理
https://www.bilibili.com/read/readlist/rl442274
【4】PowerBI可视化图表
https://www.bilibili.com/video/BV1W54y1i7dE
https://www.bilibili.com/video/BV1r54y1i75n