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
preparecom.finebi.base.api.adapter.HyperAbstractAdapter#translateWidgetcom.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.FineWidgetExecutorServiceImplWidgetBean转化成FineWidgetcom.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, 可以理解为计算 Widgetcom.finebi.dashboard.impl.widget.creator.AbstractWidgetCreator#AbstractWidgetCreator- 组件创建、解析
com.finebi.dashboard.impl.widget.creator.GroupWidgetCreator#createcom.finebi.dashboard.impl.widget.creator.AbstractSummaryWidgetCreator#update
- 组件创建、解析
com.finebi.dashboard.api.widget.AbstractTableWidget#targetBeanToTarget
过滤
BaseConditionResult
FilterFieldFilterNoField- 区别是啥?
过滤有两种
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

主题
主题新建
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#modifycom.finebi.common.impl.persist.bo.dashboard.DashboardCollectionConsanguinityObverseHandler#modifyThisThatcom.finebi.common.impl.persist.session.cacheitem.read.CacheConfSession#putAllcom.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 见字段

widgetMeasures 使用 fieldId

dimensionGroups 使用 widgetMeasures+group

其他
二次计算
| 支持设置二次计算的功能 | 快速计算中的所有值、组内所有值、累计值、组内累计值、排名、组内排名、占比、组内占比。 |
|---|---|
| 支持取消二次计算的功能 | 快速计算中的所有值、组内所有值、排名、组内排名、占比、组内占比的计算方式。 |
快速计算
| 计算类型 | 文档 |
|---|---|
| 占比 | 占比(快速计算) |
| 排名 | 排名(快速计算) |
| 汇总值 | 所有值(快速计算) |
| 累计值 | 累计值(快速计算) |
| 同比、环比、同期、环期 | 同比/环比(快速计算) |
问题
双向联动的逻辑?