דוגמאות לשאילתות ב-BigQuery Export

בדף הזה מפורטות דוגמאות לשאילתות של נתונים על שירותים בערוצים שונים שיוצאו למערך נתונים ב-BigQuery.

מידע נוסף על ייצוא נתונים של Channel Services מופיע במאמר בנושא הגדרת ייצוא נתונים של Channel Services ל-BigQuery. טיפים נוספים לפתרון בעיות מפורטים במאמר פתרון בעיות בייצוא ל-BigQuery.

זיהוי הטבלה ב-BigQuery וגישה אליה

הגדרת הייצוא של Channel Services מתבצעת באמצעות Partner Sales Console.

שם הטבלה מופיע בפורמט: PROJECT_ID.DATASET_NAME.reseller_billing_detailed_export_v1

כדי לאפשר למשתמשים אחרים לצפות בייצוא של שירותי הערוץ, צריך להחיל את ההרשאות הנכונות. לדוגמה, אפשר להקצות את התפקיד bigquery.dataViewer לפרטי הכניסה שלכם בפרויקט, במערך הנתונים או בטבלה עצמה.

דוגמאות לשאילתות

בדוגמאות הבאות מופיעה שאילתה לדוגמה והסבר בסיסי על אופן פירוש התוצאות. התוצאות כוללות את עלויות השימוש של כל לקוח או שותף בערוץ שהוגדרו במסוף תוכנית המכירות של שותפי YouTube. Google Cloud

סיכום העלויות של השותף לפי חשבון לחיוב

אפשר להשתמש בשאילתה הזו כדי לאמת חשבונית שמתקבלת מ-Google. הערכים cost ו-credit.amount הם הסכומים של כל השורות. העלויות האלה כוללות עלויות שימוש, מיסים, התאמות ושגיאות עיגול.

SELECT
  payer_billing_account_id,
  currency,
  invoice.month,
  SUM(cost)
    + SUM(
      IFNULL(
        (SELECT SUM(c.amount) FROM UNNEST(credits) AS c), 0))
    AS total
FROM `PROJECT_ID.DATASET_NAME.reseller_billing_detailed_export_v1`
WHERE
  export_time BETWEEN TIMESTAMP(START_DATE)
    AND TIMESTAMP(END_DATE)
GROUP BY
  payer_billing_account_id,
  currency,
  invoice.month
ORDER BY
  payer_billing_account_id,
  currency,
  invoice.month;

סכום העלויות של הלקוח לפי חשבון משני לחיוב ב-Cloud

אפשר להשתמש בשאילתה הזו כדי לסכם את השימוש שניתן לחיוב לכל לקוח. הערכים customer_cost ו-credit.customer_amount מייצגים את הסכומים של כל השורות שמייצגות עלויות שימוש. בשורות שמייצגות מיסים, התאמות ועיגולים מוצג ערך של null.

בקרדיטים שבהם הערך של type הוא RESELLER_MARGIN, הערך של customer_amount הוא אפס כדי לוודא שהשוליים לא יוצגו בחיוב הלקוח.

הערכים customer_cost ו-credit.customer_amount מציגים את הגדרות התמחור מחדש. לדוגמה, אם הערך RebillingBasis של זכאותGoogle Cloud של לקוח מסוים מוגדר כ-Direct Customer Cost minus 5%, הערך customer_cost הוא 0.95 כפול cost. העמודה הזו משקפת את ההפחתה שהוגדרה בעלות.

התוצאות של השאילתה הזו כוללות כל חשבון משנה לחיוב ב-Cloud, את שם המשאב המשויך של הלקוח של תוכנית המכירות של שותפי YouTube, את חודש החשבונית ואת סך השימוש שניתן לחיוב.

SELECT
  customer_name,
  billing_account_id,
  payer_billing_account_id,
  currency,
  invoice.month,
  SUM(customer_cost)
    + SUM(
      IFNULL(
        (SELECT SUM(c.customer_amount) FROM UNNEST(credits) AS c), 0))
    AS total
FROM `PROJECT_ID.DATASET_NAME.reseller_billing_detailed_export_v1`
WHERE
  export_time BETWEEN TIMESTAMP(START_DATE)
    AND TIMESTAMP(END_DATE)
GROUP BY
  customer_name,
  billing_account_id,
  payer_billing_account_id,
  currency,
  invoice.month
ORDER BY
  customer_name,
  billing_account_id,
  payer_billing_account_id,
  currency,
  invoice.month;

סכום העלויות של הלקוח לפי חשבון משנה לחיוב ב-Cloud, כפי שמוצג לבעלים של חשבון המשנה

השאילתה הזו מראה איך נתוני העלויות תואמים למה שלקוח שרוכש דרך שותף (או השותף עצמו) רואה כשהוא פותח את מסוף Google Cloud עבור חשבון המשנה שלו.

  1. בזיכויים שבהם הערך של type הוא RESELLER_MARGIN, העמודה הזו מוסתרת בתצוגת SBA.
  2. אם העלות היא cost_type tax, היא מוסתרת בתצוגת SBA. המשווק אמור להוסיף את המיסים הרלוונטיים בנפרד לחשבוניות של המוצרים שהוא מוכר.

לפעמים, הערך של cost_at_list יכול להיות null בחלק מהרשומות, ולכן התוצאה הזו תהיה שונה מהתוצאה שמוצגת במסוף Google Cloud . אם זה קורה, צריך להשתמש ב-IFNULL(cost_at_list, cost) במקום זאת. מידע נוסף זמין במאמר בנושא חיובים ללא עלויות מחירון.

SELECT
  customer_name,
  currency,
  SUM(cost_at_list) AS list_cost,
  SUM(cost - cost_at_list) AS negotiated_savings,
  SUM(cost)
    + SUM(
      IFNULL(
        (
          SELECT
            SUM(c.amount)
          FROM
            UNNEST(credits) AS c
          WHERE
            c.type != 'RESELLER_MARGIN'
        ),
        0)) AS total
FROM
  `PROJECT_ID.DATASET_NAME.reseller_billing_detailed_export_v1`
WHERE
  cost_type != 'tax'
  AND billing_account_id = 'BILLING_SUBACCOUNT_ID'
  AND invoice.month = 'YYYYMM'
GROUP BY
  customer_name,
  currency
ORDER BY
  customer_name,
  currency;

סיכום העלויות של השותף הראשי לפי חשבון לחיוב

אם אתם מפיצים, אתם יכולים להשתמש בשאילתה הזו כדי לסכם את השימוש שחויב עבור כל שותף ערוץ. הערכים channel_partner_cost ו-credit.channel_partner_amount מייצגים את סכום כל השורות שמייצגות עלויות שימוש. בשורות שמייצגות מיסים, התאמות ועיגולים מוצג ערך של null.

בזיכויים שבהם הערך של type הוא RESELLER_MARGIN, הערך של channel_partner_amount הוא אפס כדי לוודא שהשוליים לא יוצגו בחיוב של שותף הערוץ.

הערכים channel_partner_cost ו-credit.channel_partner_amount מציגים את הגדרות התמחור מחדש. לדוגמה, אם הערך של RebillingBasis עבור שותף מסוים בערוץ מוגדר כ-Direct Customer Cost minus 5%, הערך של channel_partner_cost הוא 0.95 כפול cost. העמודה הזו משקפת את ההפחתה שהוגדרה בעלות.

התוצאות של השאילתה הזו כוללות כל חשבון לחיוב, את השותף הראשי resource_name שמשויך ללקוחות בחשבון לחיוב הזה, את חודש החשבונית ואת סך השימוש שניתן לחיוב.

SELECT
  channel_partner_name,
  payer_billing_account_id,
  currency,
  invoice.month,
  SUM(channel_partner_cost)
    + SUM(
      IFNULL(
        (SELECT SUM(c.channel_partner_amount) FROM UNNEST(credits) AS c), 0))
    AS total
FROM `PROJECT_ID.DATASET_NAME.reseller_billing_detailed_export_v1`
WHERE
  export_time BETWEEN TIMESTAMP(START_DATE)
    AND TIMESTAMP(END_DATE)
GROUP BY
  channel_partner_name,
  payer_billing_account_id,
  currency,
  invoice.month
ORDER BY
  channel_partner_name,
  payer_billing_account_id,
  currency,
  invoice.month;

סכום העלויות שלא הוקצו ללקוח

אפשר להשתמש בשאילתה הזו כדי לסכם עלויות שלא מקושרות ללקוח של Channel Services, אבל יכול להיות שהן מייצגות שימוש שניתן לחייב לקוחות אחרים. הערכים cost ו-credit.amount מציגים את הסכום של כל השורות שבהן הערכים billing_account_id ו-payer_billing_account_id שונים. ‫billing_account_id מייצג את החשבון המשני לחיוב ב-Cloud.

בזיכויים שבהם הערך של type הוא RESELLER_MARGIN, השאילתה הזו לא כוללת את סכום הזיכוי. סכום הקרדיט מיועד להקצאה שלכם ולא נחשב כעלות ללקוח. הסכום RESELLER_MARGIN כלול בעלויות שלכם ומופיע בחשבוניות שנשלחות מ-Google.

SELECT
  billing_account_id,
  payer_billing_account_id,
  currency,
  invoice.month,
  SUM(cost)
    + SUM(
      IFNULL(
        (SELECT SUM(c.amount) FROM UNNEST(credits) AS c WHERE c.type != 'RESELLER_MARGIN'), 0))
    AS total
FROM `PROJECT_ID.DATASET_NAME.reseller_billing_detailed_export_v1`
WHERE
  export_time BETWEEN TIMESTAMP(START_DATE)
    AND TIMESTAMP(END_DATE)
  AND customer_name IS NULL
GROUP BY
  billing_account_id,
  payer_billing_account_id,
  currency,
  invoice.month
ORDER BY
  billing_account_id,
  payer_billing_account_id,
  currency,
  invoice.month;

תצוגת נתונים של Google Workspace דומה לקובץ CSV של חשבונית

אם אתם מפיצים של Google Workspace, יכול להיות שתראו את נתוני החיוב של Google Workspace עם עמודות דומות לאלה שבקובצי ה-CSV של החשבוניות.

SELECT
  (
    SELECT
      ws_labels.value
    FROM
      UNNEST(system_labels) AS ws_labels
    WHERE
      ws_labels.key = 'workspace.googleapis.com/domain_name'
  ) AS domain_name,
  billing_account_id AS customer_id,
  sku.description AS sku_name,
  sku.id AS sku_id,
  (
    SELECT
      ws_labels.value
    FROM
      UNNEST(system_labels) AS ws_labels
    WHERE
      ws_labels.key = 'workspace.googleapis.com/usage_type'
  ) AS description,
  (
    SELECT
      ws_labels.value
    FROM
      UNNEST(system_labels) AS ws_labels
    WHERE
      ws_labels.key = 'workspace.googleapis.com/order_id'
  ) AS order_name,
  FORMAT_TIMESTAMP('%b %d', usage_start_time, 'America/Los_Angeles')
    AS start_date,
  FORMAT_TIMESTAMP(
    '%b %d',
    TIMESTAMP_SUB(usage_end_time, INTERVAL 1 MINUTE),
    'America/Los_Angeles')
    AS end_date,
  SUM(usage.amount_in_pricing_unit) AS quantity,
  (
    SELECT ws_labels.value
    FROM UNNEST(system_labels) AS ws_labels
    WHERE ws_labels.key = 'workspace.googleapis.com/purchase_order_id'
  ) AS po_number,
  SUM(cost) AS amount,
  SUM(cost_at_list) AS list_amount,
FROM `PROJECT_ID.DATASET_NAME.reseller_billing_detailed_export_v1`
WHERE
  export_time BETWEEN TIMESTAMP(START_DATE)
    AND TIMESTAMP(END_DATE)
  AND payer_billing_account_id = 'EXTERNAL_BILLING_ACCOUNT_ID'
  AND invoice.month = 'INVOICE_MONTH'
GROUP BY
  domain_name,
  customer_id,
  sku_name,
  sku_id,
  description,
  order_name,
  start_date,
  end_date,
  po_number
HAVING amount != 0
ORDER BY
  domain_name,
  order_name,
  start_date,
  end_date;

עמודות אחרות שעשויות לעניין אתכם, שאפשר להוסיף לסעיפים SELECT ו-GROUP BY:

  • billing_account_id: מייצג את מזהה הלקוח ב-Cloud Identity.
  • customer_name: מייצג את משאב הלקוח שאפשר להשתמש בו בקריאות ל-API.
  • channel_partner_name: (למפיצים) מייצג את השותף הערוצי.
  • entitlement_name: שם המשאב של ההרשאה בשירותי הערוצים.
  • customer_correlation_id: מזהה של מערכת לניהול קשרי לקוחות (CRM) שאפשר להגדיר עבור לקוח.
  • usage.amount: בשימוש ב-Google Workspace לפי מספר המשתמשים, הערך הזה מציין משתמשים בתשלום. לדוגמה, מושבים שנרכשו עבור התחייבויות או מספר המושבים שהוקצו למינויים גמישים.

תוצאת השאילתה שונה מחשבונית ה-CSV בדרכים הבאות:

  • בעמודה Description ב-CSV נעשה שימוש במחרוזת קריאה לאנשים, ואילו בייצוא ל-BigQuery נעשה שימוש בערכי enum.
  • הערכים בעמודות 'תאריך התחלה' ו'תאריך סיום' ב-CSV לא כוללים אפסים מובילים (למשל, 1 במאי), אבל בשאילתת BigQuery נעשה שימוש בערכים עם אפסים מובילים (למשל, 01 במאי). אפשר גם להשתמש ישירות בערכי חותמת הזמן. התג usage_start_time הוא כולל, אבל התג usage_end_time הוא לא כולל.
  • בקובץ ה-CSV יש שורה אחת של 'מס' בסוף, ואילו בייצוא ל-BigQuery יש שורות מס ברמת המינוי, שסכום המס שלהן זהה לסכום המס בשורה 'מס' בקובץ ה-CSV.

תצוגה של נתוני חיוב בהזמנה במצב אופליין, בדומה ל-PDF של החשבונית (גרסת Preview)

מפיצים שמבצעים גם הזמנות אופליין (הזמנות שלא מתבצעות דרך Partner Sales Console) יכולים לראות נתוני חיוב עם עמודות דומות לאלה שבקובצי ה-CSV של החשבוניות.

SELECT
  billing_account_id AS customer_name,
  service.description AS sku_name,
  sku.id AS sku_id,
  FORMAT_TIMESTAMP('%b %d', usage_start_time, 'America/Los_Angeles')
    AS start_date,
  FORMAT_TIMESTAMP('%b %d', usage_end_time, 'America/Los_Angeles')
    AS end_date,
  SUM(usage.amount_in_pricing_unit) AS quantity,
  SUM(cost) AS amount,
FROM `PROJECT_ID.DATASET_NAME.reseller_billing_offline_orders_detailed_export_v0`
WHERE
  export_time BETWEEN TIMESTAMP(START_DATE)
    AND TIMESTAMP(END_DATE)
  AND payer_billing_account_id = 'EXTERNAL_BILLING_ACCOUNT_ID'
  AND invoice.month = 'INVOICE_MONTH'
GROUP BY
  customer_name,
  sku_name,
  sku_id,
  start_date,
  end_date
HAVING amount != 0
ORDER BY
  customer_name,
  start_date,
  end_date,
  sku_id;

תוצאת השאילתה שונה מחשבונית ה-PDF בדרכים הבאות:

  • אפשר להמיר את ערך חותמת הזמן לערך תאריך באזור הזמן America/Los_Angeles. התכונות usage_start_time וגם usage_end_time הן בלעדיות.
  • ב-PDF יש פירוט מס מפורט של מס מכירות מקומי לעומת מס מכירות מדינתי, ואילו בייצוא ל-BigQuery יש שורות מס ברמת המינוי, שסכומן הוא סכום המס לכל המינוי.