在 Power BI 中为事实和维度编写 DAX

Writing DAX in Power BI for Facts and Dimensions

假设我在 Power BI 中进行了以下设置:

d_date (this is a date dimension)
d_customers (this is a customer dimension)
f_orders (this is a fact table)

f_ordersdate_id 上连接到 d_date,在 customer_id 上连接到 d_customers

我想创建一个 dax 度量来显示每个日期的不同客户列表及其名称。

我怎么能这样做?

(我是 Dax 的新手,对 Power BI 有点陌生)

预期输出

Table 1
    order date     Customer Name
    2020-01-01     John Doe
    2020-01-01     James Simpson
    2020-01-03     Emilia Clarke
    ...
    2020-12-31     Jamie Lanister


Table 2

    order date     distinct_customer_count
    2020-01-01     2
    2020-01-03     1
    ...
    2020-12-31     1

我的目标与其说是生成输出,不如说是查看使用 DAX 从 2 个表生成输出的简单示例。

创建一个计算 f_orders 中不同客户的度量。如果您在按日期 groups/filters 的视觉对象中使用该度量,则该度量将显示正确的值。

例如,X 轴为日期且不同客户数作为值的图表将显示每天的不同客户数。

在 Power BI/DAX 中,您不需要预先计算各种场景,因为度量将始终在 page/visual.[=10 的过滤器的上下文中进行评估=]

您要求的是 return 列表的度量。这不能直接完成,因为度量必须 return 一个标量,除非你想构建一个包含所有客户的字符串。 (这可以使用 CONCATENATEX() 来完成,但当显示的客户过多时效果不佳)

根据您想要的输出,我看到您希望看到一个 table 视觉效果,其中包含日期和在该日期下订单的客户。为此,创建如下所示的客户计数指标就足够了

# Customers = DISTINCTCOUNT( f_orderes[customer_id] )

并使用 d_date[日期]、d_customer[名称] 和 [# Customers]

创建 table 视觉效果

仅使用 d_date[日期] 和 [# 客户] 你应该得到 Table 2

要查看一些同时使用 tables 的代码,您可能会计算计算出的 tables,例如,移动到包含客户、日期和销售额的真实数据集,[的简单实现=43=] 1 是

SUMMARIZE ( Sales, 'Date'[Date], Customer[Name] )

这里是要在 dax.do

上测试的相同代码

和 table 2

FILTER (
    ADDCOLUMNS (
        ALL ( 'Date'[Date] ),
        "# Customers", CALCULATE ( DISTINCTCOUNT ( Sales[CustomerKey] ) )
    ),
    NOT ISBLANK ( [# Customers] )
)

需要 NOT ISBLANK() 上的 FILTER 来删除没有销售的日期

这是dax.do

上的代码

也可以使用 SUMMARIZECOLUMNS,但 SUMMARIZECOLUMNS 是一个更高级的函数,不能在 DAX 度量中使用。

SUMMARIZECOLUMNS (
    'Date'[Date],
    "# Customers", DISTINCTCOUNT ( Sales[CustomerKey] )
)

这里是 dax.do link for this last code snippet