本文由微信公众号:产品锦李(ID:IMPM996) 授权发布,未经许可,禁止转载,本教程源文件免费下载传送门>>
Axure 中继器提供了非常丰富的功能,但却没有现成的数据统计功能,没有办法像 Excel 表格那样,通过简单的公式就能够统计出我们所需要的数据,但这同样难不倒产品经理,本篇文章,带你了解怎么统计中继器的各种数据。
点击 传送门>> 体验。
本文需要你先了解中继器的基础知识,如果你还不懂中继器的使用,可先阅读以下文章:
本文所有统计数据,需要先在 Axure 画布中添加一个中继器元件,中继器中只需要一个字段 num,并随机添加10行数据,其中至少有两个数是重复的。
为了方便预览时看到所有数值,在中继器内的矩形设置【载入时设置文本】的事件(你也可以在中继器的【每项加载】事件中设置,由于本文很多统计数据都是写在此事件中,所以我单独把与统计无关的事件挪到此处)。
接下来开始介绍各个数据如何统计。
求和
首先添加全局变量 sum,然后在中继器【每项加载】时,设置变量为【sum Item.num】,最后把 sum 赋值给中继器下方的文本。
预览效果如下:
解释一下,中继器的【每项加载】是一个循环事件,有多少数据就会调用多少次,所以上述事件我们可以按如下图理解:
加载第1项时:sum=23
加载第二项:sum=sum 45=23 45=68
以此类推,每加载一项,都是将之前已加载的所有项目的总和加上当前项目的数值,最后一项加载结束后,刚好就是所有项目的总和。
平均数
平均数=项目总和/项目数量,项目总和我们刚刚已经能够求出来,而项目数量通过 Axure 内置的中继器函数 dataCount 可以直接就获得,这样要计算平均值就很简单了。
预览效果:
最大值
求最大值的思路是这样的,假设中继器中有3行,对应3个数,分别是:
x = 1
y = 3
z = 2
现在需要求出他们之间的最大值,我们可以添加变量 max,首先将第一个数 x 赋值给 max,则有:max = 1。
接下来将 max 与其他两个数分别比较,如果 max 大于或等于比较的数,就什么都不做,如果 max 小于比较的数,就将该数赋值给 max,则有:
加载第1个数:max = 1
加载第2个数:max < y,max = 3 加载第3个数:max > z,max = 3(max 没有变化)
3轮结束之后,max 就获得了3个数中的最大值3。
在 Axure 中添加事件如下:
预览结果:
最小值
最小值的思路跟最大值是一样的,只要把逻辑反过来写就可以了:
结果:
中位数
要找到中位数,首先得知道中位数的定义:将一组数据按照由小到大(或由大到小)的顺序排列,如果数据的个数是奇数,则称处于中间位置的数为这组数据的中位数;如果数据的个数是偶数,则称中间两个数据的平均数为这组数据的中位数。
从定义我们可以知道,总共有两种情况,就是数据的个数分别是奇数和偶数,找中位数实际上就是在找对应索引(index)的数据,以上两种情况对应的索引分别为:
奇数:(数据数量 1)/2
偶数:((数据总数/2) ((数据总数 2)/2))/2
偶数的公式看起来复杂,实际上就是取位于中间的两个数的平均值。
由于数据是杂乱无章的,所以中继器载入时,我们需要先对数据进行排序:
奇数的场景比较容易,首先添加全局变量 median 来保存中位数,接着事件设置如下:
其中【dataCount%2】表示求总数/2的余数,余数为0表示偶数,余数不为0表示奇数。
偶数就比较复杂了,我们需要额外用到另外两个变量 median_a 和 median_b 来分别保存中间的两个数值。
最后再求 median_a 和 median_b 的平均值就可以了,事件的条件就是当数据已经加载到最后一条并且 median_a 和 median_b 都不为空。
偶数行预览效果:
随意删掉一行,看看奇数行的效果:
统计数值出现次数
比如我们需要统计“23”总共出现多少次,我们可以添加全局变量 count,然后逐一判断每个值是否等于23,如果是,就给 count 加1,全部数据加载完成后,就可以得到23在所有数据中出现的次数:
预览效果:
找到指定值的索引
比如我们想要找“23”所在的索引,找索引有3种情况:
1、第一次出现的索引
2、最后一次出现的索引
3、所有出现过的索引
以上3个索引我们分别用变量 first_index、last_index、all_index 来记录。
这3个索引中,找最后一次出现的索引是最容易的,每项加载时,只要值等于“23”,就把对应索引赋值给 last_index,如果23在数据中出现多次,则会进行多次赋值,最后保存到的数值就是23最后一次出现的索引:
预览:
而要找第一次出现的索引,就要避免数据出现多次时重复赋值的情况,我们可以加一个判断,就是只有 first_index 不为空的时候,才给变量赋值,当23第一次出现时,变量为空,给变量赋值,当23第二次出现时,变量不为空,不赋值,所以最后只会保存到23第一次出现的索引:
预览:
最后找所有索引,跟求和的逻辑相似,但这次我们不是要求数据总和,而是要将每个索引值保存下来,给 all_index 循环赋值【[[all_index]][[Item.index]]、】,注意最后有个、用来分隔每个索引,显示的时候做了一个处理,截取掉最后一个字符“、”。
看看效果:
以上便是本文的全部内容,感谢阅读。
求中位数的偶数行设置 [[Item.isLast]]=true,这里是怎么设置的,能方便截图看下吗,谢谢!🙏
Item.isLast 是 Axure 中继器的内置函数,用于判断是否已经加载完最后一行,这是源文件的下载链接,有兴趣可以看看:https://li-canrong.gitee.io/material-library/Axure%E6%95%99%E7%A8%8B%E5%8E%9F%E5%9E%8B%E6%BA%90%E6%96%87%E4%BB%B6/%E4%B8%AD%E7%BB%A7%E5%99%A8%EF%BC%8C%E4%BD%A0%E8%BF%99%E4%B8%AA%E2%80%9C%E6%B8%A3%E7%94%B7%E2%80%9D%EF%BC%88%E7%95%AA%E5%A4%96%E7%AF%87%EF%BC%89.rp