AndroidStudio 3.0 にアップデートしましたが,
こんな build.gradle で 以下のエラーです.
android {
  // ...
}
productFlavors {
  flavor1 {
    // ...
  }
}
buildTypes {
  release {
    // ...
  }
  debug {
    // ...
  }
}
Error:All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html

StackOverflowで調べてみると以下の記述で大丈夫と書かれている.
Android Studio 3.0 Flavor Dimension Issue - Stack Overflow
android {
  // ...
  flavorDimensions "default" // OK
  //flavorDimensions "versionCode" // OK
}
productFlavors {
  flavor1 {
    // ...
  }
}
buildTypes {
  release {
    // ...
  }
  debug {
    // ...
  }
}
これでビルドは通る.
なんだか気持ち悪いし意味が不明すぎますね.
試してみる
いろいろやってみましたが, 以下のような記述がOKです.
android {
  // ...
  flavorDimensions "a"
}
productFlavors {
  flavor1 {
    // ...
  }
}
buildTypes {
  release {
    // ...
  }
  debug {
    // ...
  }
}

productFlavor を複数にする.
android {
  // ...
  flavorDimensions "a"
}
productFlavors {
  flavor1 {
    // ...
  }
  flavor2 {
    // ...
  }
  flavor3 {
    // ...
  }
  flavor4 {
    // ...
  }
}
buildTypes {
  release {
    // ...
  }
  debug {
    // ...
  }
}

flavorDimensions で productFlavor を2段階に分ける.
android {
  // ...
  flavorDimensions "a", "b"
}
productFlavors {
  flavor1 {
    dimension "a"
    // ...
  }
  flavor2 {
    dimension "a"
    // ...
  }
  flavor3 {
    dimension "b"
    // ...
  }
  flavor4 {
    dimension "b"
    // ...
  }
}
buildTypes {
  release {
    // ...
  }
  debug {
    // ...
  }
}

dimension で階層化された Build Variant が作成される.
まとめ
もともと productFlavor では以下のようなものが設定できました.
- applicationId
- versionCode
- minSdkVersion
- versionName/Suffix
- ソースコードやリソースの位置
- dependencies
これらを階層化させたい場合に使うのがいいように思います.
まずは, 開発時の時間短縮でしょうか.
flavorDimensions "minSdkVersion", "others"