• FineBI 无法将聚合和非聚合参数混用(或条件求和)


    例如:使用 IF 函数对聚合函数进行二次计算,当公式中含有非聚合参数时,公式不合法,如下图所示:

    方案一  将非聚合参数变成聚合参数

    如下图所示:

    方案二  先逻辑判断,再聚合

    示例:计算「省份」为「北京」且「客户名称」为「北控软件有限公司」的「合同金额」总量。

    创建仪表板,选择「地区数据分析」数据集,创建「计算字段」,输入字段名称和公式:SUM_AGG(IF(省份="北京市"&&客户名称="北控软件有限公司",回款金额,0)),

    如下图所示:

     公式说明:

    公式说明
    IF(省份="北京市"&&客户名称="北控软件有限公司",回款金额,0)如果同时满足「省份」为「北京」且「客户名称」为「北控软件有限公司」,则输出「回款金额」,否则输出 0
    SUM_AGG(IF(省份="北京市"&&客户名称="北控软件有限公司",回款金额,0))对上一步输出的结果进行求和

    缺陷:如果将公式作为一个新增字段使用,那么可能出现 无数据 的情况。因为明细表不支持聚合。在页面中添加计算字段是可以使用的,同样不支持明细表的使用。

    方案三  聚合函数与非聚合函数进行嵌套

    sum_agg(max(字段))是合法的,如下图所示:

    方案四  使用fixed函数

    目前只支持 实时数据,不支持抽取数据。

    FIXED 函数表达式使用指定的维度计算值,而不引用分析区域中的维度。

    比如:求指标在任意分组下的组内占比,分析一个数据,业务需要在一张表中看到门店、品类、品牌3个维度,有销售额和净利润两个指标,需要分析门店具体品类占所有门店品类销售的占比。

    使用示例数据创建仪表板,添加计算字段,命名并输入公式:

    FIXED(店名,品类描述,SUM_AGG(销售额))/FIXED(店名,SUM_AGG(销售额)),

    如下图所示:

     公式说明:

    公式说明
    FIXED(店名,SUM_AGG(销售额))以店名为固定维度,计算每个店的汇总销售额
    FIXED(店名,品类描述,SUM_AGG(销售额))以店名和品类描述为固定维度,计算每个店下每个品类的汇总销售额
    FIXED(店名,品类描述,SUM_AGG(销售额))/FIXED(店名,SUM_AGG(销售额))每个店下,每个品类销售额汇总/每个店销售额汇总

     EXCLUDE、INCLUDE函数参考:

    [直连]FIXED类函数 - FineBI帮助文档 (fanruan.com)

    方案五  使用分组汇总功能,然后再逻辑判断

    弊端:该方式得到的结果,不能很好的与其他表进行关联使用。

    对于以下函数,是不合法的。

    功能:如果(Code 1="D" 或 Code 1="C"),且 Code 2= "N",汇总Duration 的值

    下面提供一种解决方案:

    注:以下截图来源于官网,与本例子无关。只记录、参考操作步骤。

    1、使用分组汇总功能

    1)进入「数据准备>业务包」,点击「添加表>自助数据集」,如下图所示: 

     

    2)进入自助数据集配置界面,从业务包的数据表中选择需要的字段,右侧预览中即显示选择的字段,如下图所示:

    然后添加分组汇总

    选择「自定义」分组方式

    点击「添加分组」,其他的值可以分组到【其他】组。

     选择汇总的字段

     汇总字段支持添加「文本字段」、「数值字段」、「时间字段」,默认不填入字段,均支持重命名、删除字段操作。

    注:「近似去重计数」功能支持的数据库版本:CLICKHOUSE、ORACLE(12.1或以上)、SQLSERVER(2019或以上)、PRESTO、REDSHIFT、VERTICA、MAXCOMPUTE。当数据库系统为REDSHIFT时,由于REDSHIFT的限制,只能同时对同一个字段做需要排序的聚合操作(如求去重计数、中位数、百分位、近似去重计数),同时对2个或以上的字段做此种聚合操作会发生错误。当数据库系统为VERTICA时,由于VERTICA的限制,只能同时使用(精确)去重计数或近似去重计数中的一个。

    2、对分组后数据逻辑判断

    新增字段

    此时的公式改为:

    1. // 错误的
    2. IF(AND(${Code 1}="CD",${Code 2}="N"), SUM_AGG(${Duration}), null)
    3. 改为:
    4. // 正确的
    5. IF(AND(${Code 1}="CD",${Code 2}="N"), ${Duration}, null)

    结果如下: 

     

  • 相关阅读:
    【Linux】线程同步与互斥
    计算机毕业设计Java惠购网站(源码+系统+mysql数据库+lw文档)
    Leetcode(146)——LRU 缓存
    [附源码]Python计算机毕业设计超市团购平台
    tcp/ip 协议解析和开发项目传输数据的常见服务
    厉害了,腾讯内部都用的Spring+MyBatis源码手册,实战理论两不误
    【Spring Security】安全框架学习(一)
    Java基础入门·多线程·线程池ThreadPool篇
    移动端上拉分页加载更多(h5,小程序)
    电机剧烈振动的原因及解决办法(附电机振动监测方案)
  • 原文地址:https://blog.csdn.net/conving/article/details/127668164