我们截取某只股票真实交易的部分行情数据如下:
目标要求统计可自定义大单含义的可视化图表:
(一) 分析需求
- 首先我们要定义大单,什么样才叫大单,至少要有一个标准,一种以绝对值为区分标准;一种以相对值为区分标准,这里我们以相对值作为区分标准。
- 我们要对成交量进行一个排名,才能根据相对值来计算动态成交排名用于定义大单。
- 我们要计算大单净买入量,要分别求出大单买入量及大单卖出量。
(二) 实现需求
我们知道很多情况下大单的定义是模糊的,可能今天的小单就是昨天的大单,所以我们这里以相对数来进行定义。因为我们需要分析分钟为维度,但是目前的日期都是以秒为单位,所以我们需要添加一列作为小时分钟来进行分析,所以添加1列为小时分钟列。
基础度量值:
代码语言:javascript复制总成交量:=Sum([成交量])买入成交量:=SumX(Filter('表1','表1'[类型]="买入"),[成交量])卖出成交量:= SumX(Filter('表1','表1'[类型]="卖出"),[成交量])
1. 当前分钟成交中最大一笔成交量作为大单。
代码语言:javascript复制大单买入量:=var _top=TOPN(1, '表1',[买入成交量])returnSUMX(_top,[买入成交量])
代码语言:javascript复制大单买入量优化:=if(HASONEFILTER([时间时分]),[大单买入量],sumx(all('表1'[时间时分]),[大单买入量]))
同理计算出大单卖出量。
2. 单独显示分钟级别的最大单笔买入量
代码语言:javascript复制分钟单笔最大买入量:=var _top=TOPN(1,ALL('表1'[时间时分]),[买入成交量])returnCALCULATE(sumx(_top,[买入成交量]), FILTER('表1','表1'[类型]="买入") )
这里涉及到了一些上下文的转换,需要仔细品味。
3. 单独显示分钟级别中的最大单笔买入量
代码语言:javascript复制分钟内单笔最买入量:=var _top=TOPN(1,ALL('表1'[时间时分], '表1'[时间]),[买入成交量])returnCALCULATE(sumx(_top,[买入成交量]), FILTER('表1','表1'[类型]="买入") )
请注意,这里在忽略上下文的时候多了一个[时间]列的写法,得出的结果不一样。
(三) 展现需求
通过条件格式,我们就可以实现最后的大单净量的表现方式,每分钟的最大一笔量作为大单从而进行分析。
此外我们在看下3种大单定义给出结果的差异。
此文中的上下文转换非常的多,虽然书写不算太复杂,但是实际的上下文比较复杂。
如果觉得有帮助,那麻烦您进行转发,让更多的人能够提高自身的工作效率。