powerbi - 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 £]
)
解决方案
最好的解决方案是在您的日期表中添加一列。该专栏就是我所说的 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
在更高版本的表格中。如果您因为缺少它而感到痛苦,则应该推动升级。
推荐阅读
- javascript - 如何在 django 模板中设置默认值
- reactjs - 为什么两条路由在具有不同路径链接的反应js中调用同一页面
- javascript - 如何将href自动设置为另一个div onclick函数href
- amazon-web-services - 基于自定义 Cloudwatch 警报的自动缩放规则
- go - 从另一个包调用资源时出现运行时恐慌
- java - 如何存储在数据库中创建的 Trie 数据结构并在生产中实现到大型系统?
- c# - 无法使用 websocket 在 C# 中连接槽代理
- android - 未找到:“dart:html”导入“dart:html”;我不需要 dart:html 我也没有使用过,但我尝试通过导入它,但错误不会发生
- flutter - 颤振 | 本地通知:ZonedSchedule 只触发一次
- r - 这个 ifelse 命令有什么问题?(排除与 if 语句不匹配的行)