Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powerbi 在星型模式模型中,我们应该有粗分支还是细分支_Powerbi_Relationship_Dax - Fatal编程技术网

Powerbi 在星型模式模型中,我们应该有粗分支还是细分支

Powerbi 在星型模式模型中,我们应该有粗分支还是细分支,powerbi,relationship,dax,Powerbi,Relationship,Dax,这个问题没有令人满意的答案。请鼓励您回答或评论 让我们考虑下面的数据模型。我们的模型中有三个维度。如果你需要命名它们,可以是(A)产品,(B)品牌,(C)地区。B是a的容器,因此它是一个层次结构。一个品牌的许多产品。表示为A、B、C、AB、ABC的表是只包含唯一值的桥接表 现在问题是: 以下模型中是否需要AB桥接表?我们不能吗 将A和B表直接连接到ABC 为所有维度创建笛卡尔积是个好主意吗 在模型中作为中心桥接表 我们应该用AB维度插入预算表以桥接AB还是 桥ABC?取决于第一个问题的答案 我们

这个问题没有令人满意的答案。请鼓励您回答或评论

让我们考虑下面的数据模型。我们的模型中有三个维度。如果你需要命名它们,可以是(A)产品,(B)品牌,(C)地区。B是a的容器,因此它是一个层次结构。一个品牌的许多产品。表示为A、B、C、AB、ABC的表是只包含唯一值的桥接表

现在问题是:

  • 以下模型中是否需要AB桥接表?我们不能吗 将A和B表直接连接到ABC

  • 为所有维度创建笛卡尔积是个好主意吗 在模型中作为中心桥接表

  • 我们应该用AB维度插入预算表以桥接AB还是 桥ABC?取决于第一个问题的答案

  • 我们应该如何将广告表插入模型?要桥接ABC或专门创建的桥接表BC,以及连接到ABC的桥接表BC

  • 现在是模式:

       +-------+
       |       |
       |  A    +-----+
       |       |     |
       +-------+     |
                     |
                     v
       +-------+  +--+----+      +--------+      +------------+
       |       |  |       |      |        |      | Sales      |
       |  B    +-->  AB   +----->|  ABC   +----->|   ABC      |
       |       |  |       |      |        |      |            |
       +-------+  +--+----+      +---+----+      +------------+
                                     ^
                                     |
       +-------+                     |           +------------+
       |       |                     |           | Budget     |
       |  C    +---------------------+           |   AB       |
       |       |                                 |            |
       +-------+                                 +------------+
    
    
                                                 +------------+
                                                 | Advertizing|
                                                 |   BC       |
                                                 |            |
                                                 +------------+
    
    DAX桥接。

    我喜欢在DAX中构建桥接表,而不是在M中。首先,它是用简单的代码完成的。其次,它为查询编辑器引入了某种整洁性,因为我只看到源表(而不是桥)

    因此,为维度创建桥的方式如下所示:

    #A =
    DISTINCT (
        UNION (
            TOPN ( 0, ROW ( "A", "Apple" ) ),
            DISTINCT ( Sales[A] ),
            DISTINCT ( Budget[A] ),
            DISTINCT ( Advertizing[A] )
        )
    )
    
    AB的桥接器将是这样创建的a和B的笛卡尔乘积:

    AB =
    CROSSJOIN (
        DISTINCT ( '#A'[A] ),
        DISTINCT ( '#B'[B] ),
        "A@B", COMBINEVALUES("@",'#A'[A], '#B'[B])
    )
    
    收到第一个答案后更新。

    一旦悬赏开始,我不想编辑我问题的内容。在第一次回答之后,我意识到我的问题是偶然出现的等级制度,它分散了你对我想了解的内容的注意力。您可以忽略层次结构,将维度A、B、C视为独立维度


    我想重点讨论如何构建一个星型模式,以防我们有许多独立的维度和一些表,比如带有连接维度的字典。例如,我们可以按地区和品牌定义销售预算,按产品颜色定义广告预算。我们是否应该建立一个具有所有维度的中心桥接表(ABC的笛卡尔积)?或者,中心桥接表是否应该具有多个维度的分支?在第二种情况下,根据OP的评论,我们将在2019年11月6日更新[AB]->[ABC]

  • 以下模型中是否需要AB桥接表?我们不能将A和B表直接连接到ABC吗
  • 不需要。不需要像
    AB
    ABC
    这样的桥接表。对于这样的模型,如果存在多个事实表,建议使用多个事实表构建模型。只需在维度表和事实表之间建立直接的一对多关系,例如
    A->Sales
    B->Sales
    A->Budget
    ,以及
    B->Budget
    。请注意,当您查看每个单独的事实表时,事实表和所有相关的维度表形成了一个星形模式

  • 为模型中的所有维度创建笛卡尔积作为中心桥接表是一个好主意吗
  • 不需要。将所有维度表笛卡尔乘积为一个大维度表(我们称之为“联合维度表”)是多余的

    当两个维度之间存在多对多关系时,通常需要两个维度之间的桥接表。例如,当
    客户
    可能属于多个
    类别
    时,需要一个桥接表
    客户类别
    。OP提供的场景不是桥接表的用例

    接头尺寸表的缺点是

    • 它需要额外的数据存储。如果
      A
      B
      C
      分别有100、100、1000行,则联合维度表将有1000万行。假设您在之后添加一个包含100行的新维度,那么维度行数将为10亿!这是不经济的

    • 它需要额外的计算。当我们想要通过
      A
      过滤
      Sales
      时,引擎首先需要扫描联合维度表,以提取与
      A
      的过滤值相匹配的行,这可能是大量的行,然后,引擎使用提取的联合维度表行中包含的关系键扫描
      Sales
      事实表。只有当维度的大小非常小并且事实表非常大时,这才可能起作用。但在许多情况下,表现会令人绝望

    • 这是一种与业务数据无关的表示。我认为这是最大的缺点。在您的模型中,
      Budget
      仅在维度
      A
      B
      的粒度中定义。想想属于
      C
      实例的
      预算是毫无意义的。但是,为了在联合维度表和
      预算
      之间建立关系,我们需要调整
      预算
      ,使其与
      C
      的特定实例相关

    • [Total Budget] :=
      IF (
          NOT ( ISFILTERED ( 'C' ) ),
          SUM ( 'Budget'[Amount] )
      )
      
  • 我们应该用AB维度插入预算表以桥接AB还是桥接ABC?取决于第一个问题的答案
  • 预算
    应直接与
    A
    B
    相关。因为在您的模型中,
    Budget
    的粒度分别为
    A
    B

  • 我们应该如何将广告表插入模型?要桥接ABC或专门创建的桥接表BC,以及连接到ABC的桥接表BC
  • 建立关系
    B->advisting
    C->advisting


    顺便说一句,您的模型中实际上没有多对多关系。可能有多个
    销售记录