背景信息:对于国际销售表中的每一行,我都需要检索过去特定日期的美元汇率,以便分析师确定汇率变动对销售数字的影响。然后,我将使用今天的汇率和过去的汇率之间的差,并将其乘以销售额确定影响。

实际问题:如何使以下公式适用于InternationalSales表中的每一行。

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


相关表是:


[SlicerTable]在[日期]栏中包含过去的相关日期集。该表是切片器的数据源。
带有[CurrencyCode],[Date]和[FX_Rate]列的“ ExchangeRates”。例如,1月1日的EUR到USD的汇率(“ EUR”,“ 01/01/2016”,1.143)
“ InternationalSales”具有很多列,但其中包括[SaleAmount],[Date]和[CurrencyCode]


对于国际销售中的每一行,我试图查找切片器中指定日期的销售货币汇率。

我已经尝试了很多事情,但是我总是遇到以下难题:

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

b)我无法编写度量,因为它不是聚合,但出现错误:

“无法在当前上下文中确定表'InternationalSales'中表'CurrencyCode'的值。请检查计算表达式中引用的所有列是否存在,并且没有循环依赖项。当a的公式度量直接指向一列,而不对该列执行任何汇总(例如求和,平均值或计数);该列没有单个值;它具有多个值,表的每一行都有一个,而没有已指定行”

最佳答案

显然我得到了解决方案,这只是将公式放在SUMX内,而切片器值放在VALUES函数内的问题。

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

关于ssas - 如何基于当前行和切片器上下文编写DAX度量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35646373/

10-12 17:10