这是我在过去的这里中启动的线程的延续。
过了一段时间,我将带着类似的问题回来,但这一次我想要对这个问题有充分的理解,以最终解决它。
假设我使用了以下Power数据模型:
基于该模型,我构建了以下报告:
如您所见,在可视化的基础上,我组合了来自ProductCategory和Product的属性。我还添加了一个度量,这里命名为一些度量,定义如下:
IF (
ItemStockHistory[# ItemStockCurrent] <= 0;
"No Stock";
DIVIDE (
ItemStockHistory[# ItemStockCurrent];
[Σ SalesUnitQuantity_Last30Days]
)
)
这种度量结构的目标是向分析师展示属于特定类别的所有产品的显式价值,以防度量结果为空白。
不幸的是,我发现在度量中覆盖“自然”空白可能会对表可视化显示的数据产生副作用:使用切片器进行筛选时,不能正常工作--当我选择"Office“这样的特定产品类别时,我得到了这个类别的笛卡儿产品和所有SKU(也是过滤类别之外的)。
对我来说,这是一个相当令人惊讶的表格造型行为。为什么用显式值覆盖度量空白结果会影响过滤?
大多数基于ProductSku级别的操作报告都有类似的视觉设置,我非常希望支持格式化空白度量的技术值,这些技术值仍然允许已建立的关系正常工作,而不会产生奇怪的效果,比如笛卡尔产品或从其他视觉系统(如切割机)中提取的过滤器。
或者,我可能不理解表格建模的主要范例,并想得到什么是默认情况下,在这项技术?
EDIT1
缺失的ItemStockHistory表被添加到数据模型图中。
发布于 2021-01-20 18:35:10
用特定的值替换空白肯定会导致这种情况。结果可以是空的,因为事实表中没有对应的数据行,也可以是空的,因为这种组合在维度表中甚至是不可能的,而且从空白中看不出这些数据行中的哪一行,因此替换空白既适用于这两种情况,也不适用于这两种情况。
我们想忽略不可能的组合。正如@sergiom正确指出的那样,它们的出现是由于自存没有启动,因为类别和SKU不存在于同一个表中。因为它们在不同的表中,所以内部逻辑采用了更加野蛮的交叉连接和过滤的方法。但是,您已经通过用其他东西替换空白来干扰过滤向下部分。
如果您不能创建一个更干净的模型,那么解决这个问题的方法是在评估度量之前检查是否有一个空的交叉连接。
例如,而不是
IF ( ISBLANK ( [Measure] ); "No Stock"; [Measure] )
你可以用额外的支票写些东西:
IF (
ISEMPTY ( Product ),
BLANK (),
IF ( ISBLANK ( [Measure] ); "No Stock"; [Measure] )
)
这样,您只对实际有意义的案例进行评估。
发布于 2021-01-20 13:26:06
恐怕问题在于您有一个雪花模式。因此,客户端生成的调用度量的查询中的SUMMARIZECOLUMNS
不触发自动存在,其结果相当于产品和ProductCategory表字段上的CROSSJOIN,然后是空白度量结果的筛选器。这就解释了为什么你会看到这两个领域的笛卡尔积。
避免此类问题的最佳解决方案是将ProductCategory表合并到Product中,以获得一个星型模式,而不是一个雪花。这样,查询将触发自动存在,并且只使用现有的列组合。
如果无法将雪花模式更改为星型模式,则当SUMMARIZECOLUMS
生成的字段(行为类似于CROSSJOIN
)的组合不存在时,应将度量修改为返回空白。我认为可以使用ISEMPTY
来执行这个测试。
https://stackoverflow.com/questions/65806735
复制相似问题