【问题标题】:How to fetch column from another Dimension table without relationship如何从另一个没有关系的维度表中获取列
【发布时间】:2021-01-05 03:03:08
【问题描述】:

我有两个维度表,它们之间没有关系。

1 是产品维度表

ProdCode | ValidStartDate | ValidEndDate

XX | 2012-01-01| 2016-12-31
XX | 2017-01-01| 2017-12-31
XX | 2018-01-01| 2020-12-31

第二个是时间表

Year | IsCurrent

2012 | 0
2013 | 0
2014 | 0
2015 | 0
2016 | 0
2017 | 0
2018 | 0
2019 | 0
2020 | 1

我需要在 Product 表中创建一个计算列,以显示 Time Table 中所选年份的 IsCurrent 列。

我尝试使用 CALCULATE,但它需要我无法使用的聚合函数之一,因为我想在当前行上下文中显示值。

例如:

IsCurrent =
CALCULATE(
    MAXA('Time'[IsCurrent]),
    FILTER(
        'Time',
        'Time'[Year] >= YEAR(Product[ValidStartDate]) 
            && 'Time'[Year] <= YEAR(Product[ValidEndDate])
    ) 
)

这总是给我满足范围内的最大值,例如,在第一条记录(2012-2016)总是显示 2016 的情况下,但我想从时间表中显示相应的当前行年份。

请提出建议。

谢谢。

【问题讨论】:

    标签: powerbi dax ssas-tabular


    【解决方案1】:

    在下面试试这个 Measure 脚本-

    测量

    IsCurrent = 
    CALCULATE(
        MAXA('Time'[IsCurrent]),
        FILTER(
            'Time',
            'Time'[Year] >= YEAR(MIN(Product[ValidStartDate]))
                && 'Time'[Year] <= YEAR(MIN(Product[ValidEndDate]))
        ) 
    )
    

    自定义列

    IsCurrent_column = 
    
    var current_start_year = YEAR(Product[ValidStartDate])
    var current_end_year = YEAR(Product[ValidEndDate])
    
    RETURN
    CALCULATE(
        MAXA('time'[IsCurrent]),
        FILTER(
            'time',
            'time'[Year] >= current_start_year
                && 'time'[Year] <= current_end_year
        ) 
    )
    

    这是输出-

    【讨论】:

    • 自定义列我已经在尝试但没有用,但似乎 Measure 在我的情况下有效。让我试试。感谢您的回答。
    • 希望这会奏效。如果有帮助,请接受答案:)
    • 你知道为什么自定义列逻辑不起作用。
    • 将表名从“Product Time”改为“Time”。如果问题仍然存在,请尽可能在此处提供代码。
    • 嗨@LernSQL 我已经更新了答案。请检查。
    【解决方案2】:

    在下面创建这个度量-

    in_range = 
    
    VAR selected_year = SELECTEDVALUE('time'[Year])
    
    RETURN IF(
        YEAR(MIN('product'[ValidStartDate])) <= selected_year
            && YEAR(MIN('product'[ValidEndDate])) >= selected_year
        ,
        1,
        0
    )
    

    这将为您提供如下输出-

    现在您可以使用上述度量添加 Visual Level 过滤器,以便在 in_range = 1 时显示该行。此过滤器只会将您预期的行保留在表中。

    【讨论】:

    • 我尝试过,但 SELECTEDVALUE() 在我的解决方案中无法识别。我使用 SSAS 表格模型作为来源。
    • 这是 SSAS 表格模型的问题 :(
    猜你喜欢
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 2021-10-19
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多