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

标签 ssas powerpivot dax tabular

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

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

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

相关表格有:

  • “SlicerTable”在 [日期] 列中包含过去的一组相关日期。该表是切片器的数据源。

  • 'ExchangeRates' 包含 [CurrencyCode]、[Date] 和 [FX_Rate] 列。例如 ("EUR", "01/01/2016", 1.143) 表示 1 月 1 日欧元对美元的汇率

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

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

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

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

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

“无法在当前上下文中确定表‘InternationalSales’中列‘CurrencyCode’的值。检查计算表达式中引用的所有列是否存在,并且没有循环依赖性。这也可能发生在度量的公式直接引用一列,而不对该列执行任何聚合(例如求和、平均值或计数)。该列没有单个值;它有很多值,表的每一行一个, 并且没有指定行"

最佳答案

显然我得到了解决方案,只需将公式放在 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/

相关文章:

ssas - MDX 对月份进行求和,并包含当月的非空度量值

ssas - 将一列中一定百分比的值替换为另一列中的值

powerbi - DAX VAR 在度量代码中间定义命名变量

PowerBI - 计算具有表用户值的行数

powerbi - 如何在PowerBI中提取文本直到URL的第三个斜线

sql - 数据透视表字段默认折叠

sql-server - 无法建立连接,因为目标机器主动拒绝它 127.0.0.1 :2382

powerpivot - 如何强制 powerpivot 关系为一对一?

powerbi - DirectQuery 模式下的 AAS 表格模型性能优势

excel - 获取特定类别的最后可用日期