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>
请注意,我删除了 column
和 caption
属性。还要注意 AnalyzerDateFormat 值的变化(如果你想要完整的月份名称,你必须使用 MMMM
而不是 MMM
)。
在我的维度 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>
请注意,我删除了 column
和 caption
属性。还要注意 AnalyzerDateFormat 值的变化(如果你想要完整的月份名称,你必须使用 MMMM
而不是 MMM
)。