MDX SSAS OLAP -- 根据维度选择切换属性

Posted

技术标签:

【中文标题】MDX SSAS OLAP -- 根据维度选择切换属性【英文标题】:MDX SSAS OLAP -- Switch Attributes Based on dimension selection 【发布时间】:2019-10-02 10:53:01 【问题描述】:

我有一个包含 3 个金额度量和其他数量度量的事实表(文档粒度),这 3 个金额度量不是同一种货币,而是与一种可视化类型相关。

报告可以有三种类型的可视化,文档视图、公司视图、公司组视图。

如果您通过文档视图查看,您应该查看所有类型的货币,具体取决于文档(英镑、欧元、加拿大、美国、澳元等)。

如果您通过公司视图查看,您应该会看到与公司相关的货币(即公司 1 是欧元,公司 2 是美元等)。

公司组总是欧元。

示例:

事实表

╔═══════════════════════════════════════════════════════════════════════════╗
║                               Fact Document                               ║
╠════════════╦═════════════╦══════════════╦═════════════╦═══════════════════╣
║ Company ID ║   Doc ID    ║ Mtr Document ║ Mtr Company ║ Mtr Company Group ║
╠════════════╬═════════════╬══════════════╬═════════════╬═══════════════════╣
║ 1          ║ 101         ║          100 ║          90 ║                95 ║
╠════════════╬═════════════╬══════════════╬═════════════╬═══════════════════╣
║ 2          ║ 102         ║          250 ║         150 ║               120 ║
╠════════════╬═════════════╬══════════════╬═════════════╬═══════════════════╣
║ 3          ║ 103         ║          400 ║         200 ║               170 ║
╚════════════╩═════════════╩══════════════╩═════════════╩═══════════════════╝

模糊文档

╔════════════════════════════════════════════════════════════════════════╗
║                              Dim Document                              ║
╠════════╦═══════════════════╦══════════════════╦════════════════════════╣
║ Doc ID ║ Document Currency ║ Company Currency ║ Company Group Currency ║
╠════════╬═══════════════════╬══════════════════╬════════════════════════╣
║ 101    ║               USD ║              GBP ║                    EUR ║
╠════════╬═══════════════════╬══════════════════╬════════════════════════╣
║ 102    ║               CAN ║              USD ║                    EUR ║
╠════════╬═══════════════════╬══════════════════╬════════════════════════╣
║ 103    ║               AUD ║              USD ║                    EUR ║
╚════════╩═══════════════════╩══════════════════╩════════════════════════╝

dim 可视化类型(手动和静态维度没有变化)

╔═══════════════════════╦═════════════════════════╗
║ Visualization type ID ║ Visualization type Name ║
╠═══════════════════════╬═════════════════════════╣
║                     1 ║ Document view           ║
║                     2 ║ Company view            ║
║                     3 ║ Company Group view      ║
╚═══════════════════════╩═════════════════════════╝

货币疲软

╔══════════╗
║ Currency ║
╠══════════╣
║ EUR      ║
║ USD      ║
║ GBP      ║
║ CAN      ║
╚══════════╝

我想选择可视化类型并动态选择正确的度量(您所做的)。

但我还想动态选择与该度量相关的货币。 所以我想将一个维度链接到另一个维度,所以我只能有一个货币属性,我不想有 3 个不同的货币属性。

理想的输出:

已选择文档视图

╔═════════╦════════╦══════════╗
║ Doc Id  ║ Amount ║ Currency ║
╠═════════╬════════╬══════════╣
║     101 ║    100 ║ USD      ║
║     102 ║    250 ║ CAN      ║
║     103 ║    450 ║ AUD      ║
╚═════════╩════════╩══════════╝

已选择公司视图

╔═════════╦════════╦══════════╗
║ Doc Id  ║ Amount ║ Currency ║
╠═════════╬════════╬══════════╣
║     101 ║     90 ║ GPB      ║
║     102 ║    150 ║ USD      ║
║     103 ║    200 ║ USD      ║
╚═════════╩════════╩══════════╝

已选择公司组视图

╔═════════╦════════╦══════════╗
║ Doc Id  ║ Amount ║ Currency ║
╠═════════╬════════╬══════════╣
║     101 ║     95 ║ EUR      ║
║     102 ║    120 ║ EUR      ║
║     103 ║    170 ║ EUR      ║
╚═════════╩════════╩══════════╝

可以这样做吗?

一切顺利,谢谢!

里卡多·卡斯特罗

更新

我在下面做了这个,当我在“dim Visualization type”中选择类型时,我得到的值是 1、2 或 3

CREATE MEMBER [Coin]
 AS CASE WHEN [visualization type].[visualization type].CurrentMember.MEMBERVALUE = 'Document view'
    THEN 1
    ELSE (CASE WHEN [visualization type].[visualization type].CurrentMember.MEMBERVALUE = 'Company view'
        THEN 2
        ELSE 3 END) END,
VISIBLE = 1  ;

我需要获取属性值。我试过了:

[Document].[Document Currency].firstchild

STRTOMEMBER("[Document].[Document Currency].MEMBERS")

STRTOMEMBER('[Document].[Document Currency].[Document Currency].FirstChild', CONSTRAINED)

如果我输入以下代码,我会得到“全部”,这是我唯一不想要的:P:

[Document].[Document Currency].CurrentMember.Properties("Name")

有什么想法吗?

【问题讨论】:

【参考方案1】:

您可以根据所需的转化创建一组标准的计算指标,并使用基于维度的 SCOPE 语句来根据所选视图将指标的定义调整为不同的计算。

https://docs.microsoft.com/en-us/analysis-services/multidimensional-models/mdx/managing-scope-and-context-mdx

【讨论】:

嗨@ConcernedOfTunbridgeWells,我的“昏暗可视化类型”是手动和静态的。在我在其他情况下所做的测量之间切换。我的问题是在三个维度文档属性之间切换(文档货币║公司货币║公司集团货币)取决于“dim可视化类型”的选择。

以上是关于MDX SSAS OLAP -- 根据维度选择切换属性的主要内容,如果未能解决你的问题,请参考以下文章

OLAP SSAS MDX 如何获取先前选定/可见日期的度量值

在网页中显示 OLAP SQL Server?

Olap 立方体和 MDX 和 NON EMPTY

SSAS MDX 计算度量 - [ITEMS] 的 COUNT 个。[Item] 分组 [Items].[Item Group]

使用 olap4j Api 获取 Mdx 中维度的根级别

无法使 ConvertToUnknown 维度在 SSAS OLAP 多维数据集上工作