首页 > 解决方案 > Dax 中自定义 52/53 周日期表的上周销售额总和

问题描述

我正在尝试创建一个度量来计算上周销售额的总和。我的日历是自定义的,并保存在日期表中,从 2 月开始,可以是 52 或 53 周年。

下面的代码来自这个方便的 youtube 教程 ( https://www.youtube.com/watch?v=jclWnA7pEvY ) 但如果我不在 52 周年中,我不知道如何在第 1 周容纳任何东西.

在下面的代码中,[Week_WOY] 是 1-53 之间的数字,[Year_Uid] 是年份 - 例如 2015、2016 等。

我在 VS 中创建表格模型,然后在部署后在 Live Query 模式下使用 PowerBI 访问。令人讨厌的是,这意味着我不能使用某些 DAX 表达式(例如 SELECTEDVALUE)。

逻辑上我想我想:a)确定当前周是否是第 1 周 b)找到上一年的周数 c)返回该(b)周数的销售额总和

这是我目前拥有的代码:

LastWeekTest:=

VAR CurrentWeek = IF ( HASONEVALUE ( 'Date'[Week_WOY]), VALUES ( 'Date'[Week_WOY]) )
VAR CurrentYear = IF ( HASONEVALUE ( 'Date'[Year_Uid] ), VALUES ( 'Date'[Year_Uid] ) )
VAR MaxWeekNumber = CALCULATE(MAX('Date'[Week_WOY]), All('Date'))

RETURN
SUMX(
    FILTER(ALL('Date'),

IF(CurrentWeek = 1,
('Date'[Week_WOY] = MaxWeekNumber&& 'Date'[Year_Uid] = CurrentYear - 1),        
('Date'[Week_WOY] = CurrentWeek - 1 && 'Date'[Year_Uid] = CurrentYear)


)),
'Sales'[Sales - Inc VAT £]
)

标签: powerbidaxssas-tabular

解决方案


最好的解决方案是在您的日期表中添加一列。该专栏就是我所说的 WeekIndex。这是一个每周递增 1 的值。我没有设置 52/53 周日期暗淡的设置,但您可以在我的 DimDate中看到此类列的示例。使用这样的列,您可以编写如下所示的度量:

Sales = SUM ( 'Sales'[Sales - Inc VAT £] )
Sales Prior Week =
VAR PriorWeek = MAX ( 'Date'[WeekIndex] ) - 1
RETURN
  CALCULATE (
    [Sales],
    ALL ( 'Date' ),
    'Date'[WeekIndex] = PriorWeek
  )

如果您已经有日期维度,那么推导 [WeekIndex] 通常非常简单。与当前周相比,对年-周对进行明确计数通常是最容易的。

否则,如果您出于某种原因想避免增强模型:

Sales Prior Week =
VAR CurrentWeek = MAX ( 'Date'[Week_WOY] )
VAR CurrentYear = MAX ( 'Date'[Year_Uid] )
VAR PriorYear = IF ( CurrentWeek = 1, CurrentYear - 1, CurrentYear )
VAR PriorWeek =
  IF (
    CurrentWeek = 1,
    CALCULATE (
      MAX ( 'Date'[Week_WOY] ),
      ALL ( 'Date' ),
      'Date'[Year_Uid] = PriorYear
    ),
    CurrentWeek - 1
  )
RETURN
  CALCULATE (
    [Sales],
    ALL ( 'Date' ),
    'Date'[Year_Uid] = PriorYear,
    'Date'[Week_WOY] = PriorWeek
  )

一般来说,我喜欢使用时间智能MAX来获取当前值,而不是 aSELECTEDVALUE或 an IF ( HASONEVALUE, ...)。这与实现内置时间智能功能的方式一致。

此外,SELECTEDVALUE在更高版本的表格中。如果您因为缺少它而感到痛苦,则应该推动升级。


推荐阅读