在 DAX 中投影

Projecting in DAX

我对 DAX 语言还是比较陌生,但我的问题是如何根据过时的特定变量(例如假期绩效提升或年度低谷期)转发项目。

我有 2 个 table。一个具有多个 SKU 的销售数据,另一个具有一年中的时间变量。

我的预测值在一个小 table 中,其中包含日期范围和所需的更改百分比。

date    increase
1/1/2018    1
4/14/2018   .9
5/1/2018    1
6/1/2018    .85
8/1/2018    1.05
11/18/2018  1.25

我只知道使用带有 CALCULATETABLE 的 DATEADD 函数预测未来 30 天。

transOrder30:=VAR Days = -30
Return
SUMX(
CALCULATETABLE(sales,
    DATEADD(
        'Calendar'[Date] ,Days,DAY),
            ALL(sales[date])
            ),
    sales[organicOrder])

其中 organic_orders:=SUM(销售额[有机订单])

那么我如何将这个预计的 30 天复制到整个时间,然后乘以一年中的时间变化?

在 Excel 中就像 organicOrder*vlookup(date,A:B,2).

一样简单

我看过这些人 post 但它对我不起作用。

https://blog.gbrueckl.at/2015/04/recursive-calculations-powerpivot-dax/

感谢任何帮助!

示例:

Date    Orders      Date    ToY
2/1/2018    15      2/10/2018   1
2/2/2018    19      2/20/2018   1.2
2/3/2018    12      3/2/2018    1.5
2/4/2018    18          
2/5/2018    15          
2/6/2018    14          
2/7/2018    11          
2/8/2018    16          
2/9/2018    16          
2/10/2018   18          
2/11/2018   15.40   Projection   =avg(orders)*ToY   
2/12/2018   15.40   Projection      
2/13/2018   15.40   Projection      
2/14/2018   15.40   Projection      
2/15/2018   15.40   Projection      
2/16/2018   15.40   Projection      
2/17/2018   15.40   Projection      
2/18/2018   15.40   Projection      
2/19/2018   15.40   Projection      
2/20/2018   18.48   Projection      
2/21/2018   18.48   Projection      
2/22/2018   18.48   Projection      
2/23/2018   18.48   Projection      
2/24/2018   18.48   Projection      
2/25/2018   18.48   Projection      
2/26/2018   18.48   Projection      
2/27/2018   18.48   Projection      
2/28/2018   18.48   Projection      
3/1/2018    18.48   Projection      
3/2/2018    23.10   Projection      
3/3/2018    23.10   Projection      

创建一个新的 table 用于放置投影。一种方法是新建 Table > Projection = CALENDARAUTO().

现在您有了日期列,我们将添加一个预计订单计算列。

(我假设您有两个 table、SalesForecast,其中前者对应于前 10 个的 DateOrders 列示例数据的行,后者对应于 DateToY 数据。)

ProjectedOrders = 
    VAR AverageOrder = AVERAGE(Sales[Orders])
    VAR ToYDate = CALCULATE(MAX(Forecast[Date]),
                      Forecast[Date] < EARLIER(Projection[Date]))
    RETURN
        IF(Projection[Date] < MIN(Sales[Date]),
            BLANK(),
            IF(Projection[Date] IN VALUES(Sales[Date]),
                LOOKUPVALUE(Sales[Orders], Sales[Date], Projection[Date]),
                AverageOrder * LOOKUPVALUE(Forecast[ToY], Forecast[Date], ToYDate)
            ))

如果日期在您的任何销售数据之前,这将给出一个空白,并复制存在销售数据的日期的销售数据。否则,它会将平均订单乘以该行日期之前出现的最后一个 ToY 值。