首页 文章

如何根据当前行和切片器上下文编写DAX度量?

提问于
浏览
3

Background Info :对于国际销售表中的每一行,我需要检索过去特定日期的美元汇率,以便分析师可以确定汇率变化对销售数据的影响 . 然后,我将使用今天的汇率与过去的汇率之间的差额,并将其乘以销售额以确定影响 .

Actual problem :如何使以下公式适用于InternationalSales表中的每一行 .

IF( HASONEVALUE(SlicerTable[Date]),
LOOKUPVALUE(ExchangeRates[FX_Rate],
            ExchangeRates[CurrencyCode], InternationalSales[CurrencyCode],
            ExchangeRates[Date], SlicerTable[Date]
            ), 
 BLANK())

相关表格是:

  • 'SlicerTable'包含[Date]列中过去的相关日期集 . 该表是切片器的数据源 .

  • 'ExchangeRates'包含[CurrencyCode],[Date]和[FX_Rate]列 . 例如,1月1日汇率为EUR兑换USD(“EUR”,“01/01/2016”,1.143)

  • 'InternationalSales'有很多列,但其中包括[SaleAmount],[Date]和[CurrencyCode]

对于InternationalSales中的每一行,我试图在切片机中指定的日期查找销售货币的汇率 .

我尝试了很多东西,但我总是遇到以下困境:

a)我无法编写计算列,因为它是在处理时计算的,并且用户在切片机中选择了“日期”

b)我不能写一个度量因为它不是聚合,我得到错误:

“无法在当前上下文中确定表'InternationalSales'中列'CurrencyCode'的值 . 检查计算表达式中引用的所有列是否存在,并且没有循环依赖关系 . 当公式为a时,也会出现这种情况 . measure直接指向一列而不对该列执行任何聚合(例如求和,平均或计数) . 该列没有单个值;它有许多值,表中每行一个,并且没有已指定行“

1 回答

  • 1

    显然我得到了解决方案,只需将公式放在SUMX中,并将切片器值放在VALUES函数中 .

    IF( HASONEVALUE(SlicerTable[Date]),
       SUMX(InternationalSales,
          LOOKUPVALUE(ExchangeRates[FX_Rate],
                   ExchangeRates[CurrencyCode], InternationalSales[CurrencyCode],
                   ExchangeRates[Date], VALUES(SlicerTable[Date])
                   ) * InternationalSales[SaleAmount]
       ), 
     BLANK())
    

相关问题