Powerbi 查找ID';由yyyyweek_编号表示的日期中不存在

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 | |

我有两个数据集,一个表示所有客户的列表,另一个表示他们的订单日期 订单日期采用yyyyweek_编号格式,因此,例如今天(2020-09-29)是第40周,订单日期将表示为202040

我想得到一份4天内没有下订单的经销商名单,即。30天或以下 60天或以下 90天或以下,以及 90多天

为了举例说明,假设客户数据集如下所示:

+----+
| 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 |
+----+

步骤:

  • 在客户表和订单表中的客户id之间创建关系(如果还没有)
  • 创建一个日期表
  • 将周转换为订单表中新计算列中的日期
  • 在客户表和订单表中的客户id之间创建关系
  • 在日期表和订单表中创建日期之间的关系
  • 在日期表中创建具有日期范围的计算列(“30天或更短”等)
  • 创建度量以标识是否下了订单
  • 添加日期范围为date table的切片器和客户id为visual table的切片器
  • 将度量值添加到“筛选器”窗格上的表中并设置为“否”
  • 这些步骤中的一些步骤在下面有更多的细节

    2。创建日期表

    我们可以通过PowerQuery或DAX来实现这一点。以下是DAX版本:

    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节下的文本和新的屏幕截图(过滤器设置为“否”)