【发布时间】:2016-01-09 00:35:52
【问题描述】:
首先,虽然这可能有点无关紧要,但这是我在社区的第一篇文章,这是因为我上周才开始学习 DAX。我认为自己在 Excel 方面相当先进,但我才刚刚开始了解 DAX 的功能,我是来学习的。
我将首先解释我要做什么。
我有 2 个不同的表,一个 DimensionsExchangeRate 表和一个 FactsSales 表。
FactsSales 表包含美国(美元)和英国(英镑)这两个国家/地区的销售额,而DimensionsExchangeRate 表包含按月的日期和汇率(美元兑英镑)。我想要的是转换所有的 GBP 销售额,并为 GBP 进行 Running Total Measure。
我设法完成了这两件事,我通过在 FactsSales 表(汇率列和产品销售额 GBP 列)中创建两个计算列来做到这一点。在此之后,我设法创建了 Running Total Product Sales GBP 列。
现在您可能会想“好吧,对您有好处,现在停止吹牛,告诉我们您想要什么”。我想为所有内容创建度量,而不是一个计算列。
事实上,在 Marco Russo(全能的上帝)的帮助下,我成功地编写了汇率度量,并且还成功编写了 Product Sales GBP 度量;所以基本上你会认为我不需要任何这些列。但是,我遇到的问题是创建 Running Total Product Sales GBP 度量,除非我的 Product Sales GBP 是计算列。如果这是一个措施,我无法让它发挥作用。
我将在下面写下我使用过的公式,以便您更好地理解。首先,这就是我的 DimensionsExchangeRate 表的样子。
较低的最高汇率日期
12/15/15 11/18/15 1.523
11/18/15 10/25/15 11/18/15 1.512
10/25/15 9/8/15 10/25/15 1.554
9/8/15 9/8/15 1.593
基本上,汇率将用于上下限之间的销售。
1)
Exchange Rate Measure:=AVERAGEx(FactsSalesTable, 1 *
LOOKUPVALUE(DimensionsExchangeRate[Exchange Rate],DimensionsExchangeRate[Date],
CALCULATE(MAX(DimensionsExchangeRate[Date]),
FILTER(DimensionsExchangeRate, FactsSalesTable[Date]>=DimensionsExchangeRate[Lower])))) -> this measure works ok.
2)
Exchange Rate Calculated Column = LOOKUPVALUE(DimensionsExchangeRate[Exchange Rate],DimensionsExchangeRate[Date],
CALCULATE(MAX(DimensionsExchangeRate[Date]),
FILTER(DimensionsExchangeRate, FactsSalesTable[Date]>=DimensionsExchangeRate[Lower]))) -> this calculated column works ok
3)
Product Sales GBP Measure:=SUMX(FactsSalesTable, IF(FactsSalesTable[Country]="USA", FactsSalesTable[Product Sales]/
AVERAGEx(AA5, 1 *
LOOKUPVALUE(DimensionsExchangeRate[Exchange Rate],DimensionsExchangeRate[Date],
CALCULATE(MAX(DimensionsExchangeRate[Date]),
FILTER(DimensionsExchangeRate, FactsSalesTable[Date]>=DimensionsExchangeRate[Lower])))),
FactsSalesTable[Product Sales])) -> this measure works ok
但是现在,当我尝试创建 Product Sales To Date GBP Measure(又名“Running Total”)时,我无法让它发挥作用。
4)
Product Sales To Date GBP:=Calculate(SUMX(FactsSalesTable, IF(FactsSalesTable[Marketplace]="USA", FactsSalesTable[Product Sales]/
AVERAGEx(FactsSalesTable, 1 *
LOOKUPVALUE(DimensionsExchangeRate[Exchange Rate],DimensionsExchangeRate[Date],
CALCULATE(MAX(DimensionsExchangeRate[Date]),
FILTER(DimensionsExchangeRate, FactsSalesTable[Date]>=DimensionsExchangeRate[Lower])))),
FactsSalesTable[Product Sales])),
FILTER(ALLEXCEPT(FactsSalesTable,DimensionsProducts[Product],DimensionsProducts[Country]), FactsSalesTable[Date] <=MAX (FactsSalesTable[Date] ) ))
此公式的问题在于“Calculate(Max())”函数(来自“AverageX”)将返回 DimensionExchangeRate 表中具有 ExchangeRate 的第一个日期,以及 FactsSalesTable (在“Calculate(MAX)”检索的日期之前)我得到一个 NUM!错误,因为外部“过滤器”(第一个“计算”函数)。
例如,如果我在 DimensionsExchangeRate 表中的第一个(最早)日期是 Apr/1/2015,而我的 FactsSalesTable 包含从 Jan/1/2015 开始的日期,我会收到以下日期错误:Jan/1/2015 – 2015 年 3 月 31 日。
正如我所说,为了完成工作,我必须为 Product Sales GBP =IF(FactsSalesTable[MarketPlace]="USA",FactsSalesTable[Product Sales]/FactsSalesTable[Exchange率],FactsSalesTable[产品销售额])
现在,因为我有一个计算列,我可以轻松地为运行总计创建一个度量。
Total Product Sales GBP To Date:=CALCULATE (SUM (FactsSalesTable[Product Sales GBP] ),
FILTER(ALLEXCEPT(FactsSalesTable,DimensionsProducts[Product],DimensionsProducts[Country]), FactsSalesTable[Date] <= MAX ( FactsSalesTable[Date] )))
再次,我想要的是使运行总产品销售额 GBP 的度量值起作用,而没有产品销售额 GBP 的计算列。很抱歉发了这么长的帖子,但这是为了让我可以清楚地解释情况。
【问题讨论】:
标签: excel powerpivot dax