【FineBI学习打卡】DAY75 关于高亮最大最小值的一些疑问解答
第75天知识点:高亮最大最小值为什么要用DEF(MAX_AGG(成交额))计算?
动态展示最大最小值这篇文章发布后,不少小伙伴后台私信表示对最大最小值的计算有些疑问,考虑到后面分享的最大最小值区间仍然会涉及到这些值的计算,所以今天先就这些问题做统一解答:
这里以最大值为例进行讲解。
先来回顾一下最大值的计算方式:
DEF(MAX_AGG(成交额))
疑问1:为什么不直接用MAX(成交额)?
我们可以先看一下直接用MAX函数的结果。
可以看到,MAX函数计算的结果就是当前行的最大值,而不是所有行中的最大值,显然结果并不满足我们的要求。
疑问2:直接用MAX_AGG(成交额)可以吗?为什么前面还要加一个DEF函数?
我们可以看一下如果不加DEF函数,直接用MAX_AGG(成交额)结果会是什么?
结果如下:
仍然是以每一行为维度,对应该行的最大值。
因为每一个日期对应的值只有一个,所以结果自然就是原来的成交额本身。这也就是为什么成交额列与MAX_AGG(成交额)计算的结果是一致的。
但与MAX函数不同的是,MAX_AGG函数合计行的结果是所有行的最大值,而MAX函数是所有行的和。
显然,MAX与MAX_AGG函数都不满足我们要求,看数据两个函数都受到了【日期】维度的影响。
有小伙伴还记得DEF家族与老维家族的故事吗?
想要摆脱维度的影响,DEF函数志在必得。
这也就是为什么需要在MAX_AGG(成交额)前面加一个DEF函数的原因。
DEF(MAX_AGG(成交额))表示所有行中,最大的数值。
结果如下:
疑问3:不在组件中使用计算字段,直接在数据集中计算出最大值呢?
数据集中当然可以计算出最大值,计算方法也很简单,可以通过新增公式列或者新增汇总列计算得出。
结果看着也没有什么问题。
但是,如果筛选数据日期,你就会发现:
组件中通过DEF函数计算的最大值字段可以根据筛选区间显动态变化,而数据集中计算的两个最大值结果不会变化,始终是99,926,也就是2024年全年数据的最大值。
显然,这也不符合咱们的要求。
为什么数据集中计算出的最大值不会动态变化呢?
因为过滤组件是在数据集结果的基础上进行的过滤,而数据集中添加的计算步骤是数据集结果形成前完成的步骤,计算对象是整个数据集数据,而非过滤组件筛选后的数据。所以通过数据集计算的字段结果相当于是写死的,不会随过滤组件的筛选条件而动态变化。
什么是写死的,以excel举个例子,大家可能就明白了。
比如:C列的值是A列乘以B列得出的,然后我将C列的值以数值形式复制粘贴到D列,也就是说,C、D列都是A列乘以B列得出的结果,但C列带公式,而D列不带公式,现在我修改了B列中的值,可以看到,C列变了,但D列因为是数值,写死了,所以并不会发生变化。
组件中添加计算字段就相当于带公式的C列,数据集中的新增列则相当于D列,过滤组件筛选相当于对B列数值进行修改。
这样大家是不是更容易理解了?
好了,以上就是关于动态展示最大最小值的一些疑问,希望可以解答你的疑惑。