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

将含多币种转换逻辑的SQL Server T-SQL语句转换为正确DAX表达式

SQL转DAX货币换算实现方案

原DAX代码错误原因

  1. DAX中VAR声明的变量为只读属性,不支持TOTAL = TOTAL +这类赋值修改操作
  2. SUMX为行上下文迭代函数,内部嵌套SUM会触发不必要的上下文转换,逻辑冲突
  3. 汇率换算逻辑与需求不匹配,未对应参数控制、原币种判断的规则

正确实现方式

1. 动态度量值(推荐,支持参数动态切换)

该方案适配透视表/可视化组件的维度分组,无需额外处理分组逻辑,把REASON、MONEDA_KEY(原币种字段)放到维度区域即可自动按要求分组计算:

换算后金额 = 
VAR 选中的目标币种 = SELECTEDVALUE(DIM_MONEDA[key], 1) -- 参数默认值为1,对应换算为DOP
VAR 原始金额合计 = SUM(FACT_DEALS[ADJUDICADO]) + SUM(FACT_DEALS[MONTO_COTIZADO])
VAR 当前行原币种 = SELECTEDVALUE(FACT_DEALS[MONEDA_KEY], 0) -- 原币种规则:1=DOP 2=USD
VAR 固定汇率 = 57
RETURN
SWITCH(
    选中的目标币种,
    -- 目标币种为DOP的换算逻辑
    1, SWITCH(
        当前行原币种,
        1, 原始金额合计,
        2, 原始金额合计 * 固定汇率,
        0
    ),
    -- 目标币种为USD的换算逻辑
    2, SWITCH(
        当前行原币种,
        1, 原始金额合计 / 固定汇率,
        2, 原始金额合计,
        0
    ),
    0
)

2. 静态计算表实现(固化结果,等效SQL查询输出)

如果需要直接生成和SQL输出结构完全一致的分组表,可以使用以下计算表代码,修改目标币种参数的值即可等效SQL中SET @CURRENCY的操作:

换算后分组表 = 
VAR 固定汇率 = 57
VAR 目标币种参数 = 1 -- 可修改为1(转DOP)或2(转USD)
-- 先按REASON、原币种分组聚合原始金额
VAR 分组聚合结果 = SUMMARIZE(
    FACT_DEALS,
    FACT_DEALS[REASON],
    FACT_DEALS[MONEDA_KEY],
    "原始金额合计", SUM(FACT_DEALS[ADJUDICADO]) + SUM(FACT_DEALS[MONTO_COTIZADO])
)
-- 新增换算后的金额列
RETURN
ADDCOLUMNS(
    分组聚合结果,
    "DOP", SWITCH(
        目标币种参数,
        1, SWITCH([MONEDA_KEY], 1, [原始金额合计], 2, [原始金额合计] * 固定汇率, 0),
        2, SWITCH([MONEDA_KEY], 1, [原始金额合计]/固定汇率, 2, [原始金额合计], 0),
        0
    ),
    "USD", SWITCH(
        目标币种参数,
        1, SWITCH([MONEDA_KEY], 1, [原始金额合计], 2, [原始金额合计] * 固定汇率, 0),
        2, SWITCH([MONEDA_KEY], 1, [原始金额合计]/固定汇率, 2, [原始金额合计], 0),
        0
    )
)

内容的提问来源于stack exchange,提问作者Cokoro R1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:06:00