【问题标题】:Qlik -create calculated Dimension to show barchart from month start untill filter date(5-4-4 calendar)Qlik - 创建计算维度以显示从月份开始到过滤日期的条形图(5-4-4 日历)
【发布时间】:2021-09-22 10:51:45
【问题描述】:

我有一个主日历 (5-4-4),如下图所示。

我在销售表中有一个日期列。我在选择窗格(过滤器)中使用该日期列。

示例场景:

现在我选择了选择窗格日期“15-10-2020”,条形图仅显示“15-10-2020”销售。但我需要查找主日历并显示从 start_month 日期到所选日期的维度

预期输出:条形图需要显示来自 “2020 年 9 月 28 日”到“2020 年 15 月 10 日”

【问题讨论】:

    标签: date calendar qlikview qliksense qlik-expression


    【解决方案1】:

    方法是生成从Start_MonthTransDate的日期(组成字段名)

    假设这是我们拥有的数据:

    Transactions:
    Load * inline [
    TransDate , Value
    15-10-2020, 100
    27-07-2021, 50
    ];
    
    MasterCalendar_Temp:
    Load * inline [
    Start_Month, End_Month , Month_number
    28-09-2020 , 01-11-2020, 1
    02-11-2020 , 29-11-2020, 2
    30-11-2020 , 27-12-2020, 3
    28-12-2020 , 31-01-2021, 4
    01-02-2021 , 28-02-2021, 5
    01-03-2021 , 28-03-2021, 6
    29-03-2021 , 02-05-2021, 7
    03-05-2021 , 30-05-2021, 8
    31-05-2021 , 27-06-2021, 9
    28-06-2021 , 01-08-2021, 10
    02-08-2021 , 29-08-2021, 11
    30-08-2021 , 26-09-2021, 12
    ];
    

    第一步是找出每个TransDate 属于哪个区间。为此,我们将使用IntervalMatch 函数

    Inner Join
    IntervalMatch ( TransDate )
    Load
      Start_Month,
      End_Month
    Resident
      MasterCalendar_Temp
    ;
    

    此时MasterCalendar_Temp 表将如下所示:

    所以我们现在知道每个TransDate 的周期

    下一步是将MasterCalendar_Temp 数据加载到单独的表中,但将Start_MonthTransDate 连接为一个:

    NoConcatenate
    
    MasterCalendar:
    Load 
      Start_Month,
      End_Month,
      Start_Month & '_' & TransDate as Start_TransDate_Temp
    Resident MasterCalendar_Temp;
    
    // we dont need this table anymore
    Drop Table MasterCalendar_Temp;
    

    一旦我们有了它,我们就可以开始创建我们的日期了

    // loop through each value in Start_TransDate_Temp field
    // for each step extract Start_Month and TransDate values
    // use these two values to generate the dates between them
    for i = 1 to FieldValueCount('Start_TransDate_Temp')
      let value = FieldValue('Start_TransDate_Temp', $(i));
      let startDate = num(SubField('$(value)', '_', 1));
      let transDate = num(SubField('$(value)', '_', 2));
    
      Dates:
      LOAD
        date('$(transDate)', 'DD-MM-YYYY') as TransDate,
        date($(startDate) + IterNo() - 1, 'DD-MM-YYYY') AS DisplayDates
      AUTOGENERATE (1)
      WHILE 
        $(startDate) + IterNo() -1 <= $(transDate)
      ;
    
    next
    
    // we dont need this table anymore
    Drop Table MasterCalendar;
    

    就是这样!

    重新加载脚本后,我们将有两个表:

    Transactions 表未被触及,Dates 表将具有如下值:

    如您所见,每个TransDate 都有日期范围(从对应的Start_MonthTransDate

    如果我们构建一个简单的条形图(DisplayDates 作为维度,sum(Value) 作为度量)并且不应用任何选择:

    如果选择一个TransDate:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 2010-11-09
      • 1970-01-01
      相关资源
      最近更新 更多