2024-06-17 表构造

表构造

在Power BI中,构造表的方式非常多样,每一种方式都有其特定的应用场景和步骤。

  1. 从外部数据源导入数据创建表

    • 步骤

      • 打开Power BI Desktop,点击左侧“获取数据”按钮。
      • 在弹出的对话框中选择数据源类型(如Excel、CSV、SQL Server等)。
      • 连接到数据源后,选择需要导入的表或数据。
      • 点击“加载”或“编辑查询”后加载数据到Power BI数据模型中。
    • 原理
      Power BI Desktop通过连接器与各种数据源进行通信,将外部数据加载到数据模型中,形成可分析的数据表。

    • 举例
      假设有一个Excel文件包含销售数据,通过“获取数据”选择Excel数据源,然后选择该Excel文件中的销售数据表,即可将其导入到Power BI中进行分析。

  2. 使用DAX查询创建计算表

    • 步骤

      • 在Power BI Desktop的“字段”窗格中,右键点击“新建表”。
      • 在打开的DAX编辑器中输入计算表的DAX公式。
      • 点击“确定”或“完成”创建计算表。
    • 原理
      DAX(Data Analysis Expressions)是Power BI中用于定义计算列、计算表和度量值的公式语言。通过DAX公式,用户可以根据已加载到数据模型中的数据创建新的表。

    • 举例
      假设有一个包含销售数据的表,想要创建一个只包含总销售额超过100万的客户的新表。可以使用DAX中的FILTERSUMMARIZE函数创建一个新的计算表,该表只包含满足条件的客户。

  • 在DAX中创建计算表时,有多种函数和方法可供选择。以下是使用DAX创建计算表的一些常用函数和步骤,按照清晰的结构进行分点和归纳:
  • 1. 使用EVALUATE函数

    • 原理:EVALUATE函数用于创建一个基于DAX表达式的表格,并返回该表格的计算结果。
    • 步骤
    1. 确定要计算的表达式。
    1. 使用EVALUATE函数包裹该表达式。
    1. 在Power BI的DAX编辑器中输入并运行该公式。
  • 2. 使用ROW函数

    • 原理:ROW函数用于创建包含指定列值的表格。它可以用于指定行的数量、排序和筛选条件。
    • 步骤
    1. 确定要包含在表格中的列及其值。
    1. 使用ROW函数,并指定列名和对应的值。
    1. 在DAX编辑器中编写并运行公式。
  • 3. 使用VALUES函数

    • 原理:VALUES函数返回指定列中所有唯一值的表格。
    • 步骤
    1. 选择要提取唯一值的列。
    1. 使用VALUES函数并指定该列。
    1. 在DAX编辑器中编写并运行公式。
  • 4. 使用CROSSJOIN函数

    • 原理:CROSSJOIN函数返回两个或多个表格之间的笛卡尔积,即所有可能的组合。
    • 步骤
    1. 确定要组合的两个或多个表格。
    1. 使用CROSSJOIN函数,并指定这些表格。
    1. 编写并运行DAX公式,获取组合后的新表格。
  • 5. 使用SUMMARIZE函数

    • 原理:SUMMARIZE函数根据指定的列对表格进行分组,并生成一个包含聚合计算结果的表格。
    • 步骤
    1. 确定要分组的列和要聚合的列。
    1. 使用SUMMARIZE函数,并指定分组列和聚合列及其聚合函数(如SUM、AVERAGE等)。
    1. 在DAX编辑器中编写并运行公式。
  • 6. 使用UNION函数

    • 原理:UNION函数用于将两个或多个具有相同结构的表格合并成一个表格。
    • 步骤
    1. 确保要合并的表格具有相同的列结构和数据类型。
    1. 使用UNION函数,并指定这些表格。
    1. 编写并运行DAX公式,获取合并后的新表格。
  • 7. 使用DATATABLE函数

    • 原理:DATATABLE函数用于创建具有指定列和行的新表格。
    • 步骤
    1. 确定新表格的列名、数据类型和初始值。
    1. 使用DATATABLE函数,并指定这些信息。
    1. 编写并运行DAX公式,创建新表格。
  • 8. 使用其他DAX函数和表达式

  • 除了上述函数外,还可以结合其他DAX函数和表达式来创建更复杂的计算表。例如,可以使用CALCULATE、FILTER等函数来添加额外的筛选和计算逻辑。
  • 当使用DAX来创建计算表时,CALCULATEFILTER 函数是非常有用的,因为它们允许你添加复杂的筛选和计算逻辑。以下是如何使用这些函数来构造计算表的示例:
  • 使用 CALCULATE 函数

  • CALCULATE 函数允许你改变上下文中的筛选条件,从而改变聚合函数(如 SUMAVERAGE 等)的行为。
  • 示例:假设你有一个名为 Sales 的表,其中包含 RegionProductSalesAmount 列。你想要计算除北美以外所有区域的销售额总和。
Non_North_America_Sales =
CALCULATE(
    SUM(Sales[SalesAmount]),
    FILTER(Sales, Sales[Region] <> "North America")
)
  • 但是,请注意,上面的公式实际上返回的是一个单一的聚合值,而不是一个表。为了返回一个表,你可以结合使用 SUMMARIZECALCULATE
  • 示例:按产品计算除北美以外所有区域的销售额。
Non_North_America_Sales_By_Product =
SUMMARIZE(
   FILTER(Sales, Sales[Region] <> "North America"),
   Sales[Product],
   "Total Sales", CALCULATE(SUM(Sales[SalesAmount]), Sales[Region] <> "North America")
)
  • 使用 FILTER 函数

  • FILTER 函数用于根据指定的条件筛选表中的行。它返回一个表,其中包含满足条件的行。
  • 示例:假设你只想查看销售额超过1000的产品。
High_Sales_Products =
FILTER(
  Sales,
  Sales[SalesAmount] > 1000
)
  • 但是,这同样只返回了一个筛选后的表,而不是一个带有聚合的表。你可以再次结合 SUMMARIZE 或其他DAX函数来使用。
  • 结合使用 CALCULATEFILTER

  • 通常,你会将 CALCULATEFILTER 结合使用,以便在更复杂的上下文中进行聚合和筛选。
  • 示例:按产品计算每个区域中销售额超过1000的产品的总销售额。
Sales_Over_1000_By_Region_Product =
SUMMARIZE(
    FILTER(Sales, Sales[SalesAmount] > 1000),
    Sales[Region],
    Sales[Product],
    "Total Sales", SUM(Sales[SalesAmount])
)
  • 在这个例子中,我们首先使用 FILTER 函数筛选出销售额超过1000的行,然后使用 SUMMARIZE 函数按区域和产品对这些行进行分组,并计算每个组的总销售额。
  • 注意:在创建计算表时,请确保公式正确无误,并且与你的数据源和模型结构相匹配。此外,考虑到计算表可能会增加模型的复杂性和计算负担,因此请谨慎使用,并根据需要进行优化。
  1. 通过新建列、新建表等方式在数据模型中创建分析数据

    • 步骤

      • 在Power BI Desktop的“字段”窗格中,选择现有的数据表。
      • 在数据表视图或数据模型视图中,右键点击选择“新建列”或“新建表”。
      • 在弹出的对话框或DAX编辑器中输入相应的公式或数据。
    • 原理
      在数据模型中直接创建新的列或表,可以基于现有数据进行扩展或转换,以满足特定的分析需求。

    • 举例
      假设有一个包含销售日期的表,但日期是以“YYYYMMDD”格式存储的。可以通过在该表上新建一列,并使用DAX中的DATE函数将字符串转换为真正的日期类型,以便于后续的日期分析和可视化。

  2. 利用数据建模功能创建关系

    • 步骤

      • 在Power BI Desktop的“模型”视图中,查看已加载的数据表。
      • 拖动一个表中的字段到另一个表中的相关字段上,以创建关系。
      • 也可以点击“管理关系”按钮,在弹出的对话框中手动创建或编辑关系。
    • 原理
      在Power BI中,各个表之间需要建立关系以形成完整的数据模型。关系定义了表之间的连接方式和数据流动方向,使得在进行分析时可以跨表引用数据。

    • 举例
      假设有一个销售表和一个产品表,它们之间通过产品ID字段关联。可以在“模型”视图中将销售表中的“产品ID”字段拖动到产品表中的“产品ID”字段上,以创建它们之间的关系。这样,在分析销售数据时就可以引用产品表中的产品名称、价格等信息了。

  3. 使用计算列和计算组

计算列

步骤

  1. 在Power BI Desktop中,打开你的数据模型,并选择你想要添加计算列的表。
  2. 在表的视图中,点击“添加自定义列”按钮(通常位于表的顶部或底部)。
  3. 在打开的DAX公式栏中,输入你的DAX公式来定义新列的值。
  4. 点击“Enter”键或点击公式栏旁边的“√”图标来确认并创建新的计算列。

原理

计算列是基于DAX(Data Analysis Expressions)公式在现有数据表中创建的新列。这些列的值是动态计算的,并随着基础数据的变化而更新。计算列提供了一种扩展数据模型的方式,使得你可以在现有数据的基础上创建新的维度或度量值。

举例

假设你有一个包含销售数据的表,其中有一个“销售额”列和一个“折扣率”列。你可以创建一个计算列来显示“实际销售额”,即“销售额”减去折扣后的金额。在DAX公式栏中,你可以输入如下公式来定义这个计算列:实际销售额 = [销售额] * (1 - [折扣率])

计算组

说明

虽然Power BI本身并没有直接命名为“计算组”的功能,但你可能指的是一种概念上的集合,即将多个相关的计算列和度量值组合在一起,以便在报表或数据模型中更容易地引用和管理它们。在Power BI中,你可以通过创建文件夹或使用分组功能来组织和管理这些计算列和度量值。

步骤(以创建文件夹为例):

  1. 在Power BI Desktop的“字段”窗格中,右键点击你想要添加文件夹的位置。
  2. 选择“新建文件夹”来创建一个新的文件夹。
  3. 将相关的计算列和度量值拖动到该文件夹中。

原理

通过创建文件夹或使用分组功能,你可以将数据模型中的计算列和度量值组织成更有逻辑和层次的结构。这使得在创建报表或进行数据分析时更容易找到和引用这些计算列和度量值。

  1. 使用复合模型和用户定义的聚合

复合模型

步骤

  1. 在Power BI Desktop中,通过“获取数据”功能导入你的主要数据源。
  2. 导入其他数据源作为相关表或模型的一部分。
  3. 在“关系”视图中,创建或管理表之间的关系,确保数据能够正确地跨多个数据源流动。

原理

复合模型允许你在Power BI中整合来自不同数据源的数据。这些数据源可以是不同的数据库、文件或其他类型的数据存储。通过创建关系,你可以将来自不同数据源的数据表连接在一起,形成一个统一的数据模型。这使得你可以在单个Power BI报表中分析来自多个数据源的数据。

举例

假设你有两个数据源:一个是销售数据库,包含销售数据;另一个是库存数据库,包含库存信息。你可以使用复合模型将这两个数据源整合在一起,并通过创建关系来连接销售表和库存表。这样,你就可以在同一个报表中分析销售数据和库存数据了。

用户定义的聚合

说明

在Power BI中,虽然没有直接命名为“用户定义的聚合”的功能,但你可以通过创建自定义的度量值来实现类似的功能。度量值是基于DAX公式定义的,可以用于对数据进行聚合和计算。

步骤

  1. 在Power BI Desktop的“字段”窗格中,选择你想要添加度量值的表或模型。
  2. 点击“新建度量值”按钮(通常位于表的顶部或底部)。
  3. 在打开的DAX公式栏中,输入你的DAX公式来定义度量值。
  4. 点击“Enter”键或点击公式栏旁边的“√”图标来确认并创建新的度量值。

原理

通过创建自定义的度量值,你可以定义自己的聚合函数和计算逻辑。这些度量值可以基于单个表的数据,也可以跨多个表进行计算。它们提供了一种灵活的方式来满足特定的分析需求,并可以根据你的业务逻辑进行定制。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容