如何获取事实表数据?Power BI农场区域容量历史查询
需求与问题
- 模型按箭头方向筛选,需通过日期范围筛选,从事实表提取包含农户、农场、农场所属区域的表格,同时展示农场max_capacity与各区域max_capacity的历史变化。
- 场景示例:2024/01/01至2024/01/31期间,农户g1拥有农场g1及4个区域z1-z4,需查看各农场及区域的容量历史。
- 尝试的DAX代码:
zone_max_capacity = CALCULATE( MAX(fact_zone_params[max_capacity]), CROSSFILTER(dim_zone[id_zone], fact_farm_zone_farmer[id_zone], Both), CROSSFILTER(fact_zone_params[id_zone], dim_zone[id_zone], Both) )
- 核心问题:MAX函数仅返回全局或当前筛选下的单个最大值,无法获取所有符合条件的历史记录,需要生成如下格式的明细表格:
| 农户 | 农场max_capacity | 区域 | 日期 | 区域max_capacity |
|---|---|---|---|---|
| f1 | 500 | z1 | 2024/01/01 | 25 |
| f2 | 300 | z1 | 2024/01/01 | 20 |
| f2 | 300 | z1 | 2024/01/02 | 50 |
| f2 | 300 | z1 | 2024/01/03 | 70 |
| f3 | 100 | z1 | 2024/01/08 | 100 |
解决方案
方法1:构建计算表直接生成明细报表
使用SUMMARIZECOLUMNS关联所有相关表,直接提取所需字段并保留所有历史记录,适合一次性生成完整报表:
容量历史报表 = SUMMARIZECOLUMNS( -- 指定要展示的维度字段 dim_farmer[农户], dim_farm[农场max_capacity], dim_zone[区域], fact_zone_params[日期], -- 提取区域容量字段 "区域max_capacity", fact_zone_params[max_capacity], -- 应用日期筛选条件(可根据需要调整或改为依赖外部切片器) FILTER(dim_date, dim_date[日期] >= DATE(2024,1,1) && dim_date[日期] <= DATE(2024,1,31)), -- 建立农户-农场-区域的关联关系 TREATAS(VALUES(fact_farm_zone_farmer[id_farmer]), dim_farmer[id_farmer]), TREATAS(VALUES(fact_farm_zone_farmer[id_farm]), dim_farm[id_farm]), TREATAS(VALUES(fact_farm_zone_farmer[id_zone]), dim_zone[id_zone]) )
方法2:修改度量值适配行上下文
如果需要在可视化组件(如矩阵、表格)中动态展示,改用MAXX替代MAX,让函数在当前行上下文的筛选范围内返回对应值:
zone_max_capacity = MAXX( RELATEDTABLE(fact_zone_params), fact_zone_params[max_capacity] )
使用时只需将农户、农场、区域、日期拖入可视化的行/列字段,再添加该度量值和农场max_capacity字段,即可自动展示每一行的区域容量历史。
内容的提问来源于stack exchange,提问作者David Molina
相关产品推荐
相关产品推荐

