【问题标题】:Power BI slicer filtering not workinPower BI 切片器筛选不起作用
【发布时间】:2021-01-21 02:35:10
【问题描述】:

这是我在过去here开始的一个线程的延续

一段时间后,我又带着类似的问题回来了,但这次想全面了解这个问题,以便最终解决它。

假设我使用以下 Power BI 数据模型:

基于模型,我构建了以下报告:

如您所见,在视觉上我结合了 ProductCategory 和 Product 表中的属性。我还添加了一个度量,这里命名为 [Some Measure],其定义如下:

IF (
    ItemStockHistory[# ItemStockCurrent] <= 0;
    "No Stock";
        DIVIDE (
            ItemStockHistory[# ItemStockCurrent];
            [Σ SalesUnitQuantity_Last30Days]
    )
)

这种度量构建的目标是向分析师显示属于特定类别的所有产品的明确价值,以防度量评估为空白。

不幸的是,我发现覆盖度量中的“自然”空白可能会对表格视觉对象中显示的数据产生副作用:使用切片器进行过滤无法正常工作 - 当我选择特定产品时像“办公室”这样的类别,我得到这个类别的笛卡尔积和所有 SKU(也是过滤类别之外的)

对我来说,这是表格建模的非常令人惊讶的行为。为什么用显式值覆盖度量 BLANK 结果会影响过滤?

大多数基于 ProductSku 级别的运营报告共享类似的视觉设置,我真的希望能够支持格式化空白度量以及一些仍然允许建立的技术值关系正常工作,没有奇怪的效果,如笛卡尔积或来自其他视觉效果的 ingoring 过滤器,如切片器

或者,也许我不了解表格建模的主要范式,想了解该技术默认禁止的内容?

EDIT1

缺失的 ItemStockHistory 表已添加到数据模型图中

【问题讨论】:

  • 什么是“ItemStockHistory”?它不在您描述的数据模型中
  • @RADO 我已经更新了图表。

标签: powerbi dax


【解决方案1】:

用特定值替换空白肯定会导致这种事情。结果可能是空白的,因为您的事实表中没有相应的数据行,或者它可能是空白的,因为在维度表中甚至不可能进行这种组合,并且您不能仅通过查看空白来判断其中哪些,因此替换空白将适用于这两种情况或都不适用。

我们想忽略不可能的组合。正如@sergiom 正确指出的那样,它们的出现是因为auto-exist 没有加入,因为同一张表中不存在类别和SKU。因为它们在不同的表中,所以内部逻辑使用了交叉连接和向下过滤的更暴力的方法。但是,您通过用其他东西替换空白来干扰过滤部分。

如果您无法创建更清晰的模型,解决此问题的方法是在评估度量之前检查是否存在空交叉连接。

例如,而不是

IF ( ISBLANK ( [Measure] ); "No Stock"; [Measure] )

你可能会写一些带有额外检查的东西:

IF (
    ISEMPTY ( Product ),
    BLANK (),
    IF ( ISBLANK ( [Measure] ); "No Stock"; [Measure] )
)

这样,您只评估真正有意义的案例的度量。

【讨论】:

  • 通过附加 ISEMPTY() 子句,笛卡尔积的问题已经解决。在解决表之间的关系时,我仍然对内部机制感到有些惊讶,因为我根据 Product 和 ProductCategory 之间的 ProductCategoryId 属性明确定义了关系,那么为什么要使用 CROSSJOIN?我想通过建立这种关系,我应该得到(LEFT)JOIN。为什么自动存在的功能不能分布在相互关联的多个表中?
  • 自动存在仅限于单个表。它还带有其他问题。这是一篇关于它的文章sqlbi.com/articles/understanding-dax-auto-exist,这是一篇更通用的文章sqlbi.com/articles/the-importance-of-star-schemas-in-power-bi
【解决方案2】:

恐怕问题在于您有雪花模式。因此,客户端生成的调用该度量的查询中的SUMMARIZECOLUMNS 不会触发自动存在,结果相当于 Product 和 ProductCategory 表的字段上的 CROSSJOIN,然后是对结果的过滤器测量为空白。这就解释了为什么您会看到这两个字段的笛卡尔积。

避免此类问题的最佳解决方案是将 ProductCategory 表合并到 Product 表中,以使用 Star Schema 而不是 Snowflake。这样,您的查询将触发自动存在,并且只会使用现有的列组合。

如果无法将雪花模式更改为星型模式,则当SUMMARIZECOLUMS(行为类似于CROSSJOIN)生成的字段组合不存在时,应修改度量以返回空白。我认为ISEMPTY 可能用于执行此测试。

【讨论】:

    猜你喜欢
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 2022-11-11
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多