Pentaho Workspace(Mondrian) AnalyzerDateFormat Week 重叠两个月仅显示一周的开始日期
Issue with relative date filtering Pentaho Workspace(Mondrian) AnalyzerDateFormat Week overlaps two Months only showing beginning days of the week
我有一个正确构建的 table dimDate。我在事实 table 中使用代理键 DC_tk('20211202') 映射到 dimDate CCYYMMDD('20211202') 中的主键,它与 dimDate 中的 date_tk 相关。问题是,当在分析器过滤器中选择前一周时,Pentaho 分析器中显示的月份是 11 月而不是 12 月,换句话说只是一周的开始日期。我怀疑这是因为第 49 周与 11 月和 12 月重叠。如果列表过滤器值中的 Select 设置为第 49 周,则可以过滤两行 49。
代码如下:
<Dimension type="TimeDimension" visible="true" highCardinality="false" name="EXCREATEDDATE">
<Hierarchy name="Created Date" visible="true" hasAll="true" primaryKey="date_tk">
<Table name="DimDate" schema="dbo">
</Table>
<Level name="Created Year" visible="true" column="YEAR" type="String" uniqueMembers="true" levelType="TimeYears" hideMemberIf="Never">
<Annotations>
<Annotation name="AnalyzerDateFormat">
<![CDATA[[yyyy]]]>
</Annotation>
</Annotations>
</Level>
<Level name="Created Month" visible="true" column="MONTH" type="String" uniqueMembers="false" levelType="TimeMonths" hideMemberIf="Never" captionColumn="month_short_desc">
<Annotations>
<Annotation name="AnalyzerDateFormat">
<![CDATA[[yyyy].[M]]]>
</Annotation>
</Annotations>
</Level>
<Level name="Created Week" visible="true" column="week_of_year" type="String" uniqueMembers="false" levelType="TimeWeeks" hideMemberIf="Never">
<Annotations>
<Annotation name="AnalyzerDateFormat">
<![CDATA[[yyyy].[M].[w]]]>
</Annotation>
</Annotations>
</Level>
<Level name="Created Day" visible="true" column="day_of_month" type="String" uniqueMembers="false" levelType="TimeDays" hideMemberIf="Never">
<Annotations>
<Annotation name="AnalyzerDateFormat">
<![CDATA[[yyyy].[M].[w].[d]]]>
</Annotation>
</Annotations>
</Level>
<Level name="Created Date" visible="true" column="DateCCYYMMDD" type="String" uniqueMembers="false" levelType="TimeDays" hideMemberIf="Never">
<Annotations>
<Annotation name="AnalyzerDateFormat">
<![CDATA[[yyyy].[M].[w].[d].[yyyyMMdd]]]>
</Annotation>
</Annotations>
</Level>
</Hierarchy>
<DimensionUsage source="EXCREATEDDATE" name="EXCREATEDDATE" visible="true" foreignKey="DC_tk" highCardinality="false"></DimensionUsage>
如何在使用 Pentaho 内置的相对日期过滤时防止这种情况发生?
在此问题上的任何帮助表示赞赏。
我意识到,由于月份有两个值,这会扭曲层次结构。
The recognized hierarchy is:
- [yyyy](年)
- [yyyy].[q](季度)
- [yyyy].[q].[M](月)
- [yyyy].[q].[M].[w](周)
- [yyyy].[q].[M].[w].[yyyy-MM-dd](日)
但如果一周超过两个月,这将失败。
通过将月和周的顺序切换为如下所示来修改层次结构将起作用:
- [yyyy](年)
- [yyyy].[q](季度)
- [yyyy].[q].[w](周)
- [yyyy].[q].[w].[M](月)
- [yyyy].[q].[w].[M].[yyyy-MM-dd](日)
根据设计,如果 Previous Week 是第 49 周并且跨越一个月(或一年),则在对 Previous Week 进行筛选时,Analyzer 生成的 MDX 应该能够找出有两个成员并包括第 49 周成员(即 11 月的一位和 12 月的一位)。
如果您能够升级到 9.x,那么您可以配置一堆 analyzer.properties,以便 Analyzer 可以生成正确的周数和周年。只要 Analyzer 可以根据当前日期找出正确的当前周成员,然后它可以回头查看之前的成员,看看它是否也是相同的周数,但可能不同的月份或年份。
这些新属性如下:
filter.relative.dates.week.firstDayOfWeek
filter.relative.dates.week.minimalDaysInFirstWeek
filter.relative.dates.week.firstWeekOnJanuary1st
filter.relative.dates.week.firstWeekOnJanuary1st.fromOne
顺便说一句,Admin->MDX->Check AnalyzerDateFormat 中有一个 link,它将打印出每个日期级别的当前到前 100 个时间段成员,以便您可以验证 AnalyzerDateFormat 注释和以上属性已正确设置,以便在您的日期维度上进行相对日期过滤。
我有一个正确构建的 table dimDate。我在事实 table 中使用代理键 DC_tk('20211202') 映射到 dimDate CCYYMMDD('20211202') 中的主键,它与 dimDate 中的 date_tk 相关。问题是,当在分析器过滤器中选择前一周时,Pentaho 分析器中显示的月份是 11 月而不是 12 月,换句话说只是一周的开始日期。我怀疑这是因为第 49 周与 11 月和 12 月重叠。如果列表过滤器值中的 Select 设置为第 49 周,则可以过滤两行 49。 代码如下:
<Dimension type="TimeDimension" visible="true" highCardinality="false" name="EXCREATEDDATE">
<Hierarchy name="Created Date" visible="true" hasAll="true" primaryKey="date_tk">
<Table name="DimDate" schema="dbo">
</Table>
<Level name="Created Year" visible="true" column="YEAR" type="String" uniqueMembers="true" levelType="TimeYears" hideMemberIf="Never">
<Annotations>
<Annotation name="AnalyzerDateFormat">
<![CDATA[[yyyy]]]>
</Annotation>
</Annotations>
</Level>
<Level name="Created Month" visible="true" column="MONTH" type="String" uniqueMembers="false" levelType="TimeMonths" hideMemberIf="Never" captionColumn="month_short_desc">
<Annotations>
<Annotation name="AnalyzerDateFormat">
<![CDATA[[yyyy].[M]]]>
</Annotation>
</Annotations>
</Level>
<Level name="Created Week" visible="true" column="week_of_year" type="String" uniqueMembers="false" levelType="TimeWeeks" hideMemberIf="Never">
<Annotations>
<Annotation name="AnalyzerDateFormat">
<![CDATA[[yyyy].[M].[w]]]>
</Annotation>
</Annotations>
</Level>
<Level name="Created Day" visible="true" column="day_of_month" type="String" uniqueMembers="false" levelType="TimeDays" hideMemberIf="Never">
<Annotations>
<Annotation name="AnalyzerDateFormat">
<![CDATA[[yyyy].[M].[w].[d]]]>
</Annotation>
</Annotations>
</Level>
<Level name="Created Date" visible="true" column="DateCCYYMMDD" type="String" uniqueMembers="false" levelType="TimeDays" hideMemberIf="Never">
<Annotations>
<Annotation name="AnalyzerDateFormat">
<![CDATA[[yyyy].[M].[w].[d].[yyyyMMdd]]]>
</Annotation>
</Annotations>
</Level>
</Hierarchy>
<DimensionUsage source="EXCREATEDDATE" name="EXCREATEDDATE" visible="true" foreignKey="DC_tk" highCardinality="false"></DimensionUsage>
如何在使用 Pentaho 内置的相对日期过滤时防止这种情况发生? 在此问题上的任何帮助表示赞赏。
我意识到,由于月份有两个值,这会扭曲层次结构。 The recognized hierarchy is:
- [yyyy](年)
- [yyyy].[q](季度)
- [yyyy].[q].[M](月)
- [yyyy].[q].[M].[w](周)
- [yyyy].[q].[M].[w].[yyyy-MM-dd](日)
但如果一周超过两个月,这将失败。
通过将月和周的顺序切换为如下所示来修改层次结构将起作用:
- [yyyy](年)
- [yyyy].[q](季度)
- [yyyy].[q].[w](周)
- [yyyy].[q].[w].[M](月)
- [yyyy].[q].[w].[M].[yyyy-MM-dd](日)
根据设计,如果 Previous Week 是第 49 周并且跨越一个月(或一年),则在对 Previous Week 进行筛选时,Analyzer 生成的 MDX 应该能够找出有两个成员并包括第 49 周成员(即 11 月的一位和 12 月的一位)。
如果您能够升级到 9.x,那么您可以配置一堆 analyzer.properties,以便 Analyzer 可以生成正确的周数和周年。只要 Analyzer 可以根据当前日期找出正确的当前周成员,然后它可以回头查看之前的成员,看看它是否也是相同的周数,但可能不同的月份或年份。
这些新属性如下:
filter.relative.dates.week.firstDayOfWeek
filter.relative.dates.week.minimalDaysInFirstWeek
filter.relative.dates.week.firstWeekOnJanuary1st
filter.relative.dates.week.firstWeekOnJanuary1st.fromOne
顺便说一句,Admin->MDX->Check AnalyzerDateFormat 中有一个 link,它将打印出每个日期级别的当前到前 100 个时间段成员,以便您可以验证 AnalyzerDateFormat 注释和以上属性已正确设置,以便在您的日期维度上进行相对日期过滤。