如何减少Measure的内存占用?

问题描述 投票:0回答:1

我在 PowerBI 中有一个表,其中有不同产品和不同月份多家商店的库存数量。我还有一个日历表和一个商店映射表。在一张纸中,我插入了两个切片器,一个用于日期,一个用于商店。日期来自日历表,商店名称来自商店映射表。两者均启用单一选择(只能选择一家商店和一个日期)。在表格视觉中,我想显示商店在给定月份有库存的每个产品 ID。我创建了一个度量来显示某个产品 ID 出现在多少个其他商店中并且库存大于 0。该度量适用于较小的数据库:

Total Stores per product =
VAR YEAR = SELECTEDVALUE('Calendar'[YEAR])
VAR MONTH = SELECTEDVALUE('Calendar'[Month])
VAR MONTH_no = MONTH(DATEVALUE(MONTH & " 1, " & AN))
VAR date = EOMONTH(DATE(YEAR, MONTH_no, 1), 0)
VAR product_id = SELECTEDVALUE('PRODUCTS'[NUM_ART])
RETURN
CALCULATE
(
    COUNTROWS('PRODUCTS'),
    FILTER(
        ALL('PRODUCTS'),
        'PRODUCTS'[stock_quantity] > 0 && 'PRODUCTS'[data_stock] = date && 'PRODUCTS'[NUM_ART] = product_id
    )
)

我面临的问题是我有一个很大的数据集,当尝试在表格视觉中插入此度量时,它会崩溃,这意味着它超出了可用资源。

我请求您帮助以某种方式重写该度量,以减少计算资源。我知道 COUNTROWS 和 FILTER 函数占用大量内存,但我不确定应该如何修改度量以使最终结果相同。

powerbi dax
1个回答
0
投票

您是否更喜欢查看显示特定日期和商店的可用库存的唯一产品 ID 列表的表格,还是只需要相同参数的这些唯一产品 ID 的总数?

如果首先,您可以将 ProductId(从事实表或产品暗淡表)拖到表视觉对象中,然后在该表上放置一个过滤器以删除所有没有库存数量的产品(按列或按度量) 。因为您已经使用日期和存储切片器操作过滤器上下文,所以不需要将这些值存储在其他地方。

滤镜前:图像

滤镜后:图像

如果是第二种,你可以创建一个像这样的措施:

CurrentStockQuantity = MAX(stock_quantities[StockQuantity]) 

TotalProductsInStock = 
    CALCULATE(
        DISTINCTCOUNT(stock_quantities[ProductId]),
        FILTER(
            stock_quantities,
            [CurrentStockQuantity] > 0
        )
    )
  • 您已经通过 StoreId 和 Date 过滤了整个数据模型。这意味着您可以只计算剩余的独特产品。
  • 添加附加过滤器以排除任何没有可用库存数量的产品。
© www.soinside.com 2019 - 2024. All rights reserved.