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

https://help.hitachivantara.com/Documentation/Pentaho/9.0/Products/Adapt_Mondrian_schemas_to_work_with_Analyzer#Relative_date_filters_for_weeks

顺便说一句,Admin->MDX->Check AnalyzerDateFormat 中有一个 link,它将打印出每个日期级别的当前到前 100 个时间段成员,以便您可以验证 AnalyzerDateFormat 注释和以上属性已正确设置,以便在您的日期维度上进行相对日期过滤。