Powerbi 查找ID';由yyyyweek_编号表示的日期中不存在
我有两个数据集,一个表示所有客户的列表,另一个表示他们的订单日期 订单日期采用yyyyweek_编号格式,因此,例如今天(2020-09-29)是第40周,订单日期将表示为202040 我想得到一份4天内没有下订单的经销商名单,即。30天或以下 60天或以下 90天或以下,以及 90多天 为了举例说明,假设客户数据集如下所示:Powerbi 查找ID';由yyyyweek_编号表示的日期中不存在,powerbi,dax,powerquery,powerbi-desktop,Powerbi,Dax,Powerquery,Powerbi Desktop,我有两个数据集,一个表示所有客户的列表,另一个表示他们的订单日期 订单日期采用yyyyweek_编号格式,因此,例如今天(2020-09-29)是第40周,订单日期将表示为202040 我想得到一份4天内没有下订单的经销商名单,即。30天或以下 60天或以下 90天或以下,以及 90多天 为了举例说明,假设客户数据集如下所示: +----+ | ID | +----+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | |
+----+
| ID |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
| 12 |
| 13 |
| 14 |
| 15 |
+----+
+----+-----------------+
| ID | Order_YYYY_WEEK |
+----+-----------------+
| 1 | 202001 |
| 2 | 202003 |
| 3 | 202004 |
| 5 | 202006 |
| 2 | 202008 |
| 3 | 202010 |
| 6 | 202012 |
| 8 | 202009 |
| 1 | 202005 |
| 10 | 202015 |
| 11 | 202018 |
| 13 | 202038 |
| 15 | 202039 |
| 12 | 202040 |
+----+-----------------+
订单表如下所示:
+----+
| ID |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
| 12 |
| 13 |
| 14 |
| 15 |
+----+
+----+-----------------+
| ID | Order_YYYY_WEEK |
+----+-----------------+
| 1 | 202001 |
| 2 | 202003 |
| 3 | 202004 |
| 5 | 202006 |
| 2 | 202008 |
| 3 | 202010 |
| 6 | 202012 |
| 8 | 202009 |
| 1 | 202005 |
| 10 | 202015 |
| 11 | 202018 |
| 13 | 202038 |
| 15 | 202039 |
| 12 | 202040 |
+----+-----------------+
我使用的切片器格式如下所示
比如说选择了30天或更少的按钮,
结果表应表示如下所示的表,其中包含订单表中不存在的客户表中的所有ID,其中订单_yyy _周为从今天开始的30天
+----+
| ID |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
| 14 |
+----+
步骤:
Calendar =
VAR
Days = CALENDAR ( DATE ( 2020, 1, 1 ), DATE ( 2020, 12, 31 ) )
RETURN
ADDCOLUMNS (
Days,
"Year Week", YEAR ( [Date] ) & WEEKNUM([Date])
)
现在,使用“标记为日期表”按钮在“表工具”功能区中将此表标记为日期表
3。将周转换为日期
Day ranges =
VAR Today = TODAY()
VAR CheckDate = 'Calendar'[Date] RETURN
SWITCH(TRUE(),
CheckDate - Today <= -90, "90+ days",
CheckDate - Today <= -60 && CheckDate - Today > -90 , "90 days or less",
CheckDate - Today <= -30 && CheckDate - Today > -60 , "60 days or less",
CheckDate - Today <= 0 && CheckDate - Today > -30 , "30 days or less",
"In the future"
)
为了实现这一点,我必须在Order表中创建一个计算列,第一天是一年中的第一天。这可能是可以改进的
StartYear = DATE(Left(Orders[Year week], 4), 01, 01)
接下来是Order表中需要的计算列,它标识一周的第一天。变量“DayNoInYear”将周数乘以7并减去7,得出一周的第一天,返回一年中的第n天。然后将其转换为带有变量“DateWeek”的日期:
6。在具有日期范围的日期表中创建计算列
Day ranges =
VAR Today = TODAY()
VAR CheckDate = 'Calendar'[Date] RETURN
SWITCH(TRUE(),
CheckDate - Today <= -90, "90+ days",
CheckDate - Today <= -60 && CheckDate - Today > -90 , "90 days or less",
CheckDate - Today <= -30 && CheckDate - Today > -60 , "60 days or less",
CheckDate - Today <= 0 && CheckDate - Today > -30 , "30 days or less",
"In the future"
)
步骤8和9
使用日期表中新创建的“日期范围”列创建切片器,并使用“是-否顺序”度量值创建一个可视表,将可视级别过滤器设置为“否”,如下面所附的屏幕截图所示
您好,这几乎可以按预期工作,但我这里的主要目标是显示到今天为止的所有数据,因此,例如,如果选择了60天或更少,那么它应该显示30天或更少以及30到60天的数据,依此类推,以更新“是-否顺序”度量。请尝试一下,如果这样做的技巧。还更新了第8/9节下的文本和新的屏幕截图(过滤器设置为“否”)