【问题标题】:Sum of last week's sales for custom 52/53 week date table in DaxDax 中自定义 52/53 周日期表的上周销售额总和
【发布时间】:2019-09-08 10:30:19
【问题描述】:

我正在尝试创建一个度量来计算上周销售额的总和。我的日历是自定义的,并保存在日期表中,从 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 £]
)

【问题讨论】:

    标签: powerbi dax ssas-tabular


    【解决方案1】:

    最好的解决方案是在您的日期表中添加一列。该专栏就是我所说的 WeekIndex。这是一个每周递增 1 的值。我没有设置 52/53 周日期暗淡,但您可以在 my 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 来实现时间智能以获取当前值,而不是SELECTEDVALUEIF ( HASONEVALUE, ...)。这与内置时间智能功能的实现方式一致。

    另外,SELECTEDVALUE 在 Tabular 的更高版本中。如果你因为缺少它而感到痛苦,你应该推动升级。

    【讨论】:

    • 谢谢,这太棒了。很高兴我在整个周末都把头撞在墙上之后,今天早上有机地到达了你答案的第一部分,所以很高兴验证它是正确的方法。我在源视图中使用了 dense_rank 来运行 week_number 计数。我对 DAX 很陌生,您回答的第二部分非常有帮助。感谢您花时间回答我的问题。
    • @greggyb。这很完美!我试过这个,它可以每周获得结果。我还需要深入了解每天的数据,同时每周显示结果。我该怎么做?
    猜你喜欢
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 2019-08-18
    • 2017-10-26
    • 1970-01-01
    • 2020-06-09
    相关资源
    最近更新 更多