Pentaho 用户控制台中的 Pentaho 动态加载月份名称

Pentaho dynamic loading name of month in Pentaho User Console

在我的维度 table 中,我有月份字段,其中数字表示月份 1...12,但在这个 table 中,我没有那个月份的名称(一月、二月、 ETC...)。在蒙德里安文件中,我像时间维度一样使用它。

<Dimension type="TimeDimension" visible="true" highCardinality="false" name="timedimension" caption="Datetime">
    <Hierarchy visible="true" hasAll="true" primaryKey="id_date">
      <Table name="dim_date" schema="dbo">
      </Table>
      <Level name="year" visible="true" column="year4" type="String" uniqueMembers="false" levelType="TimeYears" hideMemberIf="Never" caption="year">
        <Annotations>
          <Annotation name="AnalyzerDateFormat">
            <![CDATA[[yyyy]]]>
          </Annotation>
        </Annotations>
      </Level>
      <Level name="month" visible="true" column="month" ordinalColumn="month" type="String" uniqueMembers="false" levelType="TimeMonths" hideMemberIf="Never" caption="month">
        <Annotations>
          <Annotation name="AnalyzerDateFormat">
            <![CDATA[[yyyy].['Q'q].[M]]]>
          </Annotation>
        </Annotations>
      </Level>
    </Hierarchy>
  </Dimension>

当我在 Pentaho 用户控制台中显示此维度时,我想在 Anylyzer 报告中显示这些月份的名称而不是数字。如果不将这个月份名称添加到我的维度 table 中,这是否可行?是否存在一些用于显示该文件或某些 属性 文件的内部函数或用于在 mondrian 文件中使用该文件或某些属性的内部字典?我希望月份的名称取决于 Pentaho 用户控制台中选择的语言。

如果在 dim table 中创建列不是一个选项(尽管这是推荐的方法),您可以通过将 KeyExpression 元素添加到 Level 表达式来实现:

<Level name="month" visible="true" ordinalColumn="month" type="String" uniqueMembers="false" levelType="TimeMonths" hideMemberIf="Never">
  <KeyExpression>
    <SQL dialect="generic">
      CASE 
        WHEN month = 1 THEN 'Jan'
        WHEN month = 2 THEN 'Feb'
        (...)
        WHEN month = 12 THEN 'Dec'
      END
    </SQL>
  </KeyExpression>
  <Annotations>
    <Annotation name="AnalyzerDateFormat">
      <![CDATA[[yyyy].['Q'q].[MMM]]]>
    </Annotation>
  </Annotations>
</Level>

请注意,我删除了 columncaption 属性。还要注意 AnalyzerDateFormat 值的变化(如果你想要完整的月份名称,你必须使用 MMMM 而不是 MMM)。