widgetview 是什么

@JsonProperty(BIWebKeyConstants.WEB_KEY.TEN_THOUSAND)  
private List<String> dimension = new ArrayList<>();  
@JsonProperty(BIWebKeyConstants.WEB_KEY.TWENTY_THOUSAND)  
private List<String> cols = new ArrayList<>();  
@JsonProperty(BIWebKeyConstants.WEB_KEY.THIRTY_THOUSAND)  
private List<String> views = new ArrayList<>();

todo 图表分成多个 group, 变成分组表 ?
com.finebi.dashboard.api.chart.utils.CalculateWidgetUtils#getGeomIds

WidgetView chartView = bean.getView();
return getTargetIds(toGeoms == BIChartSettingConstants.CHART.MEASURE_TO_GEOMS.V_AXIS ? chartView.getViews() : chartView.getDimension(), widget);

模板层级的过滤条件
com.finebi.base.impl.adaptor.generator.impl.condition.entity.HyperReportConditionGenerator#create

组件层级的过滤条件
com.finebi.base.impl.adaptor.generator.impl.condition.level.WidgetConditionGenerator

联动

com.finebi.dashboard.api.bean.widget.link.ClickValue

private String dId;  
private List<ClickValueItem> value;  
private String fieldId;

com.finebi.dashboard.impl.widget.parser.link.strategy.LinkFilterGenerator#create

  • 处理 n 个 linkWidget

com.finebi.dashboard.impl.widget.parser.link.strategy.ClickedLinkStrategy

联动的时候,传递过滤层级, 都传递哪些呢?

  • com.finebi.dashboard.impl.widget.parser.link.helper.WidgetFilterToFilterTranslator#translate(java.util.function.Function<java.util.List<com.finebi.base.api.widget.filter.Filter>,com.finebi.base.api.widget.field.FilterNoField>) ???

翻译成引擎层的东西
com.finebi.base.api.adapter.HyperAbstractAdapter#getCriteria

  • prepare
  • com.finebi.base.api.adapter.HyperAbstractAdapter#translateWidget
  • com.finebi.base.api.adapter.HyperAbstractAdapter#handler

计算???
com.finebi.base.api.executor.WidgetExecutorWrapper

计算入口
/cache/widget/data
com.finebi.web.action.v5.cache.FineCacheWidgetDataAction#getWidgetData

  • com.finebi.dashboard.impl.service.FineWidgetExecutorServiceImpl
  • WidgetBean 转化成 FineWidget
    • com.finebi.dashboard.api.widget.fine.creator.FineWidgetTranslatorManager#translate(com.finebi.dashboard.api.bean.widget.WidgetBean, com.finebi.common.api.cell.user.authority.UserAuthority, com.finebi.dashboard.api.widget.fine.creator.FineWidgetProcessor…)
    • 部分值,懒处理
      • com.finebi.dashboard.api.widget.AbstractTableWidget#targetBeanToTarget
  • com.finebi.dashboard.impl.manager.AbstractEngineWidgetExecutorManager#visit(com.finebi.dashboard.api.chart.VanChartWidget)
    • FineWidget 转化成 Widget , 可以理解为 计算 Widget
    • com.finebi.dashboard.impl.widget.creator.AbstractWidgetCreator#AbstractWidgetCreator
      • 组件创建、解析
        • com.finebi.dashboard.impl.widget.creator.GroupWidgetCreator#create
        • com.finebi.dashboard.impl.widget.creator.AbstractSummaryWidgetCreator#update

com.finebi.dashboard.api.widget.AbstractTableWidget#targetBeanToTarget

过滤

BaseConditionResult

  • FilterField
  • FilterNoField
  • 区别是啥?

过滤有两种
DEF 函数,汇总层级,绑定维度

过滤层级的计算方式 com.finebi.dashboard.impl.widget.parser.filter.utils.FieldFilterLevelCalculator#getFilterLevel(com.finebi.base.api.widget.targets.v2.WidgetTarget, com.finebi.base.api.widget.field.FilterField.FilterLevel)

结果过滤器

维度明细过滤
指标明细过滤
指标分组过滤

字段

添加字段

  • measure/modify
    |475

主题

主题新建
com.finebi.common.impl.service.conf.SubjectEditSessionHelper#openNewSubjectEditSession

  • com.finebi.common.impl.service.conf.SubjectEditSessionHelper#openSession
    • 之后每一次都会经过
    • com.finebi.foundation.session.api.aspect.SessionActiveAspect

保存

模板保存-临时
com.finebi.dashboard.api.service.FineDashBoardService#saveReportInSubjectEdit

  • com.finebi.common.impl.persist.bo.dashboard.ModifyReportBOImpl#update(com.finebi.common.api.bo.dashboard.ReportBundleInfo)
  • com.finebi.common.impl.persist.bo.dashboard.ReportUpdateHandler#modify
  • com.finebi.common.impl.persist.bo.dashboard.DashboardCollectionConsanguinityObverseHandler#modifyThisThat
  • com.finebi.common.impl.persist.session.cacheitem.read.CacheConfSession#putAll
  • com.finebi.common.impl.persist.session.cacheitem.write.base.SessionVersionedWriteContainer#putAll
  • 关键交叉点
    • com.finebi.common.impl.persist.session.cacheitem.write.SessionWriteInProcessValue#getUnsavedKvMap

主题保存
com.finebi.common.impl.service.conf.FineSubjectEditSessionServiceImpl#saveSubject

  • com.finebi.foundation.session.api.SessionManager.Current#flushCachedValue(com.finebi.foundation.session.api.cache.CacheItemKey…)
  • com.finebi.foundation.session.impl.cache.DefaultCache#flush(com.finebi.foundation.session.api.cache.CacheItem<?>)
  • com.finebi.common.impl.persist.session.cacheitem.write.base.VersionedTransactionSessionImpl#commitToPersist
  • 关键交叉点
    • com.finebi.common.impl.persist.session.cacheitem.write.SessionWriteInProcessValue#getUnsavedKvMap

组件

com.finebi.dashboard.api.bean.widget.table.TableWidgetBean

  • 转换器
    • com.finebi.dashboard.api.bean.widget.WidgetBeanTypeIdResolver

dimension 有自己的 id
field 有自己的 id == 表里面的 id 见字段
|500

widgetMeasures 使用 fieldId

dimensionGroups 使用 widgetMeasures+group

其他

二次计算

支持设置二次计算的功能快速计算中的所有值、组内所有值、累计值、组内累计值、排名、组内排名、占比、组内占比。
支持取消二次计算的功能快速计算中的所有值、组内所有值、排名、组内排名、占比、组内占比的计算方式。

快速计算

计算类型文档
占比占比(快速计算)
排名排名(快速计算)
汇总值所有值(快速计算)
累计值累计值(快速计算)
同比、环比、同期、环期同比/环比(快速计算)

问题

双向联动的逻辑?