Power BI Desktop报表:卡片显示实时数据最新值而非求和值问题
问题描述
我有一组实时采集的数据如下:
| A | B | Datetime |
|---|---|---|
| 20 | 76 | 2018-04-01T21:04:22Z |
| 21 | 75 | 2018-04-01T21:04:32Z |
| 20 | 75 | 2018-04-01T21:04:42Z |
| 20 | 75 | 2018-04-01T21:04:52Z |
| 21 | 76 | 2018-04-01T21:05:02Z |
我已经成功把A、B字段绘制成折线图,但在用Card组件展示它们的最新值时,卡片显示的却是求和后的结果102(A字段总和)和377(B字段总和),而不是最新的21和76。想请教怎么修改才能让Card显示最新的实时值?
解决方法
问题的核心是你的Card组件默认使用了求和聚合函数,而你需要的是基于最新时间戳的单值提取。下面分几种常见工具场景给出解决方案:
1. Python(Pandas)数据预处理
如果是用Python做数据处理再对接可视化组件,可以先筛选出最新时间的那一行数据:
import pandas as pd # 假设数据已存入DataFrame df = pd.DataFrame([ [20,76,'2018-04-01T21:04:22Z'], [21,75,'2018-04-01T21:04:32Z'], [20,75,'2018-04-01T21:04:42Z'], [20,75,'2018-04-01T21:04:52Z'], [21,76,'2018-04-01T21:05:02Z'] ], columns=['A','B','Datetime']) # 转换时间字段为时间类型 df['Datetime'] = pd.to_datetime(df['Datetime']) # 获取最新时间对应的行 latest_row = df[df['Datetime'] == df['Datetime'].max()] # 提取最新值 latest_A = latest_row['A'].values[0] latest_B = latest_row['B'].values[0]
之后把latest_A和latest_B直接传入Card组件即可。
2. BI工具(Tableau/Power BI)调整聚合方式
如果是用Tableau或Power BI这类BI工具:
- Tableau:将A字段拖入Card后,点击字段旁的聚合按钮,把「求和」改成「最后值(Last)」;或者创建计算字段:
{FIXED : LAST([A])},用这个字段作为Card的展示值。 - Power BI:在可视化面板的「值」选项中,点击A字段下拉菜单,选择「汇总方式」→「最后一个非空白值」;也可以新建度量值:
Latest A = LASTNONBLANK('表'[A], '表'[Datetime]),用这个度量值展示。
3. 前端可视化组件(ECharts/Ant Design Charts)处理
如果是前端组件,需要先在数据层筛选出最新条目,再传递给Card:
const data = [ {A:20, B:76, Datetime:'2018-04-01T21:04:22Z'}, {A:21, B:75, Datetime:'2018-04-01T21:04:32Z'}, {A:20, B:75, Datetime:'2018-04-01T21:04:42Z'}, {A:20, B:75, Datetime:'2018-04-01T21:04:52Z'}, {A:21, B:76, Datetime:'2018-04-01T21:05:02Z'} ]; // 按时间排序后取最后一条 const sortedData = data.sort((a,b) => new Date(a.Datetime) - new Date(b.Datetime)); const latestData = sortedData[sortedData.length - 1]; // 此时latestData.A = 21,latestData.B = 76,直接传给Card组件即可
内容的提问来源于stack exchange,提问作者Mageshwaran
相关产品推荐
相关产品推荐

