You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DAX实现多股票每日环比涨幅(含基准值对比)的问题求助

DAX实现多股票每日环比涨幅(含基准值对比)的问题求助

一、资源与样本数据

  • 样本PBIX文件:Here is the Sample PBIX File - Here
  • 样本数据表:StockQuoteTable,包含字段:
    • StartDate
    • EndDate
    • QuotePull.Column1.CH_SYMBOL(股票代码)
    • QuotePull.Column1.CH_TRADE_HIGH_PRICE(当日最高价)
    • QuotePull.Column1.CH_TRADE_LOW_PRICE(当日最低价)
    • QuotePull.Column1.CH_OPENING_PRICE(开盘价)
    • QuotePull.Column1.CH_CLOSING_PRICE(收盘价)
    • QuotePull.Column1.CH_LAST_TRADED_PRICE(当日最后成交价)
    • QuotePull.Column1.CH_PREVIOUS_CLS_PRICE(前收盘价)
    • QuotePull.Column1.CH_TOT_TRADED_QTY(成交量)
    • QuotePull.Column1.CH_TOT_TRADED_VAL(成交金额)
    • QuotePull.Column1.CH_52WEEK_HIGH_PRICE(52周最高价)
    • QuotePull.Column1.CH_52WEEK_LOW_PRICE(52周最低价)
    • QuotePull.Column1.CH_TOTAL_TRADES(成交笔数)
    • QuotePull.Column1.CH_TIMESTAMP(交易日期)
    • QuotePull.Column1.VWAP(加权平均价)

样本数据示例:

CH_SYMBOLStartDateEndDateCH_TRADE_HIGH_PRICECH_TRADE_LOW_PRICECH_OPENING_PRICECH_CLOSING_PRICECH_LAST_TRADED_PRICECH_PREVIOUS_CLS_PRICECH_TOT_TRADED_QTYCH_TOT_TRADED_VALCH_52WEEK_HIGH_PRICECH_52WEEK_LOW_PRICECH_TOTAL_TRADESCH_TIMESTAMPVWAP
HDFCBANK01-Jan-2331-Dec-231714.9169616971709.251708.651705.2512505713213536501051757.51460.2526414329-Dec-231707.51
HDFCBANK01-Jan-2331-Dec-231721.417021709.31705.251708.851703.322038235377130478591757.51460.2542306228-Dec-231711.26
IREDA01-Dec-2331-Dec-23114.298.3102110.75111.15108.316764862718085063262123.25052750618-Dec-23107.87
SBIN01-Jan-2331-Dec-23619.9613.1615614.25614.2614.15117062557210878841629.55499.3528515811-Dec-23615.99

二、问题描述

你希望对比三只股票的每日环比涨幅(Day-on-Day Growth %),但现有DAX度量值无法正确计算,推测原因是所有股票数据在同一张表中,且用CH_SYMBOL作为图例区分时,代码没有按股票分组计算前一日数据。

你的现有DAX代码:

'StocksList'[Growth] = VAR currDate = SELECTEDVALUE('StocksList'[QuotePull.Column1.CH_TIMESTAMP])

VAR preDate = CALCULATE(
MAX('StocksList'[QuotePull.Column1.CH_TIMESTAMP]),
FILTER(
'StocksList',
'StocksList'[QuotePull.Column1.CH_TIMESTAMP] < currDate
)
)

VAR DoDchange = DIVIDE(
CALCULATE(
MAX('StocksList'[QuotePull.Column1.CH_LAST_TRADED_PRICE]),
'StocksList'[QuotePull.Column1.CH_TIMESTAMP] = currDate
) - CALCULATE(
MAX('StocksList'[QuotePull.Column1.CH_LAST_TRADED_PRICE]),
'StocksList'[QuotePull.Column1.CH_TIMESTAMP] = preDate
),
CALCULATE(
MAX('StocksList'[QuotePull.Column1.CH_LAST_TRADED_PRICE]),
'StocksList'[QuotePull.Column1.CH_TIMESTAMP] = preDate
),
0
)

RETURN
DoDchange

补充需求(编辑后):希望实现对比每只股票相对于其最早交易日基准值的涨跌幅,消除价格绝对值差异,直观对比走势。

三、解决方案

1. 修正每日环比涨幅(Day-on-Day)

问题核心:现有代码找preDate时没有限定同一股票,导致取到其他股票的日期。需要在FILTER中添加股票代码的过滤条件:

'StocksList'[每日环比涨幅] = 
VAR currStock = SELECTEDVALUE('StocksList'[QuotePull.Column1.CH_SYMBOL])
VAR currDate = SELECTEDVALUE('StocksList'[QuotePull.Column1.CH_TIMESTAMP])
-- 找到当前股票的前一个交易日
VAR preDate = CALCULATE(
    MAX('StocksList'[QuotePull.Column1.CH_TIMESTAMP]),
    FILTER(
        ALL('StocksList'),
        'StocksList'[QuotePull.Column1.CH_SYMBOL] = currStock &&
        'StocksList'[QuotePull.Column1.CH_TIMESTAMP] < currDate
    )
)
-- 获取当前日期和前一交易日的最后成交价
VAR currPrice = CALCULATE(
    MAX('StocksList'[QuotePull.Column1.CH_LAST_TRADED_PRICE]),
    'StocksList'[QuotePull.Column1.CH_TIMESTAMP] = currDate
)
VAR prePrice = CALCULATE(
    MAX('StocksList'[QuotePull.Column1.CH_LAST_TRADED_PRICE]),
    'StocksList'[QuotePull.Column1.CH_SYMBOL] = currStock &&
    'StocksList'[QuotePull.Column1.CH_TIMESTAMP] = preDate
)
-- 计算环比涨幅,处理除数为0的情况
VAR DoDchange = DIVIDE(currPrice - prePrice, prePrice, 0)
RETURN
DoDchange

2. 相对于最早交易日的累计涨幅(满足编辑后需求)

如果需要对比每只股票从其第一个交易日开始的累计涨跌幅(以首日价格为基准),可以用这个度量值:

'StocksList'[累计涨幅(相对首日)] = 
VAR currStock = SELECTEDVALUE('StocksList'[QuotePull.Column1.CH_SYMBOL])
VAR currPrice = MAX('StocksList'[QuotePull.Column1.CH_LAST_TRADED_PRICE])
-- 找到当前股票的最早交易日价格
VAR firstPrice = CALCULATE(
    MAX('StocksList'[QuotePull.Column1.CH_LAST_TRADED_PRICE]),
    FILTER(
        ALL('StocksList'),
        'StocksList'[QuotePull.Column1.CH_SYMBOL] = currStock &&
        'StocksList'[QuotePull.Column1.CH_TIMESTAMP] = MIN('StocksList'[QuotePull.Column1.CH_TIMESTAMP])
    )
)
-- 计算累计涨幅,转换为百分比格式(可选)
VAR growthPercent = DIVIDE(currPrice - firstPrice, firstPrice, 0)
RETURN
growthPercent -- 若要显示百分比,可写成 growthPercent * 100

四、可视化使用建议

  • 折线图设置:
    • X轴:QuotePull.Column1.CH_TIMESTAMP(交易日期)
    • Y轴:选择上面的任一涨幅度量值
    • 图例:QuotePull.Column1.CH_SYMBOL(股票代码)
  • 这样就能直观对比不同股票的涨幅趋势,不受价格绝对值差异影响。

备注:内容来源于stack exchange,提问作者Joker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 12:53:11