如何在分层类别上应用 CONTAINS 子句以在 Power BI 中创建场景分析
How to apply CONTAINS clause on hierarchical categories to create scenario analysis in Power BI
基于@olly 给出的解决方案 () & file: https://pwrbi.com/so_55281950-2/
在示例文件中创建了一个 "what if" 或情景分析。使用了两个切片器,一个 select 场景,另一个 select 应用场景的对象。 @Olly 提供了一个聪明的解决方案来处理这种情况:
Value + Trend =
SUMX (
'Demo Fact Table';
'Demo Fact Table'[Value] *
( 1 +
IF (
ISFILTERED ( 'Item Chooser'[Item] ) &&
CONTAINS (
'Item Chooser';
'Item Chooser'[Item];
'Demo Fact Table'[Item]
) &&
HASONEVALUE ( 'Scenario - Trend'[Category] );
VALUES ( 'Scenario - Trend'[Trend Rise] );
'Demo Fact Table'[trend_default]
)
)
)
在此解决方案的基础上,我一直在尝试应用相同的逻辑,但针对的是我的具体问题。在我的问题中,我不仅有一层 "categories",而是 3 层的层次结构。
如果我的类别具有层次结构,我将如何继续应用相同的解决方案?因此,从我的切片器中,我会 select 三件事:Category1、Year 和 Category2,这将为 selection 产生 trend_rise。并将应用此应用 trend_rise 在 selected(第 4 个切片器)行上,即(项目 A,B or/and C)
category1 - Year - Category2 - trend rise
POSITIVE-trends 2018 low 5%
POSITIVE-trends 2018 high 5%
POSITIVE-trends 2017 low 5%
NEGATIVE-trends 2017 very high -5%
NEUTRAL-trends 2018 low 0%
POSITIVE-trends 2018 high 5%
NEUTRAL-trends 2017 low 5%
NEUTRAL-trends 2016 very high 15%
您只需要稍微调整一下度量,检查 trend_rise
字段是否有一个值,如果有则使用该值,否则使用默认值:
Value + Trend =
SUMX (
'Demo Fact Table',
'Demo Fact Table'[Value] *
( 1 +
IF (
ISFILTERED ( 'Item Chooser'[Item] ) &&
CONTAINS (
'Item Chooser',
'Item Chooser'[Item],
'Demo Fact Table'[Item]
) &&
HASONEVALUE ( 'Scenario - Trend'[Trend Rise] ),
VALUES ( 'Scenario - Trend'[Trend Rise] ),
'Demo Fact Table'[trend_default]
)
)
)
现在您可以在场景的所有列上使用切片器 table。
请参阅 https://pwrbi.com/so_55332313/ 了解工作示例文件。
基于@olly 给出的解决方案 (
在示例文件中创建了一个 "what if" 或情景分析。使用了两个切片器,一个 select 场景,另一个 select 应用场景的对象。 @Olly 提供了一个聪明的解决方案来处理这种情况:
Value + Trend =
SUMX (
'Demo Fact Table';
'Demo Fact Table'[Value] *
( 1 +
IF (
ISFILTERED ( 'Item Chooser'[Item] ) &&
CONTAINS (
'Item Chooser';
'Item Chooser'[Item];
'Demo Fact Table'[Item]
) &&
HASONEVALUE ( 'Scenario - Trend'[Category] );
VALUES ( 'Scenario - Trend'[Trend Rise] );
'Demo Fact Table'[trend_default]
)
)
)
在此解决方案的基础上,我一直在尝试应用相同的逻辑,但针对的是我的具体问题。在我的问题中,我不仅有一层 "categories",而是 3 层的层次结构。 如果我的类别具有层次结构,我将如何继续应用相同的解决方案?因此,从我的切片器中,我会 select 三件事:Category1、Year 和 Category2,这将为 selection 产生 trend_rise。并将应用此应用 trend_rise 在 selected(第 4 个切片器)行上,即(项目 A,B or/and C)
category1 - Year - Category2 - trend rise
POSITIVE-trends 2018 low 5%
POSITIVE-trends 2018 high 5%
POSITIVE-trends 2017 low 5%
NEGATIVE-trends 2017 very high -5%
NEUTRAL-trends 2018 low 0%
POSITIVE-trends 2018 high 5%
NEUTRAL-trends 2017 low 5%
NEUTRAL-trends 2016 very high 15%
您只需要稍微调整一下度量,检查 trend_rise
字段是否有一个值,如果有则使用该值,否则使用默认值:
Value + Trend =
SUMX (
'Demo Fact Table',
'Demo Fact Table'[Value] *
( 1 +
IF (
ISFILTERED ( 'Item Chooser'[Item] ) &&
CONTAINS (
'Item Chooser',
'Item Chooser'[Item],
'Demo Fact Table'[Item]
) &&
HASONEVALUE ( 'Scenario - Trend'[Trend Rise] ),
VALUES ( 'Scenario - Trend'[Trend Rise] ),
'Demo Fact Table'[trend_default]
)
)
)
现在您可以在场景的所有列上使用切片器 table。
请参阅 https://pwrbi.com/so_55332313/ 了解工作示例文件。