在 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_orders
在 date_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] )
)
假设我在 Power BI 中进行了以下设置:
d_date (this is a date dimension)
d_customers (this is a customer dimension)
f_orders (this is a fact table)
f_orders
在 date_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] )
)