【问题标题】:How can you use DAX USERELATIONSHIP with 2 or more dimensions in a measure如何在度量中使用具有 2 个或更多维度的 DAX USERELATIONSHIP
【发布时间】:2021-10-21 15:16:20
【问题描述】:

我正在尝试在 DAX (PowerBI) 中创建度量,目前我正在使用 SWITCH 语句检查“关系”表的值,以找出与我的日历维度一起使用的关系。这一切都很好,见下文:-

My Measure = SWITCH(
    // Which calendar relationship should we use?
    MIN('Active Calendar Relationship'[Date Relationship]),

    "Some Date",
    CALCULATE(
        DISTINCTCOUNT('Measures'[SomeField]),
        USERELATIONSHIP(
            'Calendar'[Key],
            'SomeFactTable'[SomeDateKey]
        )
    ),

    "Other Date",
    CALCULATE(
        DISTINCTCOUNT('Measures'[SomeField]),
        USERELATIONSHIP(
            'Calendar'[Key],
            'SomeFactTable'[SomeDateKey]
        )
    ),

    // Default to 'Some Date'
    CALCULATE(
        DISTINCTCOUNT('Measures'[SomeField]),
        USERELATIONSHIP(
            'Calendar'[Key],
            'SomeFactTable'[SomeDateKey]
        )
    )
)

我现在的问题是我还有一个“一天中的时间”维度,所以我需要使用我在另一个表中的选择时间,您可以在其中选择所需的一天中的时间关系.问题在于将上面的代码扩展为使用多个“USERELATIONSHIP”语句,但由于您只能在“CALCULATE”中使用“USERELATIONSHIP”,我唯一的选择是以某种方式获取所选日期/时间值的每个可能组合并构建一个巨大的 SWITCH 语句。下面有点像这样(希望你能看到它有多大):-

Some Measure = SWITCH(
    // Which 'calendar' relationship should we use?
    MIN('Active Calendar Relationship'[Date Relationship]),

    "Some Date",
    SWITCH(
        // Which 'time' relationship should we use?
        MIN('Active Time Relationship'[Time Relationship]),

        "Some Time",
        CALCULATE(
            DISTINCTCOUNT('Measures'[SomeField]),
            USERELATIONSHIP(
                'Time'[Key],
                'Measures'[SomeTimeKey]
            ),
            USERELATIONSHIP(
                'Calendar'[Key],
                'Measures'[SomeDateKey]
            )
        ),

    "Other Time",
        CALCULATE(
            DISTINCTCOUNT('Measures'[SomeField]),
            USERELATIONSHIP(
                'Time'[Key],
                'Measures'[OtherTimeKey]
            ),
            USERELATIONSHIP(
                'Calendar'[Key],
                'Measures'[SomeDateKey]
            )
        ),

        // Default to 'Some Date' and 'Some Time'
        CALCULATE(
            DISTINCTCOUNT('Measures'[SomeField]),
            USERELATIONSHIP(
                'Time'[Key],
                'Measures'[SomeTimeKey]
            ),
            USERELATIONSHIP(
                'Calendar'[Key],
                'Measures'[SomeDateKey]
            )
        )
    ),

    "Other Date",
    SWITCH(
        // Which 'time' relationship should we use?
        MIN('Active Time Relationship'[Time Relationship]),

        "Some Time",
        CALCULATE(
            DISTINCTCOUNT('Measures'[SomeField]),
            USERELATIONSHIP(
                'Time'[Key],
                'Measures'[SomeTimeKey]
            ),
            USERELATIONSHIP(
                'Calendar'[Key],
                'Measures'[OtherDateKey]
            )
        ),

    "Other Time",
        CALCULATE(
            DISTINCTCOUNT('Measures'[SomeField]),
            USERELATIONSHIP(
                'Time'[Key],
                'Measures'[OtherTimeKey]
            ),
            USERELATIONSHIP(
                'Calendar'[Key],
                'Measures'[OtherDateKey]
            )
        ),

        // Default to 'Other Date' and 'Some Time'
        CALCULATE(
            DISTINCTCOUNT('Measures'[SomeField]),
            USERELATIONSHIP(
                'Time'[Key],
                'Measures'[SomeTimeKey]
            ),
            USERELATIONSHIP(
                'Calendar'[Key],
                'Measures'[OtherDateKey]
            )
        )
    )

    and so on...
)

我认为可以减少代码的唯一另一种方法是将所有组合创建为度量,但是会有很多度量,所以它几乎就像“卸载”问题一样。我不是 DAX 专家,但我进行了搜索,我正在努力寻找任何其他/更好的解决方案来解决这个问题。希望有另一种比上述更有效的方法......

帮助 :-)

【问题讨论】:

    标签: powerbi dax


    【解决方案1】:

    仅当两个表之间存在两个或多个关系时才需要 USERELATIONSHIP 函数。 例如日历表和销售表有这两种关系

    日历[日期] --> 销售[订单日期]

    日历[日期] --> 销售[履行日期]

    一次只能激活一个关系,您可以通过查看 Power BI 中的模型视图来判断它是哪一个,激活的关系为实线,停用的关系为虚线。

    默认情况下,DAX 将使用活动关系。如果您需要使用停用的关系,请在您的 DAX 公式中使用 USERELATIONSHIP 函数。

    https://dax.guide/userelationship/

    因此,日历维度表和时间维度表都与事实表只有一种关系,这意味着您可以从 DAX 函数中删除 USERELATIONSHIP 函数。

    【讨论】:

    • 感谢您的回答,不幸的是,我的事实表中有很多日期,只有 1 个日历维度。我只列出了“某个日期”和“其他日期”作为示例并节省空间,因为事实表中有大约 10 个日期字段和 10 个时间字段。我的事实表中也有几个“员工”维度关键字段,所以这个问题迅速升级,甚至比我列出的还要严重......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    相关资源
    最近更新 更多