我正在尝试创建一种度量来计算上周的销售额之和。我的日历是自定义的,并保存在日期表中(从2月开始),可以是52周或53周。
下面的代码来自这个方便的youtube教程(https://www.youtube.com/watch?v=jclWnA7pEvY),但是如果我不在52周的一年里,我将无法解决如何适应第一周的一切。
在下面的代码中,[Week_WOY]是1到53之间的数字,[Year_Uid]是年份-例如2015、2016等。
我要在VS中创建表格模型,然后在部署后以实时查询模式使用PowerBI进行访问。令人讨厌的是,这意味着我不能使用某些DAX表达式(例如SELECTEDVALUE)。
逻辑上,我想我想: a)确定当前星期是否为第1周 b)查找上一年的周数 c)返回该(b)周号的销售总额
这是我目前的代码:
users
|-- userid1
| |-- chats
| | |-- chatId1 : userid2
| | |-- chatId2 : userid3
| |-- name : user title
| |-- number : user phone number
|
|-- userid2
| |-- chats
| | |-- chatId1 : userid1
| | |-- chatId3 : userid3
| |-- name : user title
| |-- number : user phone number
chat
|-- chatid1
| |-- messageid1
| | |-- createAt : creation time
| | |-- message : message
| | |-- senderID : id of the sender
| |
| |-- messageid1
| | |-- createAt : creation time
| | |-- message : message
| | |-- senderID : id of the sender
|
|-- chatid2
| |-- messageid1
| | |-- createAt : creation time
| | |-- message : message
| | |-- senderID : id of the sender
答案 0 :(得分:0)
最好的解决方案是在日期表中添加一列。那一列就是我所说的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]。通常,最简单的方法是在少于当前周的情况下进行不同的Year-Week对计数。
否则,如果您出于某种原因想要避免增强模型,则:
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
而不是SELECTEDVALUE
或IF ( HASONEVALUE, ...)
来获取当前值来实现时间智能。这与实现内置时间智能功能的方式保持一致。
此外,SELECTEDVALUE
在Tabular的更高版本中。如果您因缺少它而感到痛苦,则应该推动升级。