Qlik - 创建计算维度以显示从月份开始到过滤日期(5-4-4 日历)的条形图
Qlik -create calculated Dimension to show barchart from month start untill filter date(5-4-4 calendar)
我有一个如下图所示的主日历 (5-4-4)。
我在销售 table 中有一个日期列。我在选择窗格(过滤器)中使用该日期列。
示例场景:
现在我选择了选择窗格日期“15-10-2020”,条形图仅显示“15-10-2020”的销售额。但我需要查找主日历并显示从 start_month 日期到所选日期
的维度
预期输出: 条形图需要显示维度
“28-09-2020”到“15-10-2020”
方法是生成从 Start_Month
到 TransDate
的日期(由字段名称组成)
假设这是我们拥有的数据:
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
table 将如下所示:
所以我们现在知道每个 TransDate
的周期
下一步是将 MasterCalendar_Temp
数据加载到单独的 table 中,但将 Start_Month
和 TransDate
连接成一个:
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;
就是这样!
重新加载脚本后,我们将有两个 tables:
Transactions
table 保持不变,Dates
table 将具有如下值:
如您所见,对于每个 TransDate
,我们都有日期范围(从相应的 Start_Month
到 TransDate
如果我们构建一个简单的条形图(以 DisplayDates
为维度,sum(Value)
为度量)并且不应用任何 select 离子:
如果 select 一个 TransDate
:
我有一个如下图所示的主日历 (5-4-4)。
我在销售 table 中有一个日期列。我在选择窗格(过滤器)中使用该日期列。
示例场景:
现在我选择了选择窗格日期“15-10-2020”,条形图仅显示“15-10-2020”的销售额。但我需要查找主日历并显示从 start_month 日期到所选日期
的维度预期输出: 条形图需要显示维度 “28-09-2020”到“15-10-2020”
方法是生成从 Start_Month
到 TransDate
的日期(由字段名称组成)
假设这是我们拥有的数据:
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
table 将如下所示:
所以我们现在知道每个 TransDate
下一步是将 MasterCalendar_Temp
数据加载到单独的 table 中,但将 Start_Month
和 TransDate
连接成一个:
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;
就是这样!
重新加载脚本后,我们将有两个 tables:
Transactions
table 保持不变,Dates
table 将具有如下值:
如您所见,对于每个 TransDate
,我们都有日期范围(从相应的 Start_Month
到 TransDate
如果我们构建一个简单的条形图(以 DisplayDates
为维度,sum(Value)
为度量)并且不应用任何 select 离子:
如果 select 一个 TransDate
: