在我的Sense应用程序之一中分解自动生成的代码后,我遇到了很棒的自动日历功能,我进行了如下修改,但我不知道它是如何工作的!有人可以提供一些文件吗?
[autoCalendar]:
DECLARE FIELD DEFINITION Tagged ('$date')
FIELDS
Dual(Year($1), YearStart($1)) AS [Year] Tagged ('$axis', '$year')
,Dual('Q'&Num(Ceil(Num(Month($1))/3)),Num(Ceil(NUM(Month($1))/3),00)) AS [Quarter] Tagged ('$quarter')
,Dual(Year($1)&'-Q'&Num(Ceil(Num(Month($1))/3)),QuarterStart($1)) AS [YearQuarter] Tagged ('$axis', '$yearquarter')
,Month($1) AS [Month] Tagged ('$month')
,Dual(Year($1)&'-'&Month($1), monthstart($1)) AS [YearMonth] Tagged ('$axis', '$yearmonth')
,Dual('W'&Num(Week($1),00), Num(Week($1),00)) AS [Week] Tagged ('$weeknumber')
,Date(Floor($1)) AS [Date] Tagged ('$date')
/*User added date components*/
,Dual(Year($1), if(Year($1)=Year(today()),YearStart($1),null)) AS [ThisYear] Tagged ('$axis', '$thisyear')
,Dual(Year($1)&'-Q'&Num(Ceil(Num(Month($1))/3)), if(Year($1)=Year(today()),QuarterStart($1),null)) AS [ThisYearQuarter] Tagged ('$axis', '$thisyearquarter')
,Dual(Year($1)&'-'&Month($1), if(Year($1)=Year(today()), monthstart($1),null)) AS [ThisYearMonth] Tagged ('$axis', '$thisyearmonth')
,Dual(Year($1), if(Year($1)=(Year(today())-1),YearStart($1),null)) AS [LastYear] Tagged ('$axis', '$lastyear')
,Dual(Year($1)&'-Q'&Num(Ceil(Num(Month($1))/3)), if(Year($1)=(Year(today())-1),QuarterStart($1),null)) AS [LastYearQuarter] Tagged ('$axis', '$lastyearquarter')
,Dual(Year($1)&'-'&Month($1), if(Year($1)=(Year(today())-1), monthstart($1),null)) AS [LastYearMonth] Tagged ('$axis', '$lastyearmonth')
;
DERIVE FIELDS FROM FIELDS [StartDate] USING [autoCalendar] ;
是遍历每个条目还是遍历日历中的每一天?在我看来,它就像前者-可以用于非日期函数吗?
最佳答案
请查看有关Derived fields
的Qlik帮助
http://help.qlik.com/en-US/sense/2.2/Subsystems/Hub/Content/Scripting/derived-fields.htm
页面上的详细信息如下Derived fields
如果您具有一组相关的字段,或者字段包含的信息可以在创建尺寸或度量时分解为较小的部分,则可以创建可用于生成派生字段的字段定义。一个示例是date
字段,您可以从中导出几个属性,例如year
,month
,week number
或day name
。可以使用Qlik Sense
日期函数在维表达式中计算所有这些属性,但是另一种方法是创建日期类型的所有字段通用的日历定义。字段定义存储在数据加载脚本中。
声明日历字段定义
您使用Declare
语句创建派生字段的定义。在这里,您可以定义字段的不同属性,在本例中为日期相关属性。每个字段均描述为<expression> As field_name tagged tag
。设置一个或多个标签是可选的,但会影响派生字段的排序顺序。使用$1
引用应从中生成派生字段的数据字段。
Calendar:
DECLARE FIELD DEFINITION TAGGED '$date'
Parameters
first_month_of_year = 1
Fields
Year($1) As Year Tagged ('$numeric'),
Month($1) as Month Tagged ('$numeric'),
Date($1) as Date Tagged ('$date'),
Week($1) as Week Tagged ('$numeric'),
Weekday($1) as Weekday Tagged ('$numeric'),
DayNumberOfYear($1, first_month_of_year) as DayNumberOfYear Tagged ('$numeric')
;
参见:
Declare
使用
Derive
将数据字段映射到日历下一步是使用Derive语句将现有数据字段映射到日历。这将创建派生字段。您可以在数据加载脚本中以三种替代方式执行此操作:
通过字段名称映射特定字段。
DERIVE FIELDS FROM FIELDS OrderDate,ShippingDate USING Calendar;
使用一个或多个特定字段标签映射所有字段。
DERIVE FIELDS FROM EXPLICIT TAGS '$date' USING Calendar;
映射用字段定义的标签之一标记的所有字段(在上面的示例中为$ date)。
DERIVE FIELDS FROM IMPLICIT TAG USING Calendar;
在这种情况下,您可以在此处使用三个示例中的任何一个。
参见:
Derive
在可视化文件中使用
derived date
字段如果您已经创建了日历定义并映射了这些字段,则Qlik Sense可以识别派生的日期字段,如此处的示例所示。它们在“字段”资产面板的“日期和时间”字段部分中可用。在创建或编辑尺寸时,您还将在表达式编辑器中找到所有派生字段。
关于date - QlikSense AutoCalendar功能如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37724420/